Configuring providers without env vars
Every credential below (OPENAI_API_KEY, ANTHROPIC_API_KEY, …) can
instead be set from the Providers page in the admin dashboard
(/admin/dashboard) — no restart required. This is the easiest way to run
GoModel with zero provider env vars: start the gateway with none configured
(the catalog starts empty; the gateway still boots and serves the dashboard),
then add providers from the UI. A provider added this way registers into the
running gateway immediately.
Providers declared via env vars or config.yaml always take precedence: a
name configured either way is read-only in the dashboard (shown with a
“Config” badge), the same rule GoModel already applies to MCP servers,
virtual models, and rate limits. API keys and service-account secrets are
masked (***) once saved — editing a provider re-sends *** for anything you
didn’t change, and the gateway keeps the stored value. Disabling a provider
(rather than deleting it) unregisters it from routing but keeps its
configuration on file. The same multi-key rotation env vars support
(api_keys, an ordered list) is available from the dashboard form.
Supported providers
Example model identifiers are illustrative and subject to change; consult provider catalogs for current models. Feature columns reflect gateway API support, not every individual model capability exposed by an upstream provider.
✅ Supported ❌ Unsupported
Provider notes
- llm-d — point
LLMD_BASE_URLat the Router/EPP service and declareLLMD_MODELSwhen the route does not serve/v1/models. The dedicated provider injects trusted inference-objective and user-path fairness headers. - Z.ai GLM Coding Plan — set
ZAI_BASE_URL=https://api.z.ai/api/coding/paas/v4. - MiniMax regions and current text models — the default global endpoint is
https://api.minimax.io/v1; accounts on the China platform should setMINIMAX_BASE_URL=https://api.minimaxi.com/v1. The current text model IDs areMiniMax-M3(1,000,000-token context; text, image, and video input) andMiniMax-M2.7(204,800-token context; text input). Per-million-token USD pricing is 2.40 output, and 0.30 input, 0.06 cached input, and $0.375 cache writes for M2.7. M3 supports adaptive or disabled thinking; M2.7 always thinks. - Amazon Bedrock Mantle — GPT-5.6 Sol, Terra, and Luna accept only the
Responses API on Mantle. GoModel sends
/v1/responsesrequests directly to AWS and selects the required/openai/v1/responsesupstream path. - Fireworks AI — model IDs are account-scoped paths such as
accounts/fireworks/models/gpt-oss-120b; use them verbatim in requests and inFIREWORKS_MODELS. - ElevenLabs — a voice-only provider:
/v1/audio/speech(text-to-speech) and/v1/audio/transcriptions(speech-to-text) are supported, but chat,/v1/responses, and embeddings are not (the ❌s above reflect that, not a gateway limitation). The OpenAIvoicefield must be an ElevenLabs voice_id. See the ElevenLabs guide for supported audio formats and speech-to-text models. - Chutes AI — defaults to
https://llm.chutes.ai/v1and discovers its current model IDs, context limits, capabilities, and pricing from the live catalog. GoModel translates/v1/responsesrequests to chat completions; Chutes’ shared LLM endpoint does not expose embeddings. Passthrough support requires explicit operator opt-in by addingchutestoENABLED_PASSTHROUGH_PROVIDERS. - Meta (Muse Spark) — the Meta Model API is OpenAI-compatible; set
META_API_KEYand route tomuse-spark-1.1. Muse Spark models are not in the upstream model catalog yet, so declarecontext_windowandpricingunderproviders.meta.modelsmetadata inconfig.yamlif you want cost tracking and context-window reporting. - Kilo AI — model IDs use
provider/model(for example,anthropic/claude-sonnet-4.5) and are forwarded unchanged. GoModel serves/v1/responsesby translating it to Kilo’s chat-completions endpoint. If another configured provider exposes the same raw model ID, select Kilo explicitly withkilo/anthropic/claude-sonnet-4.5; GoModel removes only the outerkilo/routing qualifier before forwarding. - Xiaomi MiMo — TTS (
mimo-v2.5-tts*) and ASR (mimo-v2.5-asr) are served through/v1/audio/speechand/v1/audio/transcriptions(translated to MiMo’s chat-completions audio dialect) as well as directly via chat completions; for 1M context append[1m]to the model ID and list it inXIAOMI_MODELS. - OpenCode Go (OpenCode Zen) — routes per model: most models use
OpenAI-style
/chat/completions, while/messages-only models (defaultqwen3.7-max, override withOPENCODE_GO_MESSAGES_MODELS) are sent to the Anthropic-native endpoint. SetOPENCODE_GO_API_KEY; the base URL defaults tohttps://opencode.ai/zen/go/v1. - ChatGPT subscription — serves
/v1/responsesonly, billed against the ChatGPT plan’s quota rather than API credit. The upstream accepts a strict parameter allowlist and streams only; GoModel adapts requests and collapses the stream for non-streaming callers. SetCHATGPT_API_KEYto the access token fromcodex login. Reported cost is not real spend: these model IDs also exist on the OpenAI Platform, so the registry attaches their per-token prices to flat-rate subscription traffic — keep budgets andcostload balancing off it. - Kimi Code — no per-token pricing; quota refreshes weekly and is also
constrained by a rolling 5-hour window. Usage-cost tracking reports zero for
Kimi Code, so
costload-balancing cannot price it; prefer conservative retry strategies. - Hetzner (experimental) — Hetzner declares the inference API experimental:
expect breaking changes and no SLA. The model catalogue and rate-limit windows
change while the experiment runs; query the live
/v1/modelsendpoint and the official docs instead of relying on snapshots. The example model ID in the table above (Qwen/Qwen3.6-35B-A3B-FP8) is the entry from the official Hetzner docs as of 2026-08-17 and may differ at read time. Free while experimental, so usage-cost tracking reports zero andcostload-balancing cannot price it. No embeddings endpoint; chat,/v1/responses(via chat), model listing, and passthrough only. Passthrough is a generic forwarder — the ✅ marks adapter capability; Hetzner’s tolerance for arbitrary upstream paths is unverified while the API is experimental.hetzneris included in the defaultENABLED_PASSTHROUGH_PROVIDERSallowlist so/p/hetzner/...routes work without operator opt-in; remove it from the list to gate them. - Configured model lists — available for every provider with
<PROVIDER>_MODELS, for exampleOPENROUTER_MODELS=openai/gpt-oss-120b,anthropic/claude-sonnet-4orORACLE_MODELS=openai.gpt-oss-120b,xai.grok-3. DeepSeek defaults tohttps://api.deepseek.com; setDEEPSEEK_BASE_URLonly when using a compatible proxy or alternate DeepSeek endpoint. By default,CONFIGURED_PROVIDER_MODELS_MODE=fallbackuses those lists only when upstream/modelsis unavailable or empty. SetCONFIGURED_PROVIDER_MODELS_MODE=allowlistto expose only configured models for providers that define a list, skipping their upstream/modelscalls. - Model categories (chat vs embeddings vs audio) — a model’s category comes
from its
modes, resolved from four sources in precedence order: the remote model registry, operator metadata declared underproviders.<name>.modelsinconfig.yaml(e.g.modes: [embedding]), capability signals in the provider’s own model listing (GeminisupportedGenerationMethods, Cohereendpoints, OpenRouter architecture modalities, Ollama/api/showcapabilities), and finally a conservative name check for models still unclassified: IDs containingembedor matching well-known embedding families (bge,e5,gte,minilm) are categorized as embedding models, and IDs containingrerankas reranking models — namespaced IDs likeorg/modelare checked by their final path segment. Declare operator metadata only when a model stays unclassified after all of this. Categories affect dashboard grouping and failover suggestions only;/v1/embeddingsroutes to any model the provider serves regardless of category. - vLLM — set
VLLM_API_KEYonly if the upstream server was started with--api-key. - llama.cpp / LM Studio —
LLAMACPP_BASE_URLis required (llama-server’s default port collides with GoModel’s own 8080, so there is no default);LLAMACPP_API_KEYis optional. Do not register these servers asollama, which speaks Ollama’s native API. See llama.cpp. - llm-d —
LLMD_BASE_URLis required.LLMD_API_KEYis optional and is sent only when the Gateway in front of the Router requires bearer auth. - SGLang — set
SGLANG_API_KEYonly if the upstream server was started with--api-key; otherwiseSGLANG_BASE_URLis enough. - Multiple API keys for one provider — set
OPENAI_API_KEY_2,OPENAI_API_KEY_3, and so on to spread sessions across keys while keeping each conversation on one key for prompt-cache affinity. See API key rotation. - Multiple instances of one provider type — without
config.yaml, use suffixed env vars such asOPENAI_EAST_API_KEYandOPENAI_EAST_BASE_URL; addOPENAI_EAST_MODELSto configure that instance’s model list. This registers provideropenai-eastwith typeopenai. Vertex AI follows the same suffix pattern —VERTEX_US_PROJECTregisters providervertex-us. Vertex project and location env vars must match the instance prefix: for a suffixed instance such asVERTEX_US_PROJECT, also setVERTEX_US_LOCATIONand any other suffixed settings for that instance, rather than the genericVERTEX_PROJECT/VERTEX_LOCATION.VERTEX_AUTH_TYPEdefaults to Application Default Credentials (gcp_adc).
Why some providers have dedicated pages
These are the providers most users hit friction on:- Google Vertex AI — needs a GCP project, region, and either Application Default Credentials or a service-account JSON key.
- Amazon Bedrock — no API key of its own; uses the AWS credential chain and requires explicit model access in the Bedrock console.
- Azure OpenAI — deployment-scoped base URLs, the
api-versionquery parameter, and theapi-keyheader instead ofAuthorization: Bearer. - Oracle GenAI — requires an OCI IAM policy for
generativeaiapikeyand a region-specific OpenAI-compatible endpoint URL. - Google Gemini (AI Studio) — two routing modes (native
generateContentvs OpenAI-compatible) with different image-input behavior. - Anthropic — reasoning effort maps to Claude’s adaptive thinking and effort control, which differ across model generations.
- DeepSeek — reasoning effort mapping quirks for DeepSeek V4.
- Ollama / SGLang / vLLM — local-model hosting with optional multi-instance setup through suffixed env vars and provider-qualified model IDs.
- Xiaomi MiMo — thinking mode on by default, a
[1m]context suffix, and TTS/ASR that run through chat completions rather than native audio endpoints. - OpenCode Go — OpenCode Zen splits models across OpenAI-style
/chat/completionsand Anthropic-native/messages; GoModel routes per model (the/messages-only set is maintained manually, defaultqwen3.7-max). - ChatGPT subscription — a Responses-only upstream with a strict parameter allowlist, used to put GoModel between Codex and a ChatGPT plan.
Provider status
The admin dashboard (/admin/dashboard) shows live status for every
configured provider in the Providers Overview section of the
Overview page.

Expand a card (the arrow strip at the bottom, or the section-wide
Show Details switch) to see request health details:
- Recent Requests — requests and errors through the gateway in the last 10 minutes.
- Breaker State — the provider’s live circuit-breaker state (see Resilience).
- Models (Recent Traffic) — per-model request/error counts. A model with at least 3 errors making up half or more of its windowed requests is flagged in red — this catches a single broken model on an otherwise healthy provider, which model discovery alone cannot see. Hover a row for the model’s latest error message.
GET /admin/providers/status for
scripting and external monitoring.