Skip to main content

FinOps Budgets

Manage organizational budget gates for AI workflows, including budget creation, scope assignment, threshold-based alerts and pause actions, and lifecycle controls.

All endpoints require authentication via X-API-Key header and the appropriate scope.


Budget Object

{
"_id": "bud_abc123",
"name": "Q1 AI Spend",
"description": "Quarterly AI workflow budget",
"organizationId": "org_xyz",
"scope": {
"level": "organization",
"id": "org_xyz"
},
"budget": {
"amount": 10000,
"currency": "USD",
"type": "recurring",
"period": "monthly",
"resetDay": 1
},
"thresholds": [
{ "percent": 75, "action": "alert" },
{ "percent": 100, "action": "pause" }
],
"status": "active",
"enabled": true,
"createdAt": "2025-01-15T10:30:00Z",
"updatedAt": "2025-02-01T14:22:00Z"
}

GET /api/v1/finops/budgets

List FinOps budgets. Backend filters by caller organization.

Scope: finops:read

Query Parameters

ParameterTypeRequiredDescription
scopeLevelstringNoFilter by scope: platform, organization, user, resourceGroup, resource, resourceType, tag
statusstringNoFilter by status: active, paused, exhausted
limitintegerNoNumber of results to return
offsetintegerNoNumber of results to skip

Response 200 OK

{
"count": 1,
"limit": 20,
"offset": 0,
"items": [
{
"_id": "bud_abc123",
"name": "Q1 AI Spend",
"scope": { "level": "organization", "id": "org_xyz" },
"status": "active"
}
]
}

POST /api/v1/finops/budgets

Create a new unified FinOps budget.

Scope: finops:write

Request Body

{
"name": "Q1 AI Spend",
"organizationId": "org_xyz",
"scope": { "level": "organization", "id": "org_xyz" },
"budget": {
"amount": 10000,
"currency": "USD",
"type": "recurring",
"period": "monthly",
"resetDay": 1
},
"thresholds": [
{ "percent": 75, "action": "alert" },
{ "percent": 100, "action": "pause" }
],
"description": "Quarterly AI workflow budget",
"enabled": true
}
FieldTypeRequiredDescription
namestringYesBudget name
organizationIdstringYesTenant org id
scopeobjectYesBudget scope per schema (level: platform, organization, user, resourceGroup, resource, resourceType, tag)
budgetobjectYesamount / currency / type / period / resetDay
thresholdsarrayYesArray of {percent, action: "alert" | "pause"}
descriptionstringNoBudget description
enabledbooleanNoStart active (default true)

Response 201 Created

{
"budgetId": "bud_abc123"
}

GET /api/v1/finops/budgets/:id

Get a single FinOps budget by ID.

Scope: finops:read

Path Parameters

ParameterTypeRequiredDescription
idstringYesBudget ID

Response 200 OK

Returns the full Budget object.


PUT /api/v1/finops/budgets/:id

Update an existing FinOps budget by ID.

Scope: finops:write

Path Parameters

ParameterTypeRequiredDescription
idstringYesBudget ID

Request Body

{
"name": "Q1 AI Spend (revised)",
"thresholds": [{ "percent": 90, "action": "pause" }],
"enabled": true
}
FieldTypeRequiredDescription
namestringNoBudget name
scopeobjectNoBudget scope
budgetobjectNoamount / period / resetDay / type
thresholdsarrayNoThreshold list
descriptionstringNoBudget description
enabledbooleanNoEnable or disable

Response 200 OK

Returns the updated Budget object.


DELETE /api/v1/finops/budgets/:id

Delete a FinOps budget by ID.

Scope: finops:write

Path Parameters

ParameterTypeRequiredDescription
idstringYesBudget ID

Response 204 No Content


POST /api/v1/finops/budgets/:id/pause

Pause a FinOps budget — suspends tracking and enforcement.

Scope: finops:write

Path Parameters

ParameterTypeRequiredDescription
idstringYesBudget ID

Response 200 OK

{
"_id": "bud_abc123",
"status": "paused"
}

POST /api/v1/finops/budgets/:id/resume

Resume a paused FinOps budget.

Scope: finops:write

Path Parameters

ParameterTypeRequiredDescription
idstringYesBudget ID

Response 200 OK

{
"_id": "bud_abc123",
"status": "active"
}