overview.mdx
July 21, 2026 · View on GitHub
GoModel routes OpenAI-compatible requests to many AI providers through one gateway. For most providers, setting the API key is the whole setup. The pages in this section exist for the ones whose setup is not purely "set an API key" — auth flows from cloud credentials, deployment-based URLs, region or project requirements, dual native + OpenAI-compatible API surfaces, or other quirks.
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.
| Provider | Credential | Example Model | Chat | /responses | Embed | Files | Batches | Passthru | Guide |
|---|---|---|---|---|---|---|---|---|---|
| OpenAI | OPENAI_API_KEY | gpt-5.5 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Anthropic | ANTHROPIC_API_KEY | claude-sonnet-4-20250514 | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | Anthropic |
| Google Gemini | GEMINI_API_KEY | gemini-2.5-flash | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | Google Gemini |
| Google Vertex AI | VERTEX_PROJECT + VERTEX_LOCATION + GCP credentials | google/gemini-2.5-flash | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | Google Vertex AI |
| DeepSeek | DEEPSEEK_API_KEY | deepseek-v4-pro | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | DeepSeek |
| Groq | GROQ_API_KEY | llama-3.3-70b-versatile | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | — |
| Fireworks AI | FIREWORKS_API_KEY (FIREWORKS_BASE_URL optional) | accounts/fireworks/models/gpt-oss-120b | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | — |
| Meta (Muse Spark) | META_API_KEY (META_BASE_URL optional) | muse-spark-1.1 | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | — |
| OpenRouter | OPENROUTER_API_KEY | google/gemini-2.5-flash | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Kilo AI | KILO_API_KEY (KILO_BASE_URL optional) | anthropic/claude-sonnet-4.5 | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | — |
| Z.ai | ZAI_API_KEY (ZAI_BASE_URL optional) | glm-5.1 | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | — |
| xAI (Grok) | XAI_API_KEY | grok-4.5 | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | xAI (Grok) |
| Alibaba Cloud Model Studio (Bailian) | BAILIAN_API_KEY (BAILIAN_BASE_URL optional) | qwen3-max | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Alibaba Cloud Model Studio |
| MiniMax | MINIMAX_API_KEY (MINIMAX_BASE_URL optional) | MiniMax-M3 | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | — |
| Xiaomi MiMo | XIAOMI_API_KEY (XIAOMI_BASE_URL optional) | mimo-v2.5-pro | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | Xiaomi MiMo |
| OpenCode Go | OPENCODE_GO_API_KEY (OPENCODE_GO_BASE_URL optional) | glm-5.1 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | OpenCode Go |
| Kimi Code | KIMICODE_API_KEY | kimi-for-coding | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | Kimi Code |
| Azure OpenAI | AZURE_API_KEY + AZURE_BASE_URL (AZURE_API_VERSION optional) | gpt-5 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Azure OpenAI |
| Oracle GenAI | ORACLE_API_KEY + ORACLE_BASE_URL | openai.gpt-oss-120b | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | Oracle GenAI |
| Ollama | OLLAMA_BASE_URL | llama3.2 | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | Ollama |
| vLLM | VLLM_BASE_URL (VLLM_API_KEY optional) | meta-llama/Llama-3.1-8B-Instruct | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | vLLM |
| Amazon Bedrock | BEDROCK_BASE_URL (region or endpoint) + AWS credentials | anthropic.claude-3-5-haiku-20241022-v1:0 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | Amazon Bedrock |
| Amazon Bedrock Mantle | BEDROCK_MANTLE_API_KEY or AWS credentials | openai.gpt-5.6-sol | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | Bedrock Mantle |
✅ Supported ❌ Unsupported
Provider notes
- 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 $0.60 input, $2.40 output, and $0.12 cached input for M3, and $0.30 input, $1.20 output, $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. - 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. - 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. - 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. - vLLM — set
VLLM_API_KEYonly if the upstream server was started with--api-key. - Multiple API keys for one provider — set
OPENAI_API_KEY_2,OPENAI_API_KEY_3, and so on to spread requests across keys round robin and lift per-key rate limits. This costs you provider prompt caching; 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 / 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).
Providers without a dedicated page (OpenAI, Groq, Fireworks AI, Meta, OpenRouter, Kilo AI, Z.ai, xAI, MiniMax) follow the same pattern: set the API key (and optional base URL where supported), start GoModel, route by model ID. The full env-var reference lives in Configuration.
Provider status
The admin dashboard (/admin/dashboard) shows live status for every
configured provider in the Providers Overview section of the
Overview page.
<img src="/providers/provider-status.png" alt="GoModel dashboard Providers Overview with a Degraded openai card showing a failing model and a Healthy vllm card" style={{ width: "100%", maxWidth: "1280px", height: "auto" }} className="rounded-lg" />
Each card's status pill combines two signals — model discovery (can the provider's model inventory be fetched?) and request health (are real requests through the gateway succeeding?). Real-traffic signals only ever worsen a status, never mask a discovery failure. Hover over the pill for the classification reason and the most recent error.
| Pill | Meaning |
|---|---|
Healthy | Model discovery succeeded and recent traffic (if any) looks fine |
Starting | Configured and awaiting first model discovery |
Configured | Configured but no models exposed yet |
Degraded | The latest refresh failed (previous inventory still serves), or a specific model's recent requests keep failing |
Recovering | The circuit breaker is half-open and probing whether the provider recovered |
Circuit Open | The circuit breaker is open; traffic to the provider is paused |
Unhealthy | Model discovery failed and no models are available |
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.
Request-health tracking is passive: it observes traffic your clients already send (the gateway's own background probes — model discovery and availability checks — are excluded), so an idle provider simply shows no recent requests. Counters are in-memory per gateway instance and reset on restart.
The same data is available as JSON from GET /admin/providers/status for
scripting and external monitoring.