Swap models without changing code
The model field accepts any of the 100+ IDs in the catalog. Routing, adapter translation, and billing are automatic — the request body shape is identical regardless of which model you pick.
Model ID format
IDs are <provider>/<model-name>, lowercase, with no version suffix for stable releases. Dated snapshots (e.g. openai/gpt-5.4-2026-02-01) pin a specific version.
Popular models
| Model ID | Provider | Use case |
|---|---|---|
moonshot/kimi-k2.6 | Moonshot | Agent loops, long context, vision |
openai/gpt-5.4 | OpenAI | General reasoning, 1M context |
anthropic/claude-opus-4.7 | Anthropic | Frontier reasoning, careful synthesis |
google/gemini-3.1-pro | Multimodal, 2M context, video | |
deepseek/deepseek-r1 | DeepSeek | Open-weight reasoning, cheap |
bfl/flux-2-klein-9b | Black Forest Labs | Image generation |
The full live catalog lives at /models. Hit GET /v1/models to list them programmatically.
How adapter translation works
Every provider has slightly different request / response conventions. The gateway translates transparently:
- Anthropic's separate
systemfield is merged into yourmessagesarray. - Gemini's
candidatesbecomechoices;partsbecomecontent. - Reasoning traces from DeepSeek R1, OpenAI o-series, Claude extended thinking, and Gemini thought summaries all surface as
message.reasoning_content(see Reasoning). - Tool calls are normalized to OpenAI
tool_callsregardless of the upstream format.
Fallbacks
If a provider is degraded or returns a retryable error, we fail over to a pre-configured sibling model for the same family (e.g. anthropic/claude-sonnet-4.5 → anthropic/claude-sonnet-4). The response sets x-aig-served-by so you can see which model actually answered. Disable fallbacks per request with "fallbacks": false.