The limit
Your first request after a 60-second gap starts a fresh window, and you have
10 requests to spend before it resets.
If you have multiple API keys, each one gets its own independent budget.
If multiple processes share a single key (e.g. a worker pool), they share the
budget.
Response headers
Every successful response (200) and rate-limit response (429) includes:
You don’t need to track windows yourself — just read
X-RateLimit-Remaining
and pace your requests when it gets low.
We deliberately don’t return
Retry-After or a reset timestamp on 429
responses. Use exponential backoff with jitter instead — it’s friendlier to
the service and to your own latency budget than retrying at the exact
moment the window rolls.When you exceed the limit
Over-quota requests get429 Too Many Requests with this body:
A well-behaved client
Back off on429 with exponential delay and jitter:
X-RateLimit-Remaining header proactively
instead of waiting to be 429’d:
Tips for staying under the limit
- Prefer larger pages. A single search with
limit=100costs the same as one withlimit=10. - Cache aggressively. Case content (the response from
GET /v1/cases/{id}) is effectively immutable once a judgment is published. Cache it locally for hours or days. - Parallelise across keys, not across requests. If you need genuine parallelism, issue one API key per worker.
- Don’t poll
/cited-by. It changes only when new judgments are published. Refresh once a day at most.