Skip to main content
The Casebyte API enforces a per-key rate limit to keep the service responsive for everyone.

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 get 429 Too Many Requests with this body:

A well-behaved client

Back off on 429 with exponential delay and jitter:
For batch workloads, use the 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=100 costs the same as one with limit=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.

Need a higher limit?

If 10 req/min is too tight for your workload, get in touch. We can raise the per-key limit, issue multiple keys, or set up a bulk export for one-off backfills.