CourtListener API · Rate limits · LawDiver API
The CourtListener REST API caps authenticated users at 5/min, 50/hour, and 125/day on concurrent rolling windows — with extra caps on citation lookup. This page explains what each window actually does to a product, and how the LawDiver API removes every one of those restrictions.
For the canonical numbers and the Usage API that reads your live quota, see CourtListener's REST API docs. CourtListener and Free Law Project are a nonprofit whose bulk dumps seeded much of this field — this page links to them at every turn.
By default CourtListener allows authenticated users 5 requests per minute, 50 per hour, and 125 per day, measured on concurrent rolling windows — the most restrictive one, given your recent traffic, is what blocks the next request. A refusal is an HTTP 429 with a Retry-After header and a body like Request was throttled. Rate limit exceeded: 5/min. Expected available in 37 seconds. All three windows refill naturally as earlier requests age out — there is no midnight reset. The unrestricted bulk dumps are separate quarterly snapshots, not a live feed. Higher API ceilings are available by Free Law Project membership or commercial agreement.
| Window | Default authenticated limit | What hitting it looks like |
|---|---|---|
| Per minute | 5 | The first burst of an interactive session — a brief with a handful of cites, a search that pages results, a parallel fan-out — trips this within seconds. |
| Per hour | 50 | An hour of steady research. Thirty searches, a few cite checks, and the paginated results that follow are enough. |
| Per day | 125 | A full day of use — or a single bulk pull that needs more than a hundred record fetches. Retry-After can read tens of thousands of seconds. |
Source: CourtListener's REST API docs — Rate Limits, Understanding Rate Limits, and Checking Rate Limits. Values verified October 2026. If CourtListener has raised a default since, the canonical page on courtlistener.com controls — and LawDiver will update this page.
CourtListener's REST API (currently v4.7, formerly v4.3) is the programmatic front door to the case law, PACER dockets and filings, oral arguments, judges, RECAP, and the citation graph that the nonprofit Free Law Project maintains. Most endpoints are open to anonymous callers, but the throttles that matter treat authentication and anonymous differently — so the first line of every integration is the header.
Authentication
# Token authentication — what most scripts should send
curl "https://www.courtlistener.com/api/rest/v4/search/?q=foo" \
--header 'Authorization: Token <your-token-here>'
# The word "Token" matters — "Bearer" is not the same here
Authorization: Token <your-token-here>The token is on your CourtListener profile. There are also cookie/session and HTTP Basic forms, but token is what CourtListener recommends for programmatic access.
The common failure is sending the token wrong — dropping Token, using Bearer out of habit, or never adding the header at all. When that happens your calls are counted on the smaller anonymous throttle instead of your account's 5/50/125, even though the endpoint still returned data briefly. That is why "throttled but barely used" almost always means an authentication bug, not a cap problem.
Quick check: load the same API URL in a logged-in browser. If it works there but your code gets a 429, the code is not throttled — it is not authenticating. The browsable HTML API and the JSON API use the same throttle family, so the browser is the real test.
Three design choices shape what happens when a legal product calls CourtListener in production. They are documented together on the Rate Limits page and only make sense as a system.
The tightest window. A loop that pulls a few opinions, checks a citation, or pages through a search hits this within seconds — a single brief with a dozen citations can trip it while you are still authenticating.
Even if you pace the per-minute window perfectly, an hour of steady work is capped at 50 API calls. Bulk pulls, nightly syncs, and interactive research that touches the API on every query each spend this budget differently — but it runs out the same way.
The daily ceiling. Every call you made in the last 24 hours counts against it, in a rolling calculation with no reset at midnight. Reaching it returns a 429 with a Retry-After that can read tens of thousands of seconds — well into the next day.
The minute, hour, and day windows apply at the same time. Whichever one is closest to full is the one that blocks you. A 429 tells you the window that fired (e.g. "5/min") but not how close the other two are — you learn which one next time you hit it.
Capacity comes back only as your oldest in-window requests age out. There is no midnight reset that refills the bucket. Stopping for an hour does not empty the hour window; every call still needs 60 minutes to fall off.
Requests sent without (or with a malformed) Authorization: Token header are counted against a smaller anonymous throttle, not your account. The most common reason a key "looks throttled" is a missing Token keyword in the header — the call was never attributed to you.
The /api/rest/v4/citation-lookup/ endpoint adds a 250-citations-per-request cap and a separate per-minute throttle on citation-parse volume. An extra citation does not slow you down — it is dropped — so a brief with more than 250 cites needs a second request just to get an answer on the rest.
When any window fires the API refuses with HTTP 429, a Retry-After header in seconds, and a body naming the limit that fired:
HTTP 429 Too Many Requests
Retry-After: 85774
{
"detail": "Request was throttled. Expected available in 85774 seconds."
}That tells you which window blocked you this time. It does not tell you how close the other windows are — you learn that next time you hit one of them. The diagnostic surface is a separate, authenticated endpoint,GET /api/rest/v4/api-usage/, documented at /api/rest/v4/api-usage: one row per window, with used, limit, remaining, reset_at, and blocked, sorted by fullest first. It has its own throttle so it works even when everything else is 429.
# Read your live quota — works even when general API is throttled
curl -H "Authorization: Token <your-token-here>" \
https://www.courtlistener.com/api/rest/v4/api-usage/
# Response (abridged): one row per concurrent window
[
{ "scope": "user", "limit": 5, "used": 5, "remaining": 0, "remaining": 0, "reset_at": "2026-10-22T18:37:00Z" },
{ "scope": "user", "limit": 50, "used": 38, "remaining": 12, "reset_at": "2026-10-22T19:02:00Z" },
{ "scope": "user", "limit":125, "used":101, "remaining": 24, "reset_at": "2026-10-23T03:14:00Z" }
]The citation-lookup endpoint is the exception to the header shape: it reports the wait as a wait_until timestamp inside its error JSON rather than as a Retry-After header. That is the only way that endpoint says "try again at".
CourtListener's Citation Lookup and Verification API (POST /api/rest/v4/citation-lookup/) can parse a block of text and tell you whether each citation resolves — the right shape for a hallucination guard. It also carries two caps beyond the general windows:
status: 429 and do not resolve until a follow-up request starting at the next start_index.wait_until timestamp in the error body.Those are not defects — at the price Free Law Project charges ($0) a single endpoint that parsed every citation in a law-review volume on every call would be an abuse vector. They are, though, a concrete reason a product that cite-checks documents needs a different shape: a long brief needs two or more sequential, throttled calls just to finish the existence check, before any question of whether the cite is still good law arises.
Every one of these is documented, not speculative, and follows directly from the windows above.
A production corpus is millions of opinions. At the default cap a cold sync from scratch takes years, an incremental update that touches every new cluster burns a noticeable slice of the day, and any product that fetches on read competes with the nightly job for the same budget.
A cite-check in chat, an autocomplete, or a search that fans out across the case law cannot wait for rolling windows to clear. Either the product serialises what should be parallel work, or it fails openly on load — both read to users as the product being slow.
Reporter citation metadata in the free bulk sources stops reliably for many state opinions — Florida So. 3d after roughly 2019 is the documented pattern. Throttling compounds that gap: when a court site changes and a batch of resolves miss, retrying each one through the API at 125 per day is not a fix.
Free Law Project offers membership tiers and commercial agreements with raised ceilings, but the shape — per-minute, per-hour, per-day ceilings and rolling refills — is the mechanism, not a knob, and the bulk snapshots that are free still regenerate only quarterly.
The unrestricted CSV dumps regenerate quarterly, on the last day of March, June, September, and December — the full accounting is on /licenses. Between dumps, yesterday's opinion is not in the data you fetched. Building freshness on top of those snapshots while staying inside an API daily cap is the job.
LawDiver serves the same open-law lineage from a continuously harvested corpus (not a live pass-through to CourtListener), so product traffic hits LawDiver's own ceilings — 60/min-class by default, raised on request — instead of 5/min · 50/hour · 125/day. For licensing, good-law, multi-authority cite-check, and the full product comparison, see Compare CourtListener and LawDiver.
The questions above are the way people search for this page. Each one is indexed as an answer for AI retrieval as well as for Google.
The LawDiver API is at 60/min by default (raised on request), licensed for any commercial purpose, and backed by the corpus described on Coverage. Get a key and make the same requests without the queue.
Questions about a partnership, a higher ceiling, or delivery model? Partnerships — or email [email protected].
CourtListener's default rate limits, bulk-generation schedule, and citation-lookup throttles are as documented at courtlistener.com/help/api/rest/ and /help/api/rest/v4/citation-lookup/ as of October 2026. Their Usage API is at /api/rest/v4/api-usage. LawDiver's API throttle is as configured in DEFAULT_API_PRICING and reported by /docs/api#rate-limits and GET /api/v1/usage. CourtListener is a service of the Free Law Project, which does not sponsor or endorse this site.