> ## Documentation Index
> Fetch the complete documentation index at: https://docs.inworld.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Routing quickstart

> Create a reusable router in Portal or through the API, then send a request through it

Create a reusable router when you need traffic splitting, conditional routes or a saved routing configuration. You can create it in [Portal](#create-your-first-router-on-portal) or through the [API](#create-your-first-router-via-api). To call a model directly first, use the [Inference quickstart](https://docs.inworld.ai/router/quickstart.md).

While this guide uses the OpenAI Chat Completions compatible `/v1/chat/completions` endpoint, you can also integrate with our [Anthropic Messages API compatible](https://docs.inworld.ai/router/anthropic-compatibility.md) `/v1/messages` endpoint, [OpenAI SDK](https://docs.inworld.ai/router/openai-compatibility.md#openai-sdk), and Anthropic SDK.

These examples run on your server with a **Standard** API key. Set `INWORLD_API_KEY` to the copied Base64 credential as-is; do not encode it again. Direct requests use Basic. Creating a router through the API additionally requires Router **Write** permission; calling chat completions does not. Browser/mobile clients should use a [backend-minted token](https://docs.inworld.ai/portal/ephemeral-tokens.md#connect-a-client-through-your-backend) or a server proxy. See [authentication recovery](https://docs.inworld.ai/portal/api-key-auth.md#recover-from-authentication-failures) if a request fails.

## Create your first router on Portal

<Steps titleSize="h3">
  <Step title="Open Routers">
In [Inworld Portal](https://platform.inworld.ai/), go to **Routers** and select "Compare frontier models".

![](https://static.inworld.ai/portal-doc/img/portal/create-preset-router.be38751b.png)
  </Step>
  <Step title="Create a router">
Click **Save** to create this router, which splits your traffic between Anthropic's Opus 4.6, Google's Gemini 3.1 Pro, and OpenAI's GPT-5.2.

![](https://static.inworld.ai/portal-doc/img/portal/save-router.00d4ef7d.png)
  </Step>
  <Step title="Get your API Key">
Go to [**API Keys**](https://platform.inworld.ai/api-keys) and click **Generate new key**. Copy the Base64 credentials.
  </Step>
  <Step title="Make your first request">
Now run the following code to make your first request to your router.

<CodeGroup>
```bash curl
curl --request POST \
  --url https://api.inworld.ai/v1/chat/completions \
  --header "Authorization: Basic $INWORLD_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{
    "model": "inworld/compare-frontier-models",
    "messages": [
      {"role": "user", "content": "Who created you?"}
    ]
  }'
```
</CodeGroup>

If you run the request multiple times, you should see traffic split across Anthropic's Opus 4.6, Google's Gemini 3.1 Pro, and OpenAI's GPT-5.2.

    </Step>
</Steps>

## Create your first router via API

<Steps titleSize="h3">
  <Step title="Get your API Key">
In [Inworld Portal](https://platform.inworld.ai/), go to [**API Keys**](https://platform.inworld.ai/api-keys) and click **Generate new key**. Enable **Write** permissions for the Router API, and click **Generate**.

Copy the Base64 credentials.

![](https://static.inworld.ai/portal-doc/img/portal/api-key-router.99e5ad5f.webp)
  </Step>
  <Step title="Create a router">
Now let's create a router that splits your traffic between Anthropic's Opus 4.6, Google's Gemini 3.1 Pro, and OpenAI's GPT-5.2.

<CodeGroup>
```shell curl
curl --location 'https://api.inworld.ai/router/v1/routers' \
--header 'Content-Type: application/json' \
--header "Authorization: Basic $INWORLD_API_KEY" \
--data '{
    "name": "compare-frontier-models",
    "default_route": {
        "route_id": "default",
        "variants": [
            {
                "variant": {
                    "variant_id": "anthropic",
                    "model_id": "anthropic/claude-opus-4-6"
                },
                "weight": 33
            },
            {
                "variant": {
                    "variant_id": "google",
                    "model_id": "google-ai-studio/gemini-3.1-pro-preview"
                },
                "weight": 33
            },
            {
                "variant": {
                    "variant_id": "openai",
                    "model_id": "openai/gpt-5.2"
                },
                "weight": 34
            }
        ]
    }
}'
```

```python Python
import os
import requests

url = "https://api.inworld.ai/router/v1/routers"
headers = {
    "Content-Type": "application/json",
    "Authorization": f"Basic {os.environ['INWORLD_API_KEY']}"
}
data = {
    "name": "compare-frontier-models",
    "default_route": {
        "route_id": "default",
        "variants": [
            {
                "variant": {
                    "variant_id": "anthropic",
                    "model_id": "anthropic/claude-opus-4-6"
                },
                "weight": 33
            },
            {
                "variant": {
                    "variant_id": "google",
                    "model_id": "google-ai-studio/gemini-3.1-pro-preview"
                },
                "weight": 33
            },
            {
                "variant": {
                    "variant_id": "openai",
                    "model_id": "openai/gpt-5.2"
                },
                "weight": 34
            }
        ]
    }
}

response = requests.post(url, headers=headers, json=data)
print(response.json())
```

```javascript JavaScript
const response = await fetch("https://api.inworld.ai/router/v1/routers", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Authorization": `Basic ${process.env.INWORLD_API_KEY}`
  },
  body: JSON.stringify({
    name: "compare-frontier-models",
    default_route: {
      route_id: "default",
      variants: [
        {
          variant: {
            variant_id: "anthropic",
            model_id: "anthropic/claude-opus-4-6"
          },
          weight: 33
        },
        {
          variant: {
            variant_id: "google",
            model_id: "google-ai-studio/gemini-3.1-pro-preview"
          },
          weight: 33
        },
        {
          variant: {
            variant_id: "openai",
            model_id: "openai/gpt-5.2"
          },
          weight: 34
        }
      ]
    }
  })
});

const data = await response.json();
console.log(data);
```
</CodeGroup>
  </Step>
  <Step title="Make your first request">
Now run the following code to make your first request to your router.

<CodeGroup>
```bash curl
curl --request POST \
  --url https://api.inworld.ai/v1/chat/completions \
  --header "Authorization: Basic $INWORLD_API_KEY" \
  --header 'Content-Type: application/json' \
  --data '{
    "model": "inworld/compare-frontier-models",
    "messages": [
      {"role": "user", "content": "Who created you?"}
    ]
  }'
```
</CodeGroup>

If you run the request multiple times, you should see traffic split across Anthropic's Opus 4.6, Google's Gemini 3.1 Pro, and OpenAI's GPT-5.2.

    </Step>
</Steps>

## Next steps

Now that you've made your first request, you can explore more of Inworld Inference's capabilities.

<CardGroup cols={3}>
  <Card title="Explore" icon="search" href="https://docs.inworld.ai/router/core-concepts/overview.md">
    Understand core router concepts, including fallbacks, conditional routing, and more
  </Card>

  <Card title="Routing Strategies" icon="shuffle" href="https://docs.inworld.ai/router/capabilities/conditional-routing.md">
    Learn more about how to use conditional routing
  </Card>

  <Card title="API Reference" icon="books" href="https://docs.inworld.ai/api-reference/routerAPI/chat-completions.md">
    View request and response schemas for Chat Completions and Router APIs
  </Card>
</CardGroup>
