The live schema is published at
https://www.getbifrost.ai/schema. Add "$schema": "https://www.getbifrost.ai/schema" to your config.json for IDE autocomplete and inline validation, or point it to a mirrored HTTP(S) URL, file:// URL, or filesystem path in isolated deployments. You can also set the BIFROST_SCHEMA_URL environment variable, which takes precedence over the $schema value. When mirroring, snapshot a schema published by a Bifrost release that supports custom $schema values; older schema copies pin $schema to the public URL and will flag a mirrored location as invalid in IDEs.config.json. Click the Guide links for full field-by-field documentation.
Top-Level Keys
version
Controls how empty arrays in allow-list fields (models, allowed_models, key_ids, tools_to_execute) are interpreted:
Omitting
version uses v2 semantics. Set "version": 1 only if you are migrating from v1.4.x and need the old behaviour temporarily.
source_of_truth
Controls how config.json is reconciled with the config store at startup.
Missing and empty sections behave differently when
source_of_truth is "config.json". A missing section leaves DB rows untouched; a present empty section is authoritative and can prune matching DB rows.
plugins section present and empty, so stored plugins are removed on startup. See Source of Truth & Reconciliation for section-by-section behavior.
client
Controls the worker pool, logging pipeline, security, and SDK shims. All fields are optional.
Full documentation: Client Configuration.
providers
Keyed by provider name. Each entry contains a keys array and optional network_config, concurrency_and_buffer_size, proxy_config.
Supported provider keys: openai, anthropic, azure, bedrock, vertex, gemini, mistral, groq, cohere, perplexity, xai, cerebras, deepseek, openrouter, nebius, fireworks, parasail, huggingface, replicate, ollama, vllm, sgl, elevenlabs, runway.
Full documentation: Provider Setup.
governance
Seeds governance resources at startup. All sub-keys are optional arrays.
Full documentation: Governance.
guardrails_config
Enterprise-only. Two sub-keys: guardrail_providers (array) and guardrail_rules (array).
Full documentation: Guardrails.
alerting
Enterprise-only. Supports channels (array), rules (array), history_retention_days, evaluation_interval_seconds, and webhook_network.
Full documentation: Alerting.
access_profiles
Enterprise-only. Defines access profile templates that can later be attached to roles/users.
cluster_config
Enterprise-only clustering settings for multi-node deployments.
Full documentation: Cluster.
config_store, logs_store, vector_store
Storage backends. Each has enabled (boolean), type (string), and config (object).
Full documentation: Storage.
framework
Controls model pricing catalog sync and background model discovery:
Background model discovery
Each provider’s model list is fetched at startup and whenever you add, edit, or delete a key.live_models_sync_interval additionally re-fetches it on a timer,
so a model a provider starts serving after the gateway booted becomes routable
without a restart.
Every node runs its own refresh, because the model list is cached in process
memory rather than in the database. Each pass costs two list models calls per
enabled key, per provider, so raise the interval if a provider meters that
endpoint. The interval is jittered by ±10% to keep replicas that booted together
from calling every upstream at the same instant.
Set it to 0 to turn the timer off entirely. Model discovery then happens only
at startup and on key edits, and you can trigger it on demand from the
Providers page.
mcp
Declares the catalog of MCP servers Bifrost connects to. Each entry in client_configs is one MCP server.
client_configs entry:
Auth-type-specific fields:
The schema enforces these pairings:
oauth_config is rejected on non-OAuth auth types, per_user_header_keys is rejected on any auth type other than per_user_headers, and token_exchange is rejected on any auth type other than token_exchange — a misplaced block fails $schema validation instead of being silently ignored.
Clients declared with auth_type in {oauth, per_user_oauth, per_user_headers, token_exchange} boot into a pending_verification state. The MCP Gateway UI surfaces an Authorize / Verify CTA on each pending row; one admin click runs the same verification flow the Web UI Create form uses, after which the client transitions to healthy. The same steps are scriptable via POST /api/mcp/client/{id}/initiate-verification (OAuth types), POST /api/mcp/client/{id}/verify-headers (per-user headers), or POST /api/mcp/client/{id}/verify-exchange (token exchange). Verified state is server-side and survives restarts and config re-syncs. Immutable fields (auth_type, connection_type, connection_string, stdio_config, oauth_config) cannot be changed after creation — file edits to them are ignored with a boot warning naming the fields, matching the update API; delete and re-declare the client to change them. See MCP Auth and Connections, States & Lifecycles.

