Overview
The passthrough API proxies provider-native requests through GoModel without translating the request or response body. Use it when a client library expects a provider’s native API instead of the OpenAI-compatible API. For example, the Anthropic SDK sends requests to/v1/messages, so you can point it at GoModel’s Anthropic passthrough base URL:
v1 segment and forwards the request upstream
as Anthropic’s native:
How it works
Passthrough routes use this shape:ALLOW_PASSTHROUGH_V1_ALIAS=true, which is the default:
GOMODEL_MASTER_KEY or
managed auth keys are enabled, the client must send a GoModel bearer token:
Authorization and X-Api-Key headers before forwarding
the request, then applies the upstream provider credential configured on the
server. For Anthropic, GoModel uses its configured ANTHROPIC_API_KEY.
Because passthrough is provider-native, the response is also provider-native.
For Anthropic messages, the response uses Anthropic’s message schema, not an
OpenAI chat completion schema.
When usage tracking is enabled, successful passthrough inference responses
are recorded: token counts are read from SSE usage events on streaming
responses and from the usage member of JSON responses, so costs and budgets
account for passthrough traffic like any other route.
Anthropic SDK example
Set the Anthropic SDK base URL to GoModel’s Anthropic passthrough route. Use the GoModel token as Anthropic SDK bearer auth.not-needed instead of auth_token or authToken. GoModel strips X-Api-Key
from passthrough requests before forwarding them upstream.
Current limitations
Passthrough is intentionally narrow while the API is in beta.openai,anthropic,openrouter,kilo,zai,sglang,vllm,llamacpp,llmd,deepseek,edenai, andjevare enabled by default.- Chutes supports passthrough but requires explicit operator opt-in because
passthrough can forward provider-native routes that do not identify a model.
Add
chutestoENABLED_PASSTHROUGH_PROVIDERSonly when you intend to expose that surface. - GoModel does not translate passthrough request bodies or response bodies.
- The
modela JSON passthrough body names is checked against the caller’s model allowlist regardless of body size, up to the configured body limit; a larger body is refused with the limit’s own error. A body that repeats the top-levelmodelfield is rejected, since the upstream would decide which one wins. - Provider-native error bodies and status codes are proxied instead of converted into OpenAI-compatible responses.
- Features that depend on OpenAI-compatible request or response shapes may not
apply to passthrough traffic in the same way as
/v1traffic.
Related environment variables
Passthrough routes are enabled by default:ENABLED_PASSTHROUGH_PROVIDERS to the provider types you want to expose.