Skip to content

Router docs

Router documentation

Router is multi-model AI routing for developers. It speaks the OpenAI API, so you change the base URL, add your key, and your existing code works. These docs cover the things that differ.

Request early access

Quickstart

Install the OpenAI SDK, point it at Router, and make a chat completion. This is the whole integration.

pip install openai
from openai import OpenAI

client = OpenAI(
    base_url="https://router.kyzon.com/v1",
    api_key="YOUR_KYZON_KEY",
)

response = client.chat.completions.create(
    model="openai/gpt-4.1-mini",
    messages=[
        {"role": "user", "content": "Hello"},
    ],
)

print(response.choices[0].message.content)

Already using the OpenAI SDK? The base URL and the key are the only changes.

Authentication

Router authenticates with a Bearer token. Pass your key in the Authorization header. The OpenAI SDK sets this for you when you provide api_key.

curl https://router.kyzon.com/v1/chat/completions \
  -H "Authorization: Bearer YOUR_KYZON_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-4.1-mini",
    "messages": [{"role": "user", "content": "Hello"}]
  }'

Getting a key

Router is in early access. Request access and we turn on your key. Keep keys server-side and never expose them in client code.

Request early access

Making requests

Router implements the OpenAI Chat Completions API. Any request your code already sends works once the base URL points at Router. Below is only what is specific to Router.

Selecting a model

Pass the model as a provider/model slug. The same request targets any supported provider by changing this one field.

# switch providers by changing the slug
model="openai/gpt-4.1-mini"
model="anthropic/claude-sonnet-4"
model="google/gemini-2.5-flash"

Streaming

Set stream to true for token-by-token responses over server-sent events, exactly as in the OpenAI SDK.

stream = client.chat.completions.create(
    model="openai/gpt-4.1-mini",
    messages=[{"role": "user", "content": "Hello"}],
    stream=True,
)

for chunk in stream:
    print(chunk.choices[0].delta.content or "", end="")

Chat completions and streaming are supported with the parameters in this guide. Fine-tuning, assistants, image generation, and file endpoints are not available on Router today.

Supported models

Pass the slug in the model field. This is the current routable set.

Model slugProviderContext
openai/gpt-3.5-turboOpenAI16K
openai/gpt-3.5-turbo-0613OpenAI4K
openai/gpt-3.5-turbo-16kOpenAI16K
openai/gpt-3.5-turbo-instructOpenAI4K
openai/gpt-4OpenAI8K
openai/gpt-4-turboOpenAI128K
openai/gpt-4-turbo-previewOpenAI128K
openai/gpt-4.1OpenAI1M
openai/gpt-4.1-miniOpenAI1M
openai/gpt-4.1-nanoOpenAI1M
openai/gpt-4oOpenAI128K
openai/gpt-4o-2024-05-13OpenAI128K
openai/gpt-4o-2024-08-06OpenAI128K
openai/gpt-4o-2024-11-20OpenAI128K
openai/gpt-4o-miniOpenAI128K
openai/gpt-4o-mini-2024-07-18OpenAI128K
openai/gpt-5OpenAI400K
openai/gpt-5-chatOpenAI128K
openai/gpt-5-codexOpenAI400K
openai/gpt-5-miniOpenAI400K
openai/gpt-5-nanoOpenAI400K
openai/gpt-5-proOpenAI400K
openai/gpt-5.1OpenAI400K
openai/gpt-5.1-chatOpenAI128K
openai/gpt-5.1-codexOpenAI400K
openai/gpt-5.1-codex-maxOpenAI400K
openai/gpt-5.1-codex-miniOpenAI400K
openai/gpt-5.2OpenAI400K
openai/gpt-5.2-chatOpenAI128K
openai/gpt-5.2-codexOpenAI400K
openai/gpt-5.2-proOpenAI400K
openai/gpt-5.3-chatOpenAI128K
openai/gpt-5.3-codexOpenAI400K
openai/gpt-5.4OpenAI1M
openai/gpt-5.4-miniOpenAI400K
openai/gpt-5.4-nanoOpenAI400K
openai/gpt-5.4-proOpenAI1M
openai/gpt-5.5OpenAI1M
openai/gpt-5.5-proOpenAI1M
openai/gpt-chat-latestOpenAI400K
openai/gpt-oss-120bOpenAI131K
openai/gpt-oss-20bOpenAI131K
openai/o1OpenAI200K
openai/o1-proOpenAI200K
openai/o3OpenAI200K
openai/o3-miniOpenAI200K
openai/o3-mini-highOpenAI200K
openai/o3-proOpenAI200K
openai/o4-miniOpenAI200K
openai/o4-mini-highOpenAI200K
anthropic/claude-haiku-4.5Anthropic200K
anthropic/claude-opus-4.1Anthropic200K
anthropic/claude-opus-4.5Anthropic200K
anthropic/claude-opus-4.6Anthropic1M
anthropic/claude-opus-4.6-fastAnthropic1M
anthropic/claude-opus-4.7Anthropic1M
anthropic/claude-opus-4.7-fastAnthropic1M
anthropic/claude-opus-4.8Anthropic1M
anthropic/claude-opus-4.8-fastAnthropic1M
anthropic/claude-sonnet-4.5Anthropic1M
anthropic/claude-sonnet-4.6Anthropic1M
google/gemini-2.5-flashGoogle1M
google/gemini-2.5-flash-liteGoogle1M
google/gemini-2.5-flash-lite-preview-09-2025Google1M
google/gemini-2.5-proGoogle1M
google/gemini-2.5-pro-previewGoogle1M
google/gemini-2.5-pro-preview-05-06Google1M
google/gemini-3-flash-previewGoogle1M
google/gemini-3.1-flash-liteGoogle1M
google/gemini-3.1-flash-lite-previewGoogle1M
google/gemini-3.1-pro-previewGoogle1M
google/gemini-3.5-flashGoogle1M
google/gemma-2-27b-itGoogle8K
google/gemma-3-12b-itGoogle131K
google/gemma-3-27b-itGoogle131K
google/gemma-3-4b-itGoogle131K
google/gemma-3n-e4b-itGoogle32K
google/gemma-4-26b-a4b-itGoogle262K
google/gemma-4-31b-itGoogle262K
mistral/codestral-2508Mistral256K
mistral/devstral-2512Mistral262K
mistral/ministral-14b-2512Mistral262K
mistral/ministral-3b-2512Mistral131K
mistral/ministral-8b-2512Mistral262K
mistral/mistral-largeMistral128K
mistral/mistral-large-2407Mistral131K
mistral/mistral-large-2512Mistral262K
mistral/mistral-medium-3Mistral131K
mistral/mistral-medium-3-5Mistral262K
mistral/mistral-medium-3.1Mistral131K
mistral/mistral-nemoMistral131K
mistral/mistral-sabaMistral32K
mistral/mistral-small-24b-instruct-2501Mistral32K
mistral/mistral-small-2603Mistral262K
mistral/mistral-small-3.1-24b-instructMistral128K
mistral/mistral-small-3.2-24b-instructMistral128K
mistral/mixtral-8x22b-instructMistral65K
meta/llama-3-8b-instructMeta8K
meta/llama-3.1-70b-instructMeta131K
meta/llama-3.1-8b-instructMeta131K
meta/llama-3.2-1b-instructMeta131K
meta/llama-3.2-3b-instructMeta131K
meta/llama-3.3-70b-instructMeta131K
meta/llama-4-maverickMeta1M
meta/llama-4-scoutMeta10M
cohere/command-aCohere256K
cohere/command-r-08-2024Cohere128K
cohere/command-r-plus-08-2024Cohere128K
cohere/command-r7b-12-2024Cohere128K
deepseek/deepseek-chatDeepSeek131K
deepseek/deepseek-chat-v3-0324DeepSeek163K
deepseek/deepseek-chat-v3.1DeepSeek163K
deepseek/deepseek-r1DeepSeek163K
deepseek/deepseek-r1-0528DeepSeek163K
deepseek/deepseek-r1-distill-llama-70bDeepSeek128K
deepseek/deepseek-v3.1-terminusDeepSeek163K
deepseek/deepseek-v3.2DeepSeek131K
deepseek/deepseek-v3.2-expDeepSeek163K
deepseek/deepseek-v4-flashDeepSeek1M
deepseek/deepseek-v4-proDeepSeek1M

Request logs

Every request and response through Router is logged on Australian infrastructure, giving you a full record for debugging and audit.

What is captured
Request and response payloads, model slug, provider, token counts, cost, latency, team, and timestamp.
Where it lives
AWS Sydney (ap-southeast-2).
Retention
Between 30 days and 6 months depending on the use case.
Access
Dashboard export today. Logs API access is available on request during early access.

Errors and rate limits

Router returns standard HTTP status codes with a JSON error object in the OpenAI format: error.message, error.type, and error.code.

StatusMeaning
401Missing or invalid key.
400Malformed request, for example an unknown model slug.
429Rate limit reached. During early access, limits are conservative.
5xxA provider or Router error. Retry with backoff.

Rate limits during early access are set per account when your key is issued. Contact us if you need higher throughput.

Ready to build?

Router is in early access. Request a key to start, or see how usage is priced.