A valid request URL is required to generate request examples{
"project": {
"id": "<string>",
"name": "<string>",
"description": "<string>",
"is_active": true,
"expires_at": "2023-11-07T05:31:56Z",
"access_rule": "intersect",
"membership_mode": "explicit",
"accounting_mode": "both",
"split_policy": "none",
"calendar_aligned": false,
"budgets": [
{
"max_limit": 1,
"reset_duration": "1M",
"id": "<string>",
"reset_config": {
"quarter_start_month": 6
},
"current_usage": 123,
"last_reset": "2023-11-07T05:31:56Z",
"override_amount": 123,
"override_mode": "<string>",
"override_cycles_remaining": 123,
"override_cycles_total": 123,
"override_anchor_reset": "2023-11-07T05:31:56Z",
"config_hash": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"rate_limit": {
"id": "<string>",
"token_max_limit": 1,
"token_reset_duration": "1h",
"request_max_limit": 1,
"request_reset_duration": "1h",
"token_current_usage": 123,
"token_last_reset": "2023-11-07T05:31:56Z",
"request_current_usage": 123,
"request_last_reset": "2023-11-07T05:31:56Z",
"config_hash": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
},
"provider_configs": [
{
"provider_name": "openai",
"id": 123,
"all_models_allowed": false,
"allowed_models": [
"<string>"
],
"blacklisted_models": [
"<string>"
],
"key_ids": [
"<string>"
],
"weight": 123,
"budgets": [
{
"max_limit": 1,
"reset_duration": "1M",
"id": "<string>",
"reset_config": {
"quarter_start_month": 6
},
"current_usage": 123,
"last_reset": "2023-11-07T05:31:56Z",
"override_amount": 123,
"override_mode": "<string>",
"override_cycles_remaining": 123,
"override_cycles_total": 123,
"override_anchor_reset": "2023-11-07T05:31:56Z",
"config_hash": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"rate_limit": {
"id": "<string>",
"token_max_limit": 1,
"token_reset_duration": "1h",
"request_max_limit": 1,
"request_reset_duration": "1h",
"token_current_usage": 123,
"token_last_reset": "2023-11-07T05:31:56Z",
"request_current_usage": 123,
"request_last_reset": "2023-11-07T05:31:56Z",
"config_hash": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
},
"model_budgets": [
{
"model_name": "<string>",
"budgets": [
{
"max_limit": 1,
"reset_duration": "1M",
"id": "<string>",
"reset_config": {
"quarter_start_month": 6
},
"current_usage": 123,
"last_reset": "2023-11-07T05:31:56Z",
"override_amount": 123,
"override_mode": "<string>",
"override_cycles_remaining": 123,
"override_cycles_total": 123,
"override_anchor_reset": "2023-11-07T05:31:56Z",
"config_hash": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"rate_limit": {
"id": "<string>",
"token_max_limit": 1,
"token_reset_duration": "1h",
"request_max_limit": 1,
"request_reset_duration": "1h",
"token_current_usage": 123,
"token_last_reset": "2023-11-07T05:31:56Z",
"request_current_usage": 123,
"request_last_reset": "2023-11-07T05:31:56Z",
"config_hash": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
}
]
}
],
"mcp_configs": [
{
"id": 123,
"mcp_client_id": 123,
"mcp_client_name": "<string>",
"mcp_client": {
"config": {
"client_id": "<string>",
"name": "<string>",
"is_code_mode_client": true,
"connection_type": "http",
"connection_string": "<string>",
"stdio_config": {
"command": "<string>",
"args": [
"<string>"
],
"envs": [
"<string>"
]
},
"tls_config": {
"insecure_skip_verify": true,
"ca_cert_pem": "<string>"
},
"auth_type": "none",
"oauth_config_id": "<string>",
"headers": {},
"tools_to_execute": [
"<string>"
],
"tools_to_auto_execute": [
"<string>"
],
"tool_pricing": {},
"allow_on_all_virtual_keys": false,
"per_user_header_keys": [
"<string>"
],
"token_exchange": {
"audience": "<string>",
"use_idp_credentials": true,
"client_id": "<string>",
"client_secret": "<string>",
"scopes": [
"<string>"
],
"authorization_server_url": "<string>"
},
"disabled": false
},
"tools": [
{
"name": "<string>",
"description": "<string>",
"parameters": {},
"strict": true
}
],
"state": "healthy",
"last_failure": {
"stage": "connect",
"message": "<string>",
"at": "2023-11-07T05:31:56Z",
"since": "2023-11-07T05:31:56Z"
},
"node_states": {},
"vk_configs": [
{
"virtual_key_id": "<string>",
"virtual_key_name": "<string>",
"tools_to_execute": [
"<string>"
]
}
]
},
"tools_to_execute": [
"<string>"
]
}
],
"virtual_mcps": [
{
"virtual_mcp_id": 2
}
],
"members": [
{
"user_id": "<string>",
"id": "<string>",
"budget_shares": [
{
"source_budget_id": "<string>",
"id": "<string>",
"project_id": "<string>",
"user_id": "<string>",
"budget_id": "<string>",
"share_value": 123,
"share_type": "percent",
"budget": {
"max_limit": 1,
"reset_duration": "1M",
"id": "<string>",
"reset_config": {
"quarter_start_month": 6
},
"current_usage": 123,
"last_reset": "2023-11-07T05:31:56Z",
"override_amount": 123,
"override_mode": "<string>",
"override_cycles_remaining": 123,
"override_cycles_total": 123,
"override_anchor_reset": "2023-11-07T05:31:56Z",
"config_hash": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"rate_limit_shares": [
{
"source_rate_limit_id": "<string>",
"id": "<string>",
"project_id": "<string>",
"user_id": "<string>",
"rate_limit_id": "<string>",
"token_share": 123,
"token_share_type": "percent",
"request_share": 123,
"request_share_type": "percent",
"rate_limit": {
"id": "<string>",
"token_max_limit": 1,
"token_reset_duration": "1h",
"request_max_limit": 1,
"request_reset_duration": "1h",
"token_current_usage": 123,
"token_last_reset": "2023-11-07T05:31:56Z",
"request_current_usage": 123,
"request_last_reset": "2023-11-07T05:31:56Z",
"config_hash": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"user_name": "<string>",
"user_email": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"created_by_user_id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
},
"redivision_job_id": "<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>"
}
}{
"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>"
}
}Update project
Applies a patch to the stored project. Fields the body omits are left as
stored, and child lists are paired with their stored rows by id, so a
cap keeps its accumulated spend and its window across an edit while a
child the body stops naming is deleted.
Changing the roster or any divided cap on a project with
split_policy: equal recalculates every member’s slice. That work is
queued and its id is returned as redivision_job_id; the project’s own
write has already committed by then, so a failure to queue is reported as
a server error rather than rolling the edit back.
A valid request URL is required to generate request examples{
"project": {
"id": "<string>",
"name": "<string>",
"description": "<string>",
"is_active": true,
"expires_at": "2023-11-07T05:31:56Z",
"access_rule": "intersect",
"membership_mode": "explicit",
"accounting_mode": "both",
"split_policy": "none",
"calendar_aligned": false,
"budgets": [
{
"max_limit": 1,
"reset_duration": "1M",
"id": "<string>",
"reset_config": {
"quarter_start_month": 6
},
"current_usage": 123,
"last_reset": "2023-11-07T05:31:56Z",
"override_amount": 123,
"override_mode": "<string>",
"override_cycles_remaining": 123,
"override_cycles_total": 123,
"override_anchor_reset": "2023-11-07T05:31:56Z",
"config_hash": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"rate_limit": {
"id": "<string>",
"token_max_limit": 1,
"token_reset_duration": "1h",
"request_max_limit": 1,
"request_reset_duration": "1h",
"token_current_usage": 123,
"token_last_reset": "2023-11-07T05:31:56Z",
"request_current_usage": 123,
"request_last_reset": "2023-11-07T05:31:56Z",
"config_hash": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
},
"provider_configs": [
{
"provider_name": "openai",
"id": 123,
"all_models_allowed": false,
"allowed_models": [
"<string>"
],
"blacklisted_models": [
"<string>"
],
"key_ids": [
"<string>"
],
"weight": 123,
"budgets": [
{
"max_limit": 1,
"reset_duration": "1M",
"id": "<string>",
"reset_config": {
"quarter_start_month": 6
},
"current_usage": 123,
"last_reset": "2023-11-07T05:31:56Z",
"override_amount": 123,
"override_mode": "<string>",
"override_cycles_remaining": 123,
"override_cycles_total": 123,
"override_anchor_reset": "2023-11-07T05:31:56Z",
"config_hash": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"rate_limit": {
"id": "<string>",
"token_max_limit": 1,
"token_reset_duration": "1h",
"request_max_limit": 1,
"request_reset_duration": "1h",
"token_current_usage": 123,
"token_last_reset": "2023-11-07T05:31:56Z",
"request_current_usage": 123,
"request_last_reset": "2023-11-07T05:31:56Z",
"config_hash": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
},
"model_budgets": [
{
"model_name": "<string>",
"budgets": [
{
"max_limit": 1,
"reset_duration": "1M",
"id": "<string>",
"reset_config": {
"quarter_start_month": 6
},
"current_usage": 123,
"last_reset": "2023-11-07T05:31:56Z",
"override_amount": 123,
"override_mode": "<string>",
"override_cycles_remaining": 123,
"override_cycles_total": 123,
"override_anchor_reset": "2023-11-07T05:31:56Z",
"config_hash": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"rate_limit": {
"id": "<string>",
"token_max_limit": 1,
"token_reset_duration": "1h",
"request_max_limit": 1,
"request_reset_duration": "1h",
"token_current_usage": 123,
"token_last_reset": "2023-11-07T05:31:56Z",
"request_current_usage": 123,
"request_last_reset": "2023-11-07T05:31:56Z",
"config_hash": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
}
]
}
],
"mcp_configs": [
{
"id": 123,
"mcp_client_id": 123,
"mcp_client_name": "<string>",
"mcp_client": {
"config": {
"client_id": "<string>",
"name": "<string>",
"is_code_mode_client": true,
"connection_type": "http",
"connection_string": "<string>",
"stdio_config": {
"command": "<string>",
"args": [
"<string>"
],
"envs": [
"<string>"
]
},
"tls_config": {
"insecure_skip_verify": true,
"ca_cert_pem": "<string>"
},
"auth_type": "none",
"oauth_config_id": "<string>",
"headers": {},
"tools_to_execute": [
"<string>"
],
"tools_to_auto_execute": [
"<string>"
],
"tool_pricing": {},
"allow_on_all_virtual_keys": false,
"per_user_header_keys": [
"<string>"
],
"token_exchange": {
"audience": "<string>",
"use_idp_credentials": true,
"client_id": "<string>",
"client_secret": "<string>",
"scopes": [
"<string>"
],
"authorization_server_url": "<string>"
},
"disabled": false
},
"tools": [
{
"name": "<string>",
"description": "<string>",
"parameters": {},
"strict": true
}
],
"state": "healthy",
"last_failure": {
"stage": "connect",
"message": "<string>",
"at": "2023-11-07T05:31:56Z",
"since": "2023-11-07T05:31:56Z"
},
"node_states": {},
"vk_configs": [
{
"virtual_key_id": "<string>",
"virtual_key_name": "<string>",
"tools_to_execute": [
"<string>"
]
}
]
},
"tools_to_execute": [
"<string>"
]
}
],
"virtual_mcps": [
{
"virtual_mcp_id": 2
}
],
"members": [
{
"user_id": "<string>",
"id": "<string>",
"budget_shares": [
{
"source_budget_id": "<string>",
"id": "<string>",
"project_id": "<string>",
"user_id": "<string>",
"budget_id": "<string>",
"share_value": 123,
"share_type": "percent",
"budget": {
"max_limit": 1,
"reset_duration": "1M",
"id": "<string>",
"reset_config": {
"quarter_start_month": 6
},
"current_usage": 123,
"last_reset": "2023-11-07T05:31:56Z",
"override_amount": 123,
"override_mode": "<string>",
"override_cycles_remaining": 123,
"override_cycles_total": 123,
"override_anchor_reset": "2023-11-07T05:31:56Z",
"config_hash": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"rate_limit_shares": [
{
"source_rate_limit_id": "<string>",
"id": "<string>",
"project_id": "<string>",
"user_id": "<string>",
"rate_limit_id": "<string>",
"token_share": 123,
"token_share_type": "percent",
"request_share": 123,
"request_share_type": "percent",
"rate_limit": {
"id": "<string>",
"token_max_limit": 1,
"token_reset_duration": "1h",
"request_max_limit": 1,
"request_reset_duration": "1h",
"token_current_usage": 123,
"token_last_reset": "2023-11-07T05:31:56Z",
"request_current_usage": 123,
"request_last_reset": "2023-11-07T05:31:56Z",
"config_hash": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"user_name": "<string>",
"user_email": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"created_by_user_id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
},
"redivision_job_id": "<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>"
}
}{
"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>"
}
}Authorizations
Management API authentication for /api/* endpoints. Use the Authorization header with Bearer <API key>.
Virtual keys, dashboard/user/session tokens, and x-api-key headers are not supported on management APIs.
Path Parameters
Body
Read-then-patch. A field this body omits is left as stored. For description, expires_at, rate_limit, budgets, provider_configs, mcp_configs and virtual_mcps, an explicit null clears what is stored, and for the four list fields that means deleting every stored child. The remaining fields cannot be cleared: null reads the same as omitted. Child lists are matched to their stored rows by id, so restate the ids you read; a stored child the body does not name is deleted. A members field is ignored rather than refused.
How the project's own access composes with the access the caller already holds. intersect permits only what both allow, so a project with no provider config permits nothing. union leaves the caller's access untouched and adds to it, so a project with no provider or MCP config only attributes and caps spend.
intersect, union explicit admits only the users on the roster. open admits every authenticated caller and has no membership rows, which is why it cannot divide a budget between members.
explicit, open Which ledgers a request's spend lands on. both charges the project and the caller. project_only takes the request off everything the caller funds, including the teams and business units above them. principal_only leaves the project's caps on record but checks and charges none of them. The deployment's own global caps always apply.
both, project_only, principal_only none keeps the project's caps shared, and individual members can still be capped by hand. equal gives every member an equal slice of every budget and rate limit the project holds, at every tier, as a second cap within it.
none, equal Show child attributes
Show child attributes
A token and request rate limit on a project, on a provider inside it, or on a model under that provider. The two dimensions run independent windows, and a cap is enforced only together with its window.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Clears recorded spend on the budgets this body restates that the project already held, and on each member's slice of them. A budget the edit introduces has no spend to clear, and one the body does not name is left alone.
Response
Project updated
A per-request access scope and accounting ledger that callers opt into with a header.
Show child attributes
Show child attributes
Present only when the edit queued a redivision, which happens on a project with split_policy: equal whose roster or divided caps changed. A pending job for the same project is reused rather than queued behind, so this may name a job an earlier request created. Progress is reported on the redivision_progress WebSocket channel under this id.
Was this page helpful?

