A valid request URL is required to generate request examples{
"name": "<string>",
"primary_provider": "<string>",
"primary_model": "<string>",
"fallback_provider": "<string>",
"fallback_model": "<string>",
"condition": {
"signals": [
{
"source": "response_header",
"header_name": "<string>",
"header_value": "<string>",
"header_contains": "<string>"
}
],
"operator": "OR"
},
"enabled": true,
"primary_key_ids": [
"<string>"
],
"default_cooldown": "<string>",
"cooldown_header": "<string>"
}{
"event_id": "<string>",
"type": "<string>",
"is_bifrost_error": true,
"status_code": 123,
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"event_id": "<string>"
},
"extra_fields": {
"provider": "anthropic",
"model_requested": "<string>",
"request_type": "<string>",
"error_type": "<string>",
"retry_after_ms": 150500
}
}{
"event_id": "<string>",
"type": "<string>",
"is_bifrost_error": true,
"status_code": 123,
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"event_id": "<string>"
},
"extra_fields": {
"provider": "anthropic",
"model_requested": "<string>",
"request_type": "<string>",
"error_type": "<string>",
"retry_after_ms": 150500
}
}Create circuit breaker policy
Creates a new circuit breaker policy and immediately activates it in the running gateway. Returns 409 if a policy with the same name already exists.
A valid request URL is required to generate request examples{
"name": "<string>",
"primary_provider": "<string>",
"primary_model": "<string>",
"fallback_provider": "<string>",
"fallback_model": "<string>",
"condition": {
"signals": [
{
"source": "response_header",
"header_name": "<string>",
"header_value": "<string>",
"header_contains": "<string>"
}
],
"operator": "OR"
},
"enabled": true,
"primary_key_ids": [
"<string>"
],
"default_cooldown": "<string>",
"cooldown_header": "<string>"
}{
"event_id": "<string>",
"type": "<string>",
"is_bifrost_error": true,
"status_code": 123,
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"event_id": "<string>"
},
"extra_fields": {
"provider": "anthropic",
"model_requested": "<string>",
"request_type": "<string>",
"error_type": "<string>",
"retry_after_ms": 150500
}
}{
"event_id": "<string>",
"type": "<string>",
"is_bifrost_error": true,
"status_code": 123,
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"param": "<string>",
"event_id": "<string>"
},
"extra_fields": {
"provider": "anthropic",
"model_requested": "<string>",
"request_type": "<string>",
"error_type": "<string>",
"retry_after_ms": 150500
}
}| Permission | Granted via |
|---|---|
CircuitBreaker:Create | RBAC role or API key scope |
Authorizations
Management API authentication for /api/* endpoints. Use the Authorization header
with Bearer <token>, where <token> is one of:
- a Bifrost management API key,
- a dashboard session token issued by
POST /api/session/login, - base64 of
<admin-username>:<admin-password>(legacy equivalent ofBasicAuth).
Virtual keys (sk-bf-*) and the x-api-key header are not accepted on management APIs -
the sole exception is GET /api/governance/virtual-keys/quota, which is virtual-key-only.
Authentication alone is not sufficient in Bifrost Enterprise: each operation page shows a
Required Permissions table (Resource:Operation, for example Dashboard:View) above
its Authorizations section, and the caller's RBAC role or management API key scopes must
include what it lists, otherwise the request is rejected with 403 Forbidden.
A local admin — authenticated with the admin password, or any caller on a deployment with dashboard auth disabled — bypasses these checks and can call every management endpoint.
OSS setup lock. On Bifrost OSS, while dashboard auth is not active (no admin account,
or auth disabled), every management endpoint except the public ones (/health,
/api/version, /api/session/is-auth-enabled, /api/session/login, ...) requires the
operator's setup token in the X-Bifrost-Setup-Token header, in place of Authorization.
The token is set with setup_token in config.json or the BIFROST_SETUP_TOKEN
environment variable. A missing header returns 401, a wrong token 403. The header
stops working once dashboard auth is enabled. The dashboard instead trades the token once
for an HttpOnly bifrost_setup_session cookie via POST /api/session/setup.
See Required permissions for how
permissions are derived and which endpoints are exempt.
Body
Unique name for this policy.
Provider to monitor (e.g. azure, openai).
Model name as it appears in requests (e.g. gpt-4o-ptu).
Provider to route to when the circuit is open.
Model to request from the fallback provider when the circuit is open.
Show child attributes
Show child attributes
When false, the policy is registered but all hooks skip it.
API key UUIDs to track individually. Each key gets its own sub-circuit. The main circuit opens only when all listed keys have tripped. Leave empty to use a single shared circuit for all keys serving this provider+model.
How long to keep the circuit open (in nanoseconds).
Accepted as a Go duration string on write (e.g. "30s", "5m"); returned as an integer (nanoseconds) on read.
Defaults to 30 seconds (30000000000 ns).
^[0-9]+(ns|us|µs|ms|s|m|h)$Response header whose value (in milliseconds) overrides default_cooldown.
Falls back to default_cooldown when the header is absent or unparsable.
Response
Policy created
Unique name for this policy.
Provider to monitor (e.g. azure, openai).
Model name as it appears in requests (e.g. gpt-4o-ptu).
Provider to route to when the circuit is open.
Model to request from the fallback provider when the circuit is open.
Show child attributes
Show child attributes
When false, the policy is registered but all hooks skip it.
API key UUIDs to track individually. Each key gets its own sub-circuit. The main circuit opens only when all listed keys have tripped. Leave empty to use a single shared circuit for all keys serving this provider+model.
How long to keep the circuit open (in nanoseconds).
Accepted as a Go duration string on write (e.g. "30s", "5m"); returned as an integer (nanoseconds) on read.
Defaults to 30 seconds (30000000000 ns).
^[0-9]+(ns|us|µs|ms|s|m|h)$Response header whose value (in milliseconds) overrides default_cooldown.
Falls back to default_cooldown when the header is absent or unparsable.
Was this page helpful?

