CourtListener API · Rate limits · LawDiver API

CourtListener API rate limits — what they are, and why your app should not ship on them

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.

  • 5 → 60/min by default
  • No per-citation queue
  • Bulk upload with retries
  • Any commercial use

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.

CourtListener API rate limits at a glance

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.

WindowDefault authenticated limit
Per minute5
Per hour50
Per day125

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.

What the CourtListener API is — and how to authenticate to it

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.

How the rolling windows actually throttle you

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 three windows in plain terms

5 requests per minute

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.

50 requests per hour

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.

125 requests per day

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.

How CourtListener decides you are throttled

Three concurrent windows, one refusal

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.

Rolling-window refills, not a clock

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.

Anonymous is cheaper — for CourtListener

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.

Citation lookup has extra guards

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.

What a 429 actually contains — and what it does not

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".

The citation lookup API's two extra caps

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:

  • Capped at 250 citations resolved per request. Citations past 250 are still parsed and given normalized forms and offsets, but they are returned with status: 429 and do not resolve until a follow-up request starting at the next start_index.
  • Throttled on citation parse rate (60 valid citations per minute of window capacity) — a burst that extracts too many citations in too short a window is refused wholesale, with a 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.

Why shipping on a throttled CourtListener API is hard

Every one of these is documented, not speculative, and follows directly from the windows above.

You cannot backfill or sync at 125 calls a day

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.

Interactive research gets queues, not answers

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.

Citation coverage stalls where it matters most

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.

Paying for a higher cap does not remove the other limits

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.

Bulk dumps are snapshots, not a stream

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.

A LawDiver alternative when the throttle blocks shipping

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.

Frequently asked questions

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.

What are the CourtListener API rate limits?
By default CourtListener allows authenticated users 5 requests per minute, 50 per hour, and 125 per day, measured on rolling windows — every call needs its window's duration to fall off before capacity comes back. All three apply at once; the most restrictive one blocks you. Bulk data is free as quarterly snapshots. Higher limits are available by membership or commercial agreement with Free Law Project, and the mechanism is documented at /help/api/rest/ — read the canonical page on courtlistener.com before you plan around a number here.
What is a "rolling window" rate limit, and why does it matter?
A rolling window counts your last N requests looking back N minutes (or hours, or days), not the calls since midnight. There is no reset at a clock time. That is why a burst at 4:58 p.m. still counts at 5:30, why stopping for an hour does not empty the hour window, and why Retry-After on a 429 can be tens of thousands of seconds — the oldest call in the day window has not aged out yet.
Why is my CourtListener token throttled when I barely used the API?
The usual cause is unauthenticated attribution, not actual overuse. The header must be "Authorization: Token <your-token>" with the word Token included. Without it your calls count against the smaller anonymous throttle, your profile shows little usage, and the 429 persists. Try the same URL in a logged-in browser: if it works there but not in code, the token is not being sent as the API counts it. See How can I check my API usage on CourtListener for the Usage API that reads your live quota without spending it.
What are the CourtListener citation lookup API limits?
POST /api/rest/v4/citation-lookup/ has two extra caps beyond the general-per-minute/hour/day windows: at most 250 citations are looked up per request (additional ones are parsed but not resolved and need a follow-up starting at the next start_index), and the parser is throttled on citation volume per minute. A long brief needs to be split, and every second chunk is a separate throttled request. See Limitations & Throttles on the citation lookup help page.
Can I build a legal research product on CourtListener API data?
As an input, yes — CourtListener and the Harvard Caselaw Access Project build on which LawDiver also builds are the best free legal corpus in the world (accounted on /licenses). As the whole product, no: the free bulk sources are snapshots, entire classes of reporter citations are missing (Florida So. 3d from roughly 2019 is the documented case), good-law signals have not shipped, and 125 calls per day does not leave room for interactive research, let alone backfill. That is why LawDiver exists — the same cases, plus good-law, stats, and the authorities CourtListener does not resolve, available continuously rather than quarterly.
How does LawDiver compare to CourtListener for API rate limits?
By default LawDiver allows 60 requests per minute — twelve times CourtListener's 5 — with a 1,000-call rolling 24-hour budget readable at GET /api/v1/usage, and a bulk upload (POST /api/v1/bulk) that runs a JSON file of calls server-side with three attempts each and returns one combined document. There is no separate citation-lookup batch cap, and the data that makes those limits generous — more than 10 million opinions, 183 million in-text citations, and their authorities — is already in the corpus rather than being fetched from a third-party API at request time. Limits are a per-account setting for products that need more.
Is LawDiver a CourtListener alternative or replacement?
LawDiver complements CourtListener rather than replacing it. CourtListener is the free-data source and the nonprofit that maintains the bulk files that much of the industry — LawDiver included — builds on. LawDiver is the commercial data layer on top: the corpus kept current from court sites and GovInfo, good-law on every hit, statutes and agency authorities cite-checked in the same call, and an API licensed explicitly for any commercial purpose without the throttles that make CourtListener impractical as a product back end.
Where are the CourtListener API docs for rate limits and authentication?
The canonical reference is CourtListener's REST API docs at https://www.courtlistener.com/help/api/rest/ and the authenticated-only Usage API at /api/rest/v4/api-usage/ that tells you how close each window is. Authentication is Authorization: Token in an HTTP header. For LawDiver's own API, see /docs/api — authentication, every endpoint and field, error codes, idempotency, and rate/bulk semantics — and the marketing summary at /products/api.

Stop shaping the product around the throttle

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.