Usage & Quota
Read your organization's API usage time-series, and how the per-organization monthly request quota behaves.
Usage time-series
Two read endpoints expose your organization's API usage, aggregated from request logs into daily UTC buckets.
| Method | Endpoint | Scope / Permission |
|---|---|---|
| GET | /api/v1/usage | API key — apps:read |
| GET | /api/v1/usage/keys/{apiKeyId} | API key — apps:read |
The same data is available to the developer portal (session-authenticated) at
/api/developer/usage and /api/developer/usage/keys/{apiKeyId} under the
developers:read permission.
Query parameters
| Param | Values | Default | Notes |
|---|---|---|---|
period | 7d 30d 90d | 30d | Trailing window, in days, ending today (UTC). |
Response
{
"data": {
"period": "30d",
"apiKeyId": null,
"series": [
{
"date": "2026-05-16",
"requests": 1280,
"errors": 14,
"errorRatePct": 1.09,
"p95LatencyMs": 142,
"rateLimitHits": 0
}
// … one object per UTC day in the window
],
"totals": {
"requests": 38400,
"errors": 410,
"errorRatePct": 1.07,
"p95LatencyMs": 151,
"rateLimitHits": 3
},
"generatedAt": "2026-06-14T00:00:00.000Z"
},
"meta": { ... }
}Field semantics
- Buckets are calendar days in UTC (
date_trunc('day', created_at AT TIME ZONE 'UTC')). Theseriesis 0-padded — every day in the window appears exactly once, even with zero traffic, so the array length is deterministic. requests— total requests in the bucket.errors— responses with status>= 400.errorRatePctiserrors / requests * 100(0when there were no requests).p95LatencyMs— 95th-percentile latency for the bucket, ornullwhen the bucket has no rows. The windowtotals.p95LatencyMsis recomputed over the whole window (it is not the average of the per-day percentiles).rateLimitHits— requests rejected with429(rate-limited).apiKeyId—nullon the org summary; the key id on the per-key breakdown.
The key breakdown only returns data for an API key your organization owns;
an unknown or non-owned key id returns 404.
Monthly quota
Your organization may have a monthly API request ceiling (a per-calendar-month cap, configured by the platform operator). Quota is a coarse protection ceiling, not a billing meter — a small amount of under-counting is possible by design.
- If your organization has no configured quota, requests are unlimited.
- When you exceed the ceiling, the platform responds in one of two modes
(operator-controlled):
- Warning mode (default): the request still succeeds, but responses carry
an
X-Quota-Warning: trueheader. Treat this as a signal to reduce volume or request a higher ceiling. - Enforce mode: requests over the ceiling are rejected with
429 Too Many Requestsand the errorcode: "org_quota_exceeded".
- Warning mode (default): the request still succeeds, but responses carry
an
The org quota is checked before the per-key rate-limit tier, so an org-ceiling
rejection is distinguishable from a per-key tier rejection
(code: "rate_limit_exceeded").