Skip to main content
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.
This page is a concise reference for every top-level key in config.json. Click the Guide links for full field-by-field documentation.

Top-Level Keys

KeyTypeDescriptionGuide
$schemastringSchema URL for IDE validation. Set to "https://www.getbifrost.ai/schema"
encryption_keystringAES-256 key (derived via Argon2id). Accepts env.VAR prefix. Also read from BIFROST_ENCRYPTION_KEY env varClient
clientobjectWorker pool, logging, CORS, auth enforcement, header filtering, MCP, compat shimsClient
providersobjectLLM provider API keys, network settings, concurrencyProviders
governanceobjectAdmin auth, virtual keys, budgets, rate limits, routing rules, customers, teamsGovernance
guardrails_configobjectContent moderation providers and CEL-based rules (enterprise only)Guardrails
config_storeobjectConfiguration database backend — SQLite, PostgreSQL, or disabled (file-only mode)Storage
logs_storeobjectRequest/response log database — SQLite, PostgreSQL + optional S3/GCS offloadStorage
vector_storeobjectVector database for semantic cache — Weaviate, Redis, Qdrant, Pinecone, ValkeyStorage
pluginsarrayOpt-in plugins: semantic_cache, otel, maxim, datadog, customPlugins
frameworkobjectModel pricing catalog URL and sync intervalFramework
mcpobjectMCP server and tool configuration
websocketobjectWebSocket / Realtime API connection pool tuningWebSocket
auth_configobjectDeprecated — use governance.auth_configClient

version

Controls how empty arrays in allow-list fields (models, allowed_models, key_ids, tools_to_execute) are interpreted:
ValueBehaviour
2 (default, v1.5.0+)Empty array = deny all; ["*"] = allow all
1 (v1.4.x compat)Empty array = allow all
Omitting version uses v2 semantics. Set "version": 1 only if you are migrating from v1.4.x and need the old behaviour temporarily.

client

Controls the worker pool, logging pipeline, security, and SDK shims. All fields are optional.
FieldTypeDefaultDescription
initial_pool_sizeinteger300Pre-allocated goroutines per provider queue
drop_excess_requestsbooleanfalseReturn HTTP 429 when queue is full
enable_loggingbooleantrue*Persist request/response logs (* auto-enabled when logs_store is set)
disable_content_loggingbooleanfalseStrip message content from logs
log_retention_daysinteger365Days to retain log entries
logging_headersarray[]HTTP headers to capture in log metadata
enforce_auth_on_inferencebooleanfalseRequire a virtual key on every /v1/* request
allow_direct_keysbooleanfalseAllow callers to pass provider API keys directly
allowed_originsarray["*"]CORS allowed origins
max_request_body_size_mbinteger100Maximum request body in MB
whitelisted_routesarray[]Routes that bypass auth middleware
allowed_headersarray[]Additional headers permitted for CORS/WebSocket
required_headersarray[]Headers that must be present on every request
header_filter_configobjectallowlist / denylist for x-bf-eh-* forwarded headers
prometheus_labelsarray[]Custom labels for all Prometheus metrics
compatobjectSDK compatibility shims (should_drop_params, convert_text_to_chat, etc.)
mcp_agent_depthinteger10Max tool-call recursion depth
mcp_tool_execution_timeoutinteger30Per-tool execution timeout in seconds
mcp_tool_sync_intervalinteger10Tool sync interval in minutes (0 = disabled)
mcp_disable_auto_tool_injectbooleanfalseDisable automatic MCP tool injection
async_job_result_ttlinteger3600TTL for async job results in seconds
disable_db_pings_in_healthbooleanfalseExclude DB connectivity from /health
routing_chain_max_depthinteger10Max routing rule chain evaluation depth
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, 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.
Sub-keyDescription
auth_configAdmin username/password auth for the dashboard
virtual_keysScoped API tokens with provider/model allowlists
budgetsSpend caps in USD over a rolling window
rate_limitsRequest and token rate limits
customersCustomer entities (attach budgets/rate limits)
teamsTeam entities (attach to customers, budgets, rate limits)
routing_rulesCEL-based dynamic provider/model routing
pricing_overridesScoped per-model pricing overrides
model_configsPer-model rate limit and budget configurations
Full documentation: Governance.

guardrails_config

Enterprise-only. Two sub-keys: guardrail_providers (array) and guardrail_rules (array). Full documentation: Guardrails.

config_store, logs_store, vector_store

Storage backends. Each has enabled (boolean), type (string), and config (object).
StoreTypes
config_store"sqlite", "postgres"
logs_store"sqlite", "postgres" (+ optional object_storage)
vector_store"weaviate", "redis", "qdrant", "pinecone" ("redis" also covers Valkey-compatible endpoints)
Full documentation: Storage.

framework

Controls model pricing catalog sync:
{
  "framework": {
    "pricing": {
      "pricing_url": "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json",
      "pricing_sync_interval": 86400
    }
  }
}
FieldDefaultDescription
pricing.pricing_urlLiteLLM catalogURL of a model pricing JSON file
pricing.pricing_sync_interval86400Sync interval in seconds (minimum: 3600)

websocket

Optional tuning for the WebSocket gateway (Responses API WebSocket mode, Realtime API). WebSocket is always enabled.
{
  "websocket": {
    "max_connections_per_user": 100,
    "transcript_buffer_size": 100,
    "pool": {
      "max_idle_per_key": 50,
      "max_total_connections": 1000,
      "idle_timeout_seconds": 600,
      "max_connection_lifetime_seconds": 7200
    }
  }
}
FieldDefaultDescription
max_connections_per_user100Max concurrent WebSocket connections per user
transcript_buffer_size100Transcript entries buffered for Realtime API mid-session fallback
pool.max_idle_per_key50Max idle upstream connections per provider/key
pool.max_total_connections1000Max total idle upstream connections
pool.idle_timeout_seconds600Evict idle connections after this many seconds
pool.max_connection_lifetime_seconds7200Max lifetime of any upstream connection

Minimal Valid Config

{
  "$schema": "https://www.getbifrost.ai/schema",
  "encryption_key": "env.BIFROST_ENCRYPTION_KEY",
  "providers": {
    "openai": {
      "keys": [
        { "name": "primary", "value": "env.OPENAI_API_KEY", "models": ["*"], "weight": 1.0 }
      ]
    }
  },
  "config_store": { "enabled": false }
}