Skip to main content
All providers are configured under providers in config.json. Each provider entry contains a keys array where every key has a name, value, models, and weight, plus optional provider-specific config objects. Supplying credentials: Use the env. prefix to reference environment variables — never put API keys directly in config.json:
{
  "providers": {
    "openai": {
      "keys": [
        {
          "name": "primary",
          "value": "env.OPENAI_API_KEY",
          "models": ["*"],
          "weight": 1.0
        }
      ]
    }
  }
}

Common Provider Fields

Every key object supports these fields:
FieldTypeDescription
namestringUnique name for this key (used in logs and virtual key pin)
valuestringAPI key value or env.VAR_NAME reference
modelsarrayModels this key serves. ["*"] = all models
weightfloatLoad balancing weight. Higher = more traffic
aliasesobjectMap logical name → actual model name for this key
use_for_batch_apibooleanMark key as eligible for batch API calls
Per-provider network_config options (applies to all standard providers):
FieldTypeDescription
default_request_timeout_in_secondsintegerPer-request timeout
max_retriesintegerRetry attempts on transient errors
retry_backoff_initialintegerInitial backoff in milliseconds
retry_backoff_maxintegerMaximum backoff in milliseconds
max_conns_per_hostintegerMax TCP connections to the provider endpoint (default: 5000)
extra_headersobjectStatic headers added to every provider request
stream_idle_timeout_in_secondsintegerIdle timeout per stream chunk (default: 60)
insecure_skip_verifybooleanDisable TLS verification (last resort only)
ca_cert_pemstringPEM-encoded CA for self-signed or private CA endpoints
Concurrency and buffering per provider:
FieldTypeDescription
concurrency_and_buffer_size.concurrencyintegerMax concurrent requests to this provider
concurrency_and_buffer_size.buffer_sizeintegerRequest queue depth

OpenAI

Supports multiple keys with weighted load balancing. Mark one key with use_for_batch_api: true to designate it for the Batch API.
{
  "providers": {
    "openai": {
      "keys": [
        {
          "name": "openai-primary",
          "value": "env.OPENAI_KEY_1",
          "models": ["*"],
          "weight": 2.0
        },
        {
          "name": "openai-secondary",
          "value": "env.OPENAI_KEY_2",
          "models": ["gpt-4o-mini"],
          "weight": 1.0
        },
        {
          "name": "openai-batch",
          "value": "env.OPENAI_KEY_BATCH",
          "models": ["*"],
          "weight": 1.0,
          "use_for_batch_api": true
        }
      ],
      "network_config": {
        "default_request_timeout_in_seconds": 120,
        "max_retries": 3,
        "retry_backoff_initial": 500,
        "retry_backoff_max": 5000
      }
    }
  }
}

Proxy Configuration

Route provider traffic through an HTTP or SOCKS5 proxy:
{
  "providers": {
    "openai": {
      "keys": [
        { "name": "primary", "value": "env.OPENAI_API_KEY", "models": ["*"], "weight": 1.0 }
      ],
      "proxy_config": {
        "type": "http",
        "url": "http://proxy.corp.example.com:3128",
        "username": "env.PROXY_USER",
        "password": "env.PROXY_PASS"
      }
    }
  }
}
FieldTypeOptions
proxy_config.typestring"none", "http", "socks5", "environment"
proxy_config.urlstringProxy server URL
proxy_config.usernamestringProxy auth username
proxy_config.passwordstringProxy auth password (env. supported)
proxy_config.ca_cert_pemstringPEM CA for TLS-intercepting proxies
Use "type": "environment" to pick up HTTP_PROXY / HTTPS_PROXY env vars automatically.

Multi-Provider Example

{
  "$schema": "https://www.getbifrost.ai/schema",
  "providers": {
    "openai": {
      "keys": [
        { "name": "openai-primary", "value": "env.OPENAI_API_KEY", "models": ["*"], "weight": 2.0 }
      ]
    },
    "anthropic": {
      "keys": [
        { "name": "anthropic-primary", "value": "env.ANTHROPIC_API_KEY", "models": ["*"], "weight": 1.0 }
      ]
    },
    "groq": {
      "keys": [
        { "name": "groq-primary", "value": "env.GROQ_API_KEY", "models": ["*"], "weight": 1.0 }
      ]
    }
  }
}
With three providers and the weights above, traffic is distributed: 50% OpenAI, 25% Anthropic, 25% Groq. If any provider returns an error, Bifrost automatically retries on the next key or provider.