Section 12
12. Usage, billing and quotas
Every route below resolves your tenant from the credential — no ids in URLs.
| Endpoint | Answers |
|---|---|
GET /v1/usage | spend over 24h / 7d / 30d / all-time, plus per-kind breakdown |
GET /v1/billing/costs | per-request ledger rows — the whole history, not paginated |
GET /v1/billing/balance | prepaid credit balance |
GET /v1/billing/credits | credit ledger, paginated |
GET /v1/billing/entitlement | your plan and any overrides |
GET /v1/quotas | one slot per quota kind: usage and ceiling in one stated unit (see below) |
GET /v1/analytics/cost | per-day cost series |
GET /v1/analytics/instances | per-instance lifetime and spend |
GET /v1/analytics/margin | inference versus compute spend |
Each has an addressed twin at /v1/tenants/{tenant_id}/… for principals that
span tenants. They return identical data; the caller-scoped form exists because
the id could only ever have been your own.
Quotas
GET /v1/quotas always returns exactly one slot per quota kind, read through
the same code path that refuses a request, so what you read is what you are
enforced on. Within a slot, value and ceiling are in the same unit.
json
{"tenant_id":"…","plan_id":"enterprise","slots":[
{"kind":"monthly_credits","period_key":"2026-09","value":155640,"ceiling":null,
"unit":"micro_cents","measure":"spend","unlimited":true,"source":"api.cost_ledger","enforced":true},
{"kind":"max_concurrent_instances","period_key":"","value":0,"ceiling":null,
"unit":"instances","measure":"gauge","unlimited":true,"source":"compute.instances","enforced":true},
{"kind":"per_minute","period_key":"2026-09-21T14:05","value":0,"ceiling":600,
"unit":"requests","measure":"counter","unlimited":false,"source":"api.quota_counters","enforced":false},
{"kind":"max_model_size_b","period_key":"","value":0,"ceiling":9999,
"unit":"params_b","measure":"ceiling_only","unlimited":false,"source":"api.plans","enforced":true}
]}monthly_credits— this calendar month's spend summed from your cost ledger, against your plan allowance, both in micro-cents (1¢ = 1,000,000 µ¢).max_concurrent_instances— a live gauge of instances holding hardware.per_minute/per_day— event counters;enforced: falsemeans no route declares them today, so they are reported but inert.max_model_size_b— bounds a launch request;valueis always0and is not a measurement (measure: "ceiling_only").ceiling: nullappears only withunlimited: true(an enterprise override).
Plans
| Plan | Monthly credits | Max concurrent instances |
|---|---|---|
| free | 0¢ | 1 |
| hobby | 2,000¢ | 1 |
| pro | 20,000¢ | 5 |
| team | 100,000¢ | 20 |
| enterprise | 1,000,000¢ | 9,999 |
Exceeding the monthly allowance returns 429 budget.exceeded. The prepaid
balance is deliberately not enforced per call.