Skip to main content
The gateway is reachable at https://gw.to11.ai/v1. It exposes chat ingress endpoints, model discovery, embeddings, token counting, image generation, audio (transcription + TTS), and file management. Each chat endpoint accepts one SDK’s wire format and forwards the request to the provider as written; the provider’s response comes back in that same format. The gateway does not translate between formats, so the provider a request resolves to must speak the endpoint’s format — see Wire format must match the provider.
Send x-to11-authorization and x-to11-project-id on every request (see Authentication). For brevity, most examples on this page show only the upstream provider credential — Authorization: Bearer (or x-api-key for Anthropic-style requests) — and omit the two x-to11-* headers. Drop the provider credential entirely when it is managed in the dashboard.
This page is the gateway — the data plane. It serves the model calls your application makes. The control plane is a separate API that manages what the gateway serves: prompts, versions, releases, providers and routing. It is reached through the TypeScript and Python SDKs, and its prompt endpoints — including the ones a skill is created, imported, released and rendered through — are described alongside the feature they belong to.The distinction matters for one case in particular: a skill is delivered to a developer’s machine and is never resolvable for inference, so no endpoint on this page will ever serve one.

Endpoints

The model field determines which upstream provider handles the request. It names the provider or route with a prefix separated by :::
  • <provider-slug>::model — send to the connected provider with that routing identifier (e.g. anthropic::claude-sonnet-4-6)
  • route::name — route to a named route
  • function::name — route to a named function defined in your to11 project’s routing
A model with no prefix (e.g. gpt-4o) must carry the x-to11-provider-id header naming the provider; without it the request is rejected with 400 Bad Request. The examples on this page assume providers whose routing identifiers are openai and anthropic. See Naming the provider in a request. Provider-native passthrough routes also exist under /v1/bedrock/*, /v1/vertex/*, and /v1/mistral/* for advanced provider-specific APIs; those forward request bodies to the upstream verbatim and are gated to providers that support them.

Headers

Authentication

Gateway requests use two independent credentials:
  1. Your to11 platform key authenticates the request to to11 and is sent in the x-to11-authorization header. The x-to11-project-id header selects which project’s routing and provider configuration applies.
  2. The upstream provider credential. Either the project’s provider credentials are configured in the dashboard (project → Gateway), in which case you send nothing extra; or you pass your own provider key (BYOK) in the standard Authorization: Bearer <provider-key> header (or x-api-key for Anthropic-style requests). The gateway forwards that key to the upstream provider.
The standard Authorization header carries the upstream provider key, not your to11 key. Put the to11 key in x-to11-authorization. When provider credentials are managed in the dashboard, you can omit Authorization entirely.

SDK detection

The gateway auto-detects the caller’s SDK format from the endpoint. Override with:

Provider selection

Name the provider with a <provider-slug>::model prefix in the model field:
Or, for a client that cannot change its model string, send the bare model with the provider’s id in a header:
The header is read only when the model has no prefix. See Pinning a provider by id. The x-genai-provider header (openai | anthropic | xai) names a provider type, not one of your connected providers, and does not select where a request goes. If it is present alongside a prefix that is also a provider type name and the two disagree, the request is rejected.

Chat completions

OpenAI format

Response:

Anthropic format

Response:

Wire format must match the provider

Each chat endpoint carries one wire format, and the gateway forwards the request to the provider in that format: Which SDK to call a provider with has the full list, including Google Gemini, Google Vertex AI, and AWS Bedrock. A request in a format the provider does not speak — such as a /v1/chat/completions request with "model": "anthropic::claude-sonnet-4-6" — is rejected with 400 Bad Request and x-to11-error-code: cross_dialect before anything is sent to the provider. See Wire-format mismatch.

Streaming

Add "stream": true to any request to receive Server-Sent Events:
The gateway forwards the provider’s SSE events as they arrive. See Streaming.

Structured output

response_format is an OpenAI Chat Completions field and reaches the provider unchanged:
Whether a type (text, json_object, json_schema) is supported is up to the provider and model; an unsupported one returns the provider’s error.

Tool calls

The tools field reaches the provider unchanged, in the endpoint’s format: OpenAI function definitions with parameters on /v1/chat/completions, Anthropic definitions with input_schema on /v1/messages:

Models

List all configured models or retrieve a single model. The list holds each active provider’s listed models that its access policy serves in the request’s environment — no upstream provider call is made. id is the bare model id and owned_by is the provider’s routing identifier, so <owned_by>::<id> is the value to send in model. A provider that allows by default can serve models that are not listed here.

Embeddings

Passthrough proxy to OpenAI-compatible providers. The request is routed by its model field, like a chat request. Anthropic models return 400 Bad Request.
Input text is scanned by the security pipeline (PII + blocklist) when security is enabled. The embedding model must be one the provider’s access policy allows.

Token counting

Passthrough proxy to Anthropic’s /messages/count_tokens endpoint. Only Anthropic models are supported — OpenAI models return 400 Bad Request.
Response: {"input_tokens": 14}

Image generation

Passthrough proxy to OpenAI-compatible providers’ DALL-E endpoint. Anthropic models return 400 Bad Request.
The prompt field is scanned by the security pipeline when enabled. The image model must be one the provider’s access policy allows.

Audio transcription

Passthrough proxy to OpenAI’s Whisper endpoint. The request must be multipart/form-data containing an audio file. No security scanning is applied (binary audio input).

Audio speech (TTS)

Passthrough proxy to OpenAI’s text-to-speech endpoint. Anthropic models return 400 Bad Request.
The input field is scanned by the security pipeline when enabled.

Files

Passthrough proxy to OpenAI’s file management endpoints. Supports upload (multipart), list, retrieve, download, and delete. Anthropic models return 400 Bad Request. No security scanning is applied.

Response headers

The gateway adds these headers so clients can classify and correlate responses without parsing the body:

Error responses

Errors are returned as a JSON object with a top-level error key, in the caller’s SDK shape:
The stable classification lives in the x-to11-error-code header rather than the body text. See Error handling for the full error-code taxonomy, when an error body is rewritten into your SDK’s envelope, and retry guidance.