CourtListener API
Free CourtListener API: over 3,300 US courts, millions of opinions, PACER dockets and oral arguments. Read endpoints work without a key. Tested example included.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the CourtListener API?
CourtListener, run by the non-profit Free Law Project, offers a free REST API covering more than 3,300 US federal and state courts with millions of judicial opinions, PACER docket data, oral argument recordings and judge biographies. Several read endpoints, including the court list, work with no authentication.
American case law is unusually hard to access programmatically, and CourtListener exists to fix that. The courts endpoint alone is a reference dataset in its own right: 3,359 entries with start and end dates going back to the Supreme Court's founding on 24 September 1789, jurisdiction codes, citation strings and whether each court has an active opinion or oral argument scraper. Building any US legal tool starts with reconciling court identifiers, and this gives you a canonical list for free.
The API is Django REST Framework in its conventions: `count`, `next`, `previous` and `results` with `page_size` controlling the page, and every object exposing a `resource_uri` you can follow. Anonymous access covers the reference endpoints comfortably; heavier use of the opinion and docket endpoints wants a free token, and rate limits for anonymous callers are tighter. Note the timestamps carry real timezone offsets such as `-07:00` rather than being naive — a welcome change from most government feeds, and worth handling properly rather than truncating.
Quick facts
- Base URL
https://www.courtlistener.com/api/rest/v4- Authentication
- Reference endpoints such as `/courts/` work anonymously. A free token, obtained from a CourtListener account, raises limits and is expected for sustained use of the opinion and docket endpoints.
- Rate limit
- Anonymous requests are rate-limited per IP. Token holders get a substantially higher documented quota.
- Pricing
- Free. CourtListener is run by the non-profit Free Law Project; bulk data downloads are also offered.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the CourtListener API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. List US courts covered by CourtListener
GET https://www.courtlistener.com/api/rest/v4/courts/?page_size=1
curl 'https://www.courtlistener.com/api/rest/v4/courts/?page_size=1'const res = await fetch("https://www.courtlistener.com/api/rest/v4/courts/?page_size=1");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://www.courtlistener.com/api/rest/v4/courts/?page_size=1", timeout=20)
res.raise_for_status()
print(res.json()){
"count": 3359,
"next": "https://www.courtlistener.com/api/rest/v4/courts/?page=2&page_size=1",
"previous": null,
"results": [
{
"resource_uri": "https://www.courtlistener.com/api/rest/v4/courts/scotus/",
"id": "scotus",
"pacer_court_id": null,
"pacer_has_rss_feed": null,
"pacer_rss_entry_types": "",
"date_last_pacer_contact": null,
"fjc_court_id": "",
"date_modified": "2014-10-30T18:59:15.952000-07:00",
"in_use": true,
"has_opinion_scraper": true,
"has_oral_argument_scraper": true,
"position": 1.0,
"citation_string": "SCOTUS",
"short_name": "Supreme Court",
"full_name": "Supreme Court of the United States",
"url": "http://supremecourt.gov/",
"start_date": "1789-09-24",
"end_date": null,
"jurisdiction": "F",
"parent_court": null,
"appeals_to": []
},
{
"resource_uri": "https://www.courtlistener.com/api/rest/v4/courts/ca1/",
"id": "ca1",
"pacer_court_id": 1,
"pacer_has_rss_feed": false,
"pacer_rss_entry_types": "",
"date_last_pacer_contact": null,
"fjc_court_id": "1",
"date_modified": "2023-02-22T08:08:13.910202-08:00",
"in_use": true,
"has_opinion_scraper": true,
"has_oral_argument_scraper": true,
"position": 101.0,
"citation_string": "1st Cir.",
"short_name": "First Circuit",
"full_name": "Court of Appeals for the First Circuit",
"url": "http://www.ca1.uscourts.gov/",
"start_date": "1891-03-03",
"end_date": null,
"jurParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
page_size | query | Optional | Results per page. 1 |
page | query | Optional | Page number; `next` in the response gives the ready-made URL. 2 |
jurisdiction | query | Optional | Filter by jurisdiction code — `F` federal, `S` state and others. F |
in_use | query | Optional | Restrict to courts CourtListener actively covers. true |
order_by | query | Optional | Sort field, prefixed with `-` for descending. -date_modified |
Response fields
countinteger- Total matching records — 3,359 courts unfiltered.
next / previousstring- Ready-made pagination URLs; follow them rather than building your own.
results[].idstring- Court identifier such as `scotus` or `ca1`. This is the key used across the whole API.
results[].full_name / short_name / citation_stringstring- Formal name, short name and the abbreviation used in citations.
results[].jurisdictionstring- `F` for federal, `S` for state, plus codes for specialised and territorial courts.
results[].start_date / end_datestring- When the court was established and, for defunct courts, abolished.
results[].has_opinion_scraper / has_oral_argument_scraperboolean- Whether CourtListener actively collects opinions or audio from this court.
results[].pacer_court_idinteger or null- PACER identifier where the court is on the federal electronic filing system.
What you can build with the CourtListener API
- Build a canonical US court reference table
- Search and retrieve federal and state judicial opinions
- Track new filings on a PACER docket
- Link case citations to full opinion text
- Identify which courts have machine-readable opinion coverage
Common errors and how to fix them
429
Anonymous rate limiting.
Fix: Slow down and cache. A free account token raises the quota considerably.
401 or 403 on some endpoints
Certain docket and alert endpoints require a token.
Fix: Reference endpoints such as `/courts/` are open; obtain a token for sustained opinion and docket work.
Timestamps parsed as UTC
They carry real offsets such as `-07:00`.
Fix: Parse with an offset-aware library instead of truncating the string.
Pagination drifts
Records shifted between pages while you were walking them.
Fix: Follow the `next` URL and add a stable `order_by` rather than computing page numbers.
CourtListener API — frequently asked questions
Is the CourtListener API free?
Yes. It is run by the non-profit Free Law Project, and reference endpoints such as the court list work anonymously. A free account token raises rate limits for heavier use.
How many courts does it cover?
3,359 at the time of testing, spanning federal, state, territorial and specialised courts, with start dates going back to the Supreme Court's founding in 1789.
Can I get PACER data through it?
Yes, for dockets CourtListener has acquired through RECAP, its crowd-sourced PACER archive. It is not a live PACER proxy — coverage depends on what contributors have purchased and donated.
What does has_opinion_scraper mean?
That CourtListener runs an automated collector against that court's published opinions. Courts without one may still have documents from bulk imports, but they will not be updated continuously.
Tools that pair with this API
JSON to CSV Converter
Convert a JSON array of objects to CSV online. Automatic column headers from the union of all keys, delimiter choice and proper quoting — all in-browser.
JSON Path Finder
Evaluate a dot/bracket path against your JSON and list every leaf path for discovery. Free online JSON path finder that runs 100% in your browser.
Text Compare
Compare two texts online free and highlight every difference. A private text comparison tool that finds matches and changes right in your browser.
CourtListener is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.