OpenAI-Compatible API
Realtime translation sessions
Speech translation models (OpenAIgpt-realtime-translate) run on their own
session surface, so the gateway mirrors it. Connect to /v1/realtime/translations
— or /v1/realtime?intent=translation, which is the same session — and set the
target language after the socket opens:
session.input_audio_buffer.append
in, session.output_audio.delta and session.output_transcript.delta out) and
accept 24 kHz PCM16 audio. Frames relay verbatim, so any client written against
the provider’s translation API works unchanged.
Translation is an OpenAI surface today. Routing a translation session to a
provider that does not serve one fails with a 400 rather than quietly opening an
ordinary conversation session in its place.
These sessions report no usage events, so the gateway prices them from the input
audio it relays, at the model’s per-second input rate. WebRTC translation calls
are the exception: their media never transits the gateway, so they are not
metered.
Realtime transcription sessions
Transcription sessions (/v1/realtime?intent=transcription) pick their model in
session.update rather than in the URL; the model query parameter routes the
request and the gateway pins the in-session selection to it.
Most transcription models report usage in their
conversation.item.input_audio_transcription.completed event — tokens, or
seconds for whisper-style models — and that report prices the session. A model
that omits usage there reports nothing, so the gateway falls back to the input
audio it relayed, at the per-second input rate. The fallback applies only when a
session reported no usage of its own, so a session is never billed twice. As with
translation, WebRTC calls carry their media outside the gateway and are not
metered.
Anthropic-Compatible API
Gateway Extensions
Key verification
GET /v1/auth/verify lets a service in front of the gateway check an API key
without holding a copy of the key list. It is disabled by default; enable it
with AUTH_VERIFY_ENABLED=true (server.auth_verify_enabled). It is not an
/admin route, so it keeps working when the admin API is disabled.
401, so a 200 means the key authenticates. method
says which mechanism accepted it: api_key is a managed key stored in the
database, master_key the bootstrap key from GOMODEL_MASTER_KEY. key_id
and user_path are present only for managed keys bound to them.
Where the gateway admits unauthenticated callers — no authentication
configured at all, or a route an extension excluded from it — there is no key
to confirm, and the endpoint answers
200 with
{"valid": false, "method": "none"} rather than claiming the key is valid.
A status-code consumer such as Caddy’s forward_auth treats that as allowed,
matching what the gateway itself does with those requests.Provider Passthrough
MCP Gateway
Streamable-HTTP MCP (Model Context Protocol) endpoints aggregating the configured upstream MCP servers (whenMCP_ENABLED, default on). See
MCP Gateway.
Admin Endpoints
Admin REST and dashboard routes (/admin/*) are covered in
Admin Endpoints.