Bifrost provides request options that control behavior, enable features, and pass metadata. In the gateway, these are set via HTTP headers (prefixed withDocumentation Index
Fetch the complete documentation index at: https://docs.getbifrost.ai/llms.txt
Use this file to discover all available pages before exploring further.
x-bf-). In the Go SDK, they are set via context keys. This document covers both approaches.
Complete Reference
| Context Key | Header | Type | Description |
|---|---|---|---|
BifrostContextKeyVirtualKey | x-bf-vk | string | Virtual key identifier for governance |
BifrostContextKeyAPIKeyName | x-bf-api-key | string | Explicit API key name selection |
BifrostContextKeyAPIKeyID | x-bf-api-key-id | string | Explicit API key ID selection (takes priority over name) |
BifrostContextKeySessionID | x-bf-session-id | string | Session ID for key stickiness (requires KV store) |
BifrostContextKeySessionTTL | x-bf-session-ttl | time.Duration | Session-to-key cache TTL (duration string or seconds) |
BifrostContextKeyRequestID | x-request-id | string | Custom request ID for tracking |
BifrostContextKeySendBackRawRequest | x-bf-send-back-raw-request | bool | Include raw provider request in the response |
BifrostContextKeySendBackRawResponse | x-bf-send-back-raw-response | bool | Include raw provider response in the response |
BifrostContextKeyStoreRawRequestResponse | x-bf-store-raw-request-response | bool | Persist raw request/response in log records |
BifrostContextKeyDisableContentLogging | x-bf-disable-content-logging | bool | Per-request override for content logging; only honored when allow_per_request_content_storage_override is enabled in logging config |
BifrostContextKeyPassthroughExtraParams | x-bf-passthrough-extra-params | bool | Enable passthrough for extra parameters |
BifrostContextKeyExtraHeaders | x-bf-eh-* | map[string][]string | Custom headers forwarded to provider |
BifrostContextKeyDirectKey | - | schemas.Key | Direct key credentials (Go SDK only) |
BifrostContextKeySkipKeySelection | - | bool | Skip key selection process (Go SDK only) |
BifrostContextKeyURLPath | - | string | Custom URL path appended to provider base URL (Go SDK only) |
BifrostContextKeyUseRawRequestBody | - | bool | Use raw request body (Go SDK only, requires RawRequestBody field) |
semanticcache.CacheKey | x-bf-cache-key | string | Custom cache key |
semanticcache.CacheTTLKey | x-bf-cache-ttl | time.Duration | Cache TTL (duration string or seconds) |
semanticcache.CacheThresholdKey | x-bf-cache-threshold | float64 | Similarity threshold (0.0-1.0) |
semanticcache.CacheTypeKey | x-bf-cache-type | string | Cache type |
semanticcache.CacheNoStoreKey | x-bf-cache-no-store | bool | Prevent caching |
mcp-include-clients | x-bf-mcp-include-clients | []string | Filter MCP clients (comma-separated). |
mcp-include-tools | x-bf-mcp-include-tools | []string | Filter MCP tools (clientName-toolName format, comma-separated) |
BifrostContextKeyMCPExtraHeaders | (any header in a client’s allowed_extra_headers) | map[string][]string | Headers forwarded to MCP servers at tool execution time, filtered per-client against allowed_extra_headers |
maxim.TraceIDKey | x-bf-maxim-trace-id | string | Maxim trace ID |
maxim.GenerationIDKey | x-bf-maxim-generation-id | string | Maxim generation ID |
maxim.TagsKey | x-bf-maxim-* | map[string]string | Maxim tags (custom tag names) |
BifrostContextKeyDimensions | x-bf-dim-* | map[string]string | Unified per-request dimensions forwarded to logs, spans, Prometheus custom labels, and Maxim tags |
BifrostContextKey(labelName) | x-bf-prom-* | string | Deprecated Prometheus-only label headers for backward compatibility |
Request Configuration Options
These options configure how Bifrost processes and forwards requests.Virtual Key
Context Key:BifrostContextKeyVirtualKeyHeader:
x-bf-vkType:
stringRequired: Yes (when governance is enabled and enforced) Specify the virtual key identifier for governance, routing, and access control.
- Gateway (cURL)
- Go SDK
Virtual keys can also be passed via
Authorization: Bearer vk-*, x-api-key: vk-*, or x-goog-api-key: vk-* headers when the value starts with the virtual key prefix.API Key Selection
Bifrost supports selecting a specific key by ID or name. When both are present, ID takes priority.By ID
Context Key:BifrostContextKeyAPIKeyID
Header: x-bf-api-key-id
Type: string
Required: No
Explicitly select a key by its unique ID. Takes priority over name selection when both are provided.
- Gateway (cURL)
- Go SDK
By Name
Context Key:BifrostContextKeyAPIKeyName
Header: x-bf-api-key
Type: string
Required: No
Explicitly select a named API key from your configured keys.
- Gateway (cURL)
- Go SDK
Session Stickiness (Session ID)
Context Key:BifrostContextKeySessionID
Header: x-bf-session-id
Type: string
Required: No
Bind a session to a specific API key so that requests with the same session ID consistently use the same key. Useful for predictable rate-limit buckets, cost attribution per user, and consistent model routing per session.
On the first request for a session ID, Bifrost selects a key and caches the binding in the KV store. Subsequent requests with the same session ID reuse the cached key as long as it remains valid.
Retry and Fallback Behavior:
- Retries: Session stickiness persists across retry attempts. If a request fails and is retried, the same sticky key is used.
- Fallbacks: When falling back to a different provider (e.g., from OpenAI to Anthropic), session stickiness is disabled and a new key is selected for the fallback provider. This ensures availability when the primary provider’s keys are exhausted or failing.
- Gateway (cURL)
- Go SDK
Session TTL
Context Key:BifrostContextKeySessionTTL
Header: x-bf-session-ttl
Type: time.Duration (header value: duration string like "30m" or "1h", or seconds as integer)
Required: No
Optional. Controls how long the session-to-key binding is cached. If not set, Bifrost uses 1 hour. The TTL is refreshed on each request so active sessions do not expire.
Accepts duration strings ("30s", "5m", "1h") or plain numbers (treated as seconds).
- Gateway (cURL)
- Go SDK
Request ID
Context Key:BifrostContextKeyRequestID
Header: x-request-id
Type: string
Required: No
Set a custom request ID for tracking and correlation. If not provided, Bifrost generates a UUID.
- Gateway (cURL)
- Go SDK
Send Back Raw Request
Context Key:BifrostContextKeySendBackRawRequest
Header: x-bf-send-back-raw-request
Type: bool (header values: "true" or "false")
Required: No
Include the exact JSON body sent to the provider alongside Bifrost’s standardized response. Accepts "true" or "false" - either value fully overrides the provider-level send_back_raw_request config for this request.
- Gateway (cURL)
- Go SDK
extra_fields.raw_request:
Send Back Raw Response
Context Key:BifrostContextKeySendBackRawResponseHeader:
x-bf-send-back-raw-responseType:
bool (header values: "true" or "false")Required: No Include the original provider response alongside Bifrost’s standardized response format. Accepts
"true" or "false" - either value fully overrides the provider-level send_back_raw_response config for this request.
- Gateway (cURL)
- Go SDK
extra_fields.raw_response:
Store Raw Request/Response
Context Key:BifrostContextKeyStoreRawRequestResponseHeader:
x-bf-store-raw-request-responseType:
bool (header values: "true" or "false")Required: No Persist the raw provider request and response in the log record. Accepts
"true" or "false" - either value fully overrides the provider-level store_raw_request_response config for this request.
This is orthogonal to the send-back flags: enabling this does not affect whether raw data appears in the API response, and enabling send-back does not automatically store raw data in logs. Use this when you want observability into provider payloads without necessarily exposing them to the caller, or combine it with x-bf-send-back-raw-* to do both.
- Gateway (cURL)
- Go SDK
x-bf-store-raw-request-response only has effect when the logging plugin is active - raw data is written to the log record by the logging plugin. Without it, enabling this flag captures the data but nothing persists it.x-bf-store-raw-request-response and x-bf-send-back-raw-* are orthogonal - you can enable any combination. Enabling store does not send data back to the caller; enabling send-back does not persist data in logs. Enable both to do both.Disable Content Logging (Per-Request)
Context Key:BifrostContextKeyDisableContentLogging
Header: x-bf-disable-content-logging
Type: bool (header values: "true" or "false")
Required: No
Override the logging plugin’s global disable_content_logging config for a single request. When set to true, messages, parameters, tool arguments, tool results, and raw provider bytes are omitted from the log record for that request. When set to false, content (and raw bytes, if x-bf-store-raw-request-response is also enabled) is recorded even if the global toggle is off.
This is useful when you need to suppress sensitive data (e.g. PII, credentials) for specific requests while keeping content logging enabled globally - or, conversely, to opt a single request into full content+raw capture while content logging is globally disabled.
- Gateway (cURL)
- Go SDK
allow_per_request_content_storage_override must be true in the logging plugin config (set in config.json or via the UI).
Precedence (when override is enabled): The per-request value takes precedence over the global disable_content_logging setting. A value of true suppresses content; false forces content on.
This flag affects only what is written to the log record (messages, params, tool results, raw request/response). Token counts, latency, cost, status, and routing metadata are always logged regardless of this setting.
Passthrough Extra Parameters
Context Key:BifrostContextKeyPassthroughExtraParams
Header: x-bf-passthrough-extra-params
Type: bool (header value: "true")
Required: No
Enable passthrough mode for extra parameters. When enabled, any parameters in extra_params (or provider-specific extra parameter fields) will be merged directly into the request sent to the provider.
- Gateway (cURL)
- Go SDK
- Only works for JSON requests, not multipart/form-data requests
- Parameters already handled by Bifrost are not duplicated
- Nested parameters are merged recursively with existing structures
Direct Key (Go SDK Only)
Context Key:BifrostContextKeyDirectKey
Header: - (not available via HTTP)
Type: schemas.Key
Required: No
Bypass key selection and provide credentials directly. Useful for dynamic key scenarios.
Skip Key Selection (Go SDK Only)
Context Key:BifrostContextKeySkipKeySelectionHeader:
- (not available via HTTP)Type:
boolRequired: No Skip the key selection process entirely and pass an empty key to the provider. Useful for providers that don’t require authentication or when using ambient credentials.
Custom URL Path (Go SDK Only)
Context Key:BifrostContextKeyURLPathHeader:
- (not available via HTTP)Type:
stringRequired: No Append a custom path to the provider’s base URL. Useful for accessing provider-specific endpoints.
Raw Request Body (Go SDK Only)
Context Key:BifrostContextKeyUseRawRequestBodyHeader:
- (not available via HTTP)Type:
boolRequired: No Send a raw request body instead of Bifrost’s standardized format. The provider receives your payload as-is. You must both enable the context key AND set the
RawRequestBody field on your request.
When using raw request body, Bifrost bypasses its request conversion and sends
your payload directly to the provider. You’re responsible for ensuring the
payload matches the provider’s expected format.
Custom Headers
Extra Headers (x-bf-eh-*)
Context Key:BifrostContextKeyExtraHeadersHeader Pattern:
x-bf-eh-{header-name}Type:
map[string][]stringRequired: No Pass custom headers to providers. The
x-bf-eh- prefix is stripped before forwarding.
- Gateway (cURL)
- Go SDK
x-bf-eh-user-id and x-bf-eh-tracking-id are forwarded to the provider as user-id and tracking-id respectively.
Example use cases:
- User identification:
x-bf-eh-user-id,x-bf-eh-tenant-id - Request tracking:
x-bf-eh-correlation-id,x-bf-eh-trace-id - Custom metadata:
x-bf-eh-department,x-bf-eh-cost-center - A/B testing:
x-bf-eh-experiment-id,x-bf-eh-variant
Semantic Cache Options
These options control semantic caching behavior.Cache Key
Context Key:semanticcache.CacheKey
Header: x-bf-cache-key
Type: string
Required: No
Specify a custom cache key for semantic cache lookups.
- Gateway (cURL)
- Go SDK
Cache TTL
Context Key:semanticcache.CacheTTLKey
Header: x-bf-cache-ttl
Type: time.Duration (header value: duration string like "30s" or "5m", or seconds as integer)
Required: No
Set a custom time-to-live for cached responses.
- Gateway (cURL)
- Go SDK
"30s", "5m", "1h") or plain numbers (treated as seconds).
Cache Threshold
Context Key:semanticcache.CacheThresholdKey
Header: x-bf-cache-threshold
Type: float64 (range: 0.0 to 1.0)
Required: No
Set the similarity threshold for semantic cache matching.
- Gateway (cURL)
- Go SDK
Cache Type
Context Key:semanticcache.CacheTypeKey
Header: x-bf-cache-type
Type: semanticcache.CacheType (string)
Required: No
Specify the cache type for this request.
- Gateway (cURL)
- Go SDK
Cache No Store
Context Key:semanticcache.CacheNoStoreKey
Header: x-bf-cache-no-store
Type: bool (header value: "true")
Required: No
Prevent caching of this request/response.
- Gateway (cURL)
- Go SDK
MCP (Model Context Protocol) Options
These options control MCP client and tool filtering.Include Clients
Context Key:mcp-include-clients
Header: x-bf-mcp-include-clients
Type: []string (comma-separated values)
Required: No
Filter MCP clients to include only the specified ones.
- Gateway (cURL)
- Go SDK
Include Tools
Context Key:mcp-include-tools
Header: x-bf-mcp-include-tools
Type: []string (comma-separated values)
Required: No
Filter MCP tools to include only the specified ones. Values must use the clientName-toolName format (e.g. gmail-send_email). Use clientName-* to include all tools from a client.
- Gateway (cURL)
- Go SDK
Maxim Observability Options
These options enable Maxim observability integration and tag propagation.Maxim Trace ID
Context Key:maxim.TraceIDKey
Header: x-bf-maxim-trace-id
Type: string
Required: No
Set the Maxim trace ID for distributed tracing.
- Gateway (cURL)
- Go SDK
Maxim Generation ID
Context Key:maxim.GenerationIDKey
Header: x-bf-maxim-generation-id
Type: string
Required: No
Set the Maxim generation ID for request correlation.
- Gateway (cURL)
- Go SDK
Unified dimensions (x-bf-dim-*)
Context Key:BifrostContextKeyDimensionsHeader Pattern:
x-bf-dim-{name}Type:
map[string]stringRequired: No Add per-request dimensions once and have Bifrost forward them to all observability backends:
- internal logs as request metadata
- OpenTelemetry span attributes
- Prometheus custom labels when the dimension name matches a configured label
- Maxim generation and trace tags
x-bf-dim-* is now the canonical header prefix for runtime observability metadata.
- Gateway (cURL)
- Go SDK
x-bf-dim-* values cannot override reserved Bifrost context keys such as request IDs or virtual keys. Also avoid sending secrets or PII in dimensions because they are propagated to observability backends.
For x-bf-dim-*, reserved metric labels path and method are ignored at runtime.Maxim Tags (x-bf-maxim-*)
Context Key:maxim.TagsKey
Header Pattern: x-bf-maxim-{tag-name}
Type: map[string]string
Required: No
Add Maxim-specific tags to traces. Any header starting with x-bf-maxim- that isn’t a reserved header becomes a tag.
Use x-bf-dim-* for tags that should also appear in logs, OpenTelemetry, and Prometheus. Use x-bf-maxim-* only for Maxim-specific tagging or when you need to override a same-named dimension for Maxim.
- Gateway (cURL)
- Go SDK
Prometheus Options
Context Key:BifrostContextKey(labelName)
Header Pattern: x-bf-prom-{label-name}
Type: string
Required: No
Add custom labels to Prometheus metrics. The x-bf-prom- prefix is stripped and the remainder becomes the label name.
This header family is deprecated. Prefer x-bf-dim-*, which feeds Prometheus and the other observability backends together. If both x-bf-dim-foo and x-bf-prom-foo are present, the x-bf-dim-* value takes precedence for Prometheus.
- Gateway (cURL)
- Go SDK
Security Denylist
Bifrost maintains a security denylist of headers that are never forwarded to providers, regardless of configuration:proxy-authorizationcookiehostcontent-lengthconnectiontransfer-encodingx-api-key(when used viax-bf-eh-*)x-goog-api-key(when used viax-bf-eh-*)x-bf-api-key(when used viax-bf-eh-*)x-bf-vk(when used viax-bf-eh-*)
Internal Context Keys
The following context keys are set by Bifrost internally.BifrostContextKeySelectedKeyID- The selected provider key ID.BifrostContextKeySelectedKeyName- The selected provider key name.BifrostContextKeyNumberOfRetries- Number of retry attempts made.BifrostContextKeyFallbackIndex- Index of fallback provider used.BifrostContextKeyFallbackRequestID- Request ID for fallback attempts.BifrostContextKeyStreamEndIndicator- Indicates if stream completed.BifrostContextKeyIntegrationType- Format type of integration used.BifrostContextKeyUserAgent- User agent from request.
Related Documentation
- Gateway Provider Configuration - Configure providers and headers
- Go SDK Context Keys - Programmatic context key usage
- Virtual Keys - Virtual key usage and governance
- Semantic Cache - Caching configuration

