providers key. There is no separate list for custom endpoints.
openai and bedrock are recognized provider names, so they take that provider’s typed config. ollama isn’t a built-in name, so it’s treated as a generic OpenAI-compatible endpoint — the key becomes its dispatch prefix (ollama/llama3.2).
Built-in providers
Alibaba, Anthropic, Anthropic (AWS), AssemblyAI, Azure, Baseten, Amazon Bedrock, Black Forest Labs, ByteDance, Cerebras, Cohere, Deepgram, DeepInfra, DeepSeek, ElevenLabs, fal, Fireworks, Gladia, Google, Google Vertex, Groq, Hugging Face, Hume, Kling AI, LMNT, Luma, Mistral, Moonshot AI, OpenAI, OpenRouter, Perplexity, Prodia, Replicate, Together AI, TypeSafe AI, Vercel AI Gateway, Voyage, xAI. Each ships its own credential shape (apiKey, region, accessKeyId, …) and its envVars list, used for config fallback and CLI env auto-discovery. Bedrock also supports ambient AWS credentials. See Configuration for the full env var reference.
Built-in providers route only models in the catalog. Config also accepts an optional models allowlist of unprefixed catalog IDs to narrow that set. The list is enforced after alias canonicalization across HTTP routes and in-process model resolvers. See Restrict built-in models.
Built-in provider options
A built-in provider entry takes a config object, an empty object{} to use the defaults, or a pre-built instance. Most providers accept these options:
Each provider’s environment variables are listed below. The first one is its credential. The CLI builds a provider from these variables when they’re set; see Auto-discover from env.
Some providers accept more options. Each row is written as
<key>.<option> and is set under providers.<key>:
Custom
fetch functions aren’t accepted in config. Pass a pre-built instance instead.
TypeSafe AI evaluation
TypeSafe AI provides evaluation models forPOST /v1/evaluate and local frogbot.evaluate(), not chat or embedding models. Set TYPESAFE_AI_API_KEY in the server environment and configure providers: { 'typesafe-ai': {} } in a standalone gateway, or ai: { providers: { 'typesafe-ai': true } } in FrogBot. To use a different server-side secret, set apiKey instead:
/api/v1/evaluate mount. FrogBot accepts typesafe-ai/jev and typesafe-ai/jev-latest and sends both to TypeSafe as jev-latest. Bare jev is not a documented TypeSafe upstream model ID. An optional built-in models allowlist uses unprefixed IDs, for example models: ['jev-latest']; the alias is canonicalized before checking it.
As of September 23, 2026, TypeSafe lists Jev 1.13 at $0.042 per million input tokens, with no charge for output tokens. FrogBot’s USD cost uses these catalog rates as an estimate, not a provider invoice. The upstream jev-latest alias and its pricing can change; check TypeSafe’s model list for current rates.
Vercel AI Gateway
Thevercel provider sends requests to Vercel AI Gateway, which serves many model creators through one key. Set AI_GATEWAY_API_KEY in the server environment and configure providers: { vercel: {} } in a standalone gateway, or ai: { providers: { vercel: true } } in FrogBot. AI_GATEWAY_BASE_URL optionally overrides the endpoint. To use a different secret, set apiKey instead.
The key is required. A Vercel deployment’s OIDC token does not enable the provider, so a project on Vercel can send its traffic to another provider without AI Gateway turning on.
Model IDs have the form vercel/<creator>/<model>, for example vercel/anthropic/claude-sonnet-4.6 or vercel/openai/gpt-5.4-mini. FrogBot accepts the chat models that models.dev lists for Vercel with a price, and uses those prices for usage cost. Other IDs return model_not_found. Image, video, speech, transcription, embedding, and rerank models are not available through this provider. Narrow the list with models, which uses IDs without the vercel/ prefix:
reasoning_effort on a Claude model becomes a thinking budget, and cache_control markers become Anthropic cache control.
Pass AI Gateway routing options such as order, only, and models in a gateway field on /v1/chat/completions, /v1/messages or /v1/responses, or set providerOptions.gateway in a beforeUpstream hook. /v1/messages also accepts them as providerOptions.gateway in the body, as AI Gateway’s Anthropic API does. They reach AI Gateway unchanged:
http-referer: https://www.frogbot.ai and x-title: FrogBot. To use your own values, set them in headers:
Bedrock prompt caching
Bedrock Claude models translate Anthropic-stylecache_control markers from /v1/chat/completions and /v1/messages into Bedrock cachePoint blocks. Markers are supported on system blocks, messages, and message content parts, including tool results. A request-level marker applies to the last message, caching the conversation prefix through that point.
The 5m and 1h TTL values pass through to Bedrock. Other TTL values are omitted without rejecting the request. This translation does not apply to Nova models, tool definitions, or /v1/responses.
OpenAI prompt caching
OpenAI models translate Anthropic-stylecache_control markers from /v1/chat/completions and /v1/messages into explicit OpenAI prompt cache breakpoints. Markers are supported on messages and message content parts. A request-level marker applies to the last message.
OpenAI retention accepts only in_memory and 24h. Marker TTL values are omitted because OpenAI breakpoints have no TTL equivalent. TTL does not infer retention. This translation does not apply to Azure, custom OpenAI-compatible providers, tool definitions, or /v1/responses.
OpenRouter
OpenRouter gives one API key access to models from many vendors. SetOPENROUTER_API_KEY in the server environment and configure providers: { openrouter: {} } in a standalone gateway, or ai: { providers: { openrouter: true } } in FrogBot. OPENROUTER_BASE_URL optionally overrides the API URL.
Model IDs keep OpenRouter’s own <creator>/<model> form after the openrouter/ prefix, including variants such as :free, for example openrouter/anthropic/claude-sonnet-4.6 or openrouter/google/gemma-4-31b-it:free. FrogBot accepts the priced models that models.dev lists for OpenRouter. Dynamic routers without a fixed price, such as openrouter/auto, and models not yet in the catalog return a model-not-found error before any upstream call. Narrow the set with an allowlist, for example models: ['anthropic/claude-sonnet-4.6']; the allowlist applies only to config objects, not to a pre-built instance. Usage cost is estimated from those catalog prices, not read from OpenRouter’s invoice.
Requests identify FrogBot to OpenRouter with the X-OpenRouter-Title: FrogBot and HTTP-Referer: https://www.frogbot.ai headers. Override them with appName and appUrl:
reasoning option: reasoning_effort on /v1/chat/completions, thinking on /v1/messages, and reasoning.effort on /v1/responses. Disabled thinking is sent as effort none. Anthropic-style cache_control markers on messages and content parts reach OpenRouter unchanged.
On every route, OpenRouter’s own request fields pass through unchanged, for example provider: { order: ['anthropic'], allow_fallbacks: false }, models fallbacks, plugins, or, on /v1/chat/completions, a native reasoning object, which takes priority over reasoning_effort.
OpenRouter embeddings are not supported; /v1/embeddings with an openrouter/... model returns an error.
Prefer the built-in
openrouter provider over a custom OpenAI-compatible entry pointing at https://openrouter.ai/api/v1. The generic entry drops per-part cache_control, cache-write token counts, OpenRouter’s reasoning format, routing options, and PDFs supplied by URL.Custom OpenAI-compatible endpoints
Any key that isn’t a built-in provider name is a generic OpenAI-compatible endpoint.baseURL is required — it’s what tells the gateway a key is a deliberate custom endpoint rather than a typo of a built-in name.
A key without
baseURL fails validation at startup: providers.ollama.baseURL must be a non-empty string. This is the safety net for a mistyped built-in name (openia instead of openai) — it fails loudly instead of silently becoming an unreachable custom provider.
The key itself can’t contain
/. Custom entries don’t accept models.
Custom OpenAI-compatible providers keep their existing routing behavior and are not interpreted as built-in allowlists. In FrogBot’s ai.providers surface, custom entries use baseUrl and a required list of model definitions instead; see Custom provider options. FrogBot router model strings also remain unchanged.
Pre-built instances
Any provider key — built-in or custom — also accepts a pre-built AI SDK provider instance instead of a config object. Use this for a customfetch, middleware, or anything the shorthand config can’t express.
languageModel present) — the specific instance type isn’t known ahead of time.
Model IDs
Every route dispatches on a canonical<provider>/<model> ID. Built-in model IDs must exist in the configured catalog. Bedrock, Anthropic-on-Bedrock, and Azure additionally resolve friendly aliases to the exact ID the upstream API requires — for example bedrock/claude-4-sonnet resolves to anthropic.claude-sonnet-4-20250514-v1:0 before catalog validation and the AI SDK sees it.