- ~300 requests/min globally per IP (repo default is 60/min).
- 10 requests/min on
GET /v1/audit.csv(the bulk export, per ADR-0014). GET /healthzandGET /readyzare exempt, so uptime monitors can poll freely.
Headers on every response
You don’t have to guess your remaining budget — every response carries it, using the IETF standards-trackRateLimit-* fields (mirrored as X-RateLimit-* for older clients):
Browser clients can read these cross-origin — they’re in the CORS
expose-headers allowlist
on the public read surface.When you hit the limit
Exceeding the limit returns429 with the JSON error envelope
({"error":"rate_limited"}) and a Retry-After header (seconds). Back off for that
long, then resume.