Skip to main content
Real rows from the tenant spend ledger, grouped by tenant, with each tenant’s declared cap beside its spend. period defaults to month. Anything outside the four values is 400 invalid_input.

class and enforced are the fields that matter

Reading cap_cents without them is how an alert gets mistaken for a ceiling. class is reserve only when the tenant’s budget declares hard: true.

🔴 environment_scoped: false

This sum spans sandbox and production. The cap it is compared against does not.The path that reserves spend before an action scopes its sum to one environment. This read path does not. So a tenant’s sandbox spend counts toward the number you see here, but not toward the cap that would refuse it.Practical consequence: cents on this endpoint can exceed cap_cents while no action has ever been refused, and that is not a bug in the cap. If you are building an alert on “spend approaching cap”, either restrict your tenants to one environment or expect false positives from sandbox traffic.

This sum is attribution, not the ledger

A row appears here only when the spend was attributed to a profile. chargeCredits records per-profile platform-credit spend inside the agent-profile context, which is bound around every HTTP request and around every MCP tool call — so both transports are represented. Anything charged outside a resolved subject is not: the legacy orchestration container resolves to the company rather than to its own kit (see the governance gateway), and its usage lands in the company credit ledger with no profile to attribute it to.If you need a total that does not depend on attribution, read GET /v1/billing/transactions — the company credit ledger — and treat this endpoint as the per-tenant governance view rather than as billing.Builds before the current release also omitted all MCP credit spend, because the budget scope was not bound on that transport. If your numbers for an older period look implausibly low for an MCP-heavy tenant, that is why.

Buckets are tenants, not actions

One row per tenant. key is the tenant_user_id; label is the tenant’s label, falling back to its external id, falling back to null. For a per-action breakdown of one tenant, use GET /v1/teams/{team}/tenants/{tenantUserId}/cost — and note that enforced on that endpoint answers a different question and is always false.

Windows

period.start is computed from the requested period, not from any tenant’s own budget window. cap_period on each bucket is that tenant’s actual cap window. If they differ, the spend figure and the cap are measured over different spans — compare cap_period to period.name before dividing one by the other.