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 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.