Search US court opinions, federal dockets, judges, citations, and oral arguments via CourtListener.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Retrieve the citation network for an opinion cluster. Supports two directions: "cited_by" (opinions that cite this one — measures precedential influence) and "citing" (opinions this one cites — reveals the authority chain relied on). This is the primary tool for tracing legal precedent chains. Note: the free tier supports shallow traversal — following 1–2 hops of a single case is practical; deep multi-hop analysis burns through the daily budget quickly.
Opinion cluster ID to retrieve citations for. Obtain from courtlistener_search_opinions or courtlistener_lookup_citation.
Filter results to a specific court (e.g., "scotus", "ca9"). Applies to both directions.
Pagination cursor from next_cursor. For citing, a nonnegative safe decimal integer offset; for cited_by, an opaque upstream token.
"cited_by" (default): opinions that cite this one — measures precedential influence and downstream adoption. "citing": opinions this one cites — reveals the authority chain the court relied on.
Positive requested size (default 20), bounded to 20. cited_by has an upstream minimum of 20; citing slices at most 20 cited IDs by the bounded size before filtering. Full upstream pages are preserved. Final or filtered pages can be smaller or empty; retain next_cursor to continue. page_sizing distinguishes requested, bounded and actual sizes. A normal call costs three requests plus extra variant pages.
Limit to citations filed after this date (ISO 8601). For "cited_by", useful for "how has this precedent been applied recently?"
Retrieve the citation network for an opinion cluster. Supports two directions: "cited_by" (opinions that cite this one — measures precedential influence) and "citing" (opinions this one cites — reveals the authority chain relied on). This is the primary tool for tracing legal precedent chains. Note: the free tier supports shallow traversal — following 1–2 hops of a single case is practical; deep multi-hop analysis burns through the daily budget quickly.
| Argument | Type | Description |
|---|---|---|
| court | string | Filter results to a specific court (e.g., "scotus", "ca9"). Applies to both directions. |
| cursor | string | Pagination cursor from next_cursor. For citing, a nonnegative safe decimal integer offset; for cited_by, an opaque upstream token. |
| direction | string | "cited_by" (default): opinions that cite this one — measures precedential influence and downstream adoption. "citing": opinions this one cites — reveals the authority chain the court relied on. |
| page_size | integer | Positive requested size (default 20), bounded to 20. cited_by has an upstream minimum of 20; citing slices at most 20 cited IDs by the bounded size before filtering. Full upstream pages are preserved. Final or filtered pages can be smaller or empty; retain next_cursor to continue. page_sizing distinguishes requested, bounded and actual sizes. A normal call costs three requests plus extra variant pages. |
| cluster_id* | integer | Opinion cluster ID to retrieve citations for. Obtain from courtlistener_search_opinions or courtlistener_lookup_citation. |
| filed_after | string | Limit to citations filed after this date (ISO 8601). For "cited_by", useful for "how has this precedent been applied recently?" |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"cluster_id"
],
"properties": {
"court": {
"type": "string",
"description": "Filter results to a specific court (e.g., \"scotus\", \"ca9\"). Applies to both directions."
},
"cursor": {
"type": "string",
"description": "Pagination cursor from next_cursor. For citing, a nonnegative safe decimal integer offset; for cited_by, an opaque upstream token."
},
"direction": {
"enum": [
"citing",
"cited_by"
],
"type": "string",
"default": "cited_by",
"description": "\"cited_by\" (default): opinions that cite this one — measures precedential influence and downstream adoption. \"citing\": opinions this one cites — reveals the authority chain the court relied on."
},
"page_size": {
"type": "integer",
"default": 20,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Positive requested size (default 20), bounded to 20. cited_by has an upstream minimum of 20; citing slices at most 20 cited IDs by the bounded size before filtering. Full upstream pages are preserved. Final or filtered pages can be smaller or empty; retain next_cursor to continue. page_sizing distinguishes requested, bounded and actual sizes. A normal call costs three requests plus extra variant pages."
},
"cluster_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Opinion cluster ID to retrieve citations for. Obtain from courtlistener_search_opinions or courtlistener_lookup_citation."
},
"filed_after": {
"type": "string",
"description": "Limit to citations filed after this date (ISO 8601). For \"cited_by\", useful for \"how has this precedent been applied recently?\""
}
},
"additionalProperties": false
}Fetch full docket metadata and entry list for a single federal case by docket ID. Returns all available docket entries with document availability status. Documents with is_available=true have a RECAP-stored copy; others require a PACER account. Obtain docket IDs from courtlistener_search_dockets or from opinion results.
| Argument | Type | Description |
|---|---|---|
| docket_id* | integer | Docket ID from a search result's docket_id field or from an opinion cluster result. |
| entries_page | integer | Page of docket entries to fetch (1-indexed). Docket entries are page-paginated at 20 per page; pass the next_cursor from a previous response here to page through large cases. |
| entries_page_size | integer | Requested docket entries per page. NOTE: CourtListener ignores this value — /docket-entries/ always returns a fixed 20-entry page regardless of what is passed. Use entries_page to reach entries beyond the first 20 (large cases can have hundreds). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"docket_id"
],
"properties": {
"docket_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Docket ID from a search result's docket_id field or from an opinion cluster result."
},
"entries_page": {
"type": "integer",
"default": 1,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page of docket entries to fetch (1-indexed). Docket entries are page-paginated at 20 per page; pass the next_cursor from a previous response here to page through large cases."
},
"entries_page_size": {
"type": "integer",
"default": 20,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Requested docket entries per page. NOTE: CourtListener ignores this value — /docket-entries/ always returns a fixed 20-entry page regardless of what is passed. Use entries_page to reach entries beyond the first 20 (large cases can have hundreds)."
}
},
"additionalProperties": false
}Fetch a judicial financial disclosure by disclosure_id from courtlistener_search_financial_disclosures. Returns metadata, counts and typed line items with coded values decoded to dollar ranges. Select categories or omit for all. Oversized selections return outline then page responses; continue retrieval.next_cursor as cursor with the unchanged ID/categories selection until null. Large individual row fields remain recoverable through text_chunks.
| Argument | Type | Description |
|---|---|---|
| cursor | string | Retrieval next_cursor from the previous response. Repeat the original ID and sections/categories selection unchanged; omit to start. |
| categories | array | Line-item categories to select. Omit for all. Oversized selections page; keep this selection unchanged while following cursor. |
| disclosure_id* | integer | Financial disclosure ID — the disclosure_id field from a courtlistener_search_financial_disclosures result. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"disclosure_id"
],
"properties": {
"cursor": {
"type": "string",
"maxLength": 1024,
"description": "Retrieval next_cursor from the previous response. Repeat the original ID and sections/categories selection unchanged; omit to start."
},
"categories": {
"type": "array",
"items": {
"enum": [
"investments",
"debts",
"positions",
"reimbursements",
"non_investment_incomes",
"spouse_incomes",
"agreements",
"gifts"
],
"type": "string"
},
"description": "Line-item categories to select. Omit for all. Oversized selections page; keep this selection unchanged while following cursor."
},
"disclosure_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Financial disclosure ID — the disclosure_id field from a courtlistener_search_financial_disclosures result."
}
},
"additionalProperties": false
}Fetch full biographical profile for a single judge: positions on record — judicial appointments across all courts plus non-judicial roles — education, political affiliations, and ABA ratings. The position list is paginated upstream and walked under a page bound; the response reports whether it was truncated. Obtain person IDs from courtlistener_search_judges results.
| Argument | Type | Description |
|---|---|---|
| person_id* | integer | Judge person ID from a search result's person_id field. Identifies a specific judge across all courts they have served on. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"person_id"
],
"properties": {
"person_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Judge person ID from a search result's person_id field. Identifies a specific judge across all courts they have served on."
}
},
"additionalProperties": false
}Fetch text and metadata for an opinion cluster by cluster ID. Returns majority, concurrence and dissent variants with raw HTML and readable plain text, variants_completion for source coverage, and docket_enrichment. Oversized selections return outline then page responses; continue retrieval.next_cursor as cursor with the unchanged ID/sections selection until null. Obtain cluster IDs from courtlistener_search_opinions, courtlistener_lookup_citation, or docket results.
| Argument | Type | Description |
|---|---|---|
| cursor | string | Retrieval next_cursor from the previous response. Repeat the original ID and sections/categories selection unchanged; omit to start. |
| sections | array | Opinion variant identifiers to select (e.g. ["opinion_12345"]). Omit for all fetched variants. Oversized selections page; keep this selection unchanged while following cursor. |
| cluster_id* | integer | Opinion cluster ID — identifies a case decision and groups all opinion variants (majority, concurrence, dissent). Obtain from courtlistener_search_opinions, courtlistener_lookup_citation, or from docket results that link to opinions. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"cluster_id"
],
"properties": {
"cursor": {
"type": "string",
"maxLength": 1024,
"description": "Retrieval next_cursor from the previous response. Repeat the original ID and sections/categories selection unchanged; omit to start."
},
"sections": {
"type": "array",
"items": {
"type": "string"
},
"description": "Opinion variant identifiers to select (e.g. [\"opinion_12345\"]). Omit for all fetched variants. Oversized selections page; keep this selection unchanged while following cursor."
},
"cluster_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Opinion cluster ID — identifies a case decision and groups all opinion variants (majority, concurrence, dissent). Obtain from courtlistener_search_opinions, courtlistener_lookup_citation, or from docket results that link to opinions."
}
},
"additionalProperties": false
}Fetch an oral argument recording by audio_id from courtlistener_search_oral_arguments. Returns case metadata, panel IDs, duration, MP3 URL, docket and available transcript. Oversized text or metadata returns outline then page responses; continue retrieval.next_cursor as cursor with the unchanged ID/sections selection until null. The argument date comes from search or the linked docket.
| Argument | Type | Description |
|---|---|---|
| id* | integer | Audio recording ID — the audio_id field from a courtlistener_search_oral_arguments result. |
| cursor | string | Retrieval next_cursor from the previous response. Repeat the original ID and sections/categories selection unchanged; omit to start. |
| sections | array | Selected record fields. Metadata is always selected; a nonempty selection omitting transcript excludes it. Omit for the whole record. Oversized selections page; keep this selection unchanged while following cursor. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Audio recording ID — the audio_id field from a courtlistener_search_oral_arguments result."
},
"cursor": {
"type": "string",
"maxLength": 1024,
"description": "Retrieval next_cursor from the previous response. Repeat the original ID and sections/categories selection unchanged; omit to start."
},
"sections": {
"type": "array",
"items": {
"type": "string"
},
"description": "Selected record fields. Metadata is always selected; a nonempty selection omitting transcript excludes it. Omit for the whole record. Oversized selections page; keep this selection unchanged while following cursor."
}
},
"additionalProperties": false
}Fetch a page of parties and their attorneys of record for a RECAP federal docket by docket ID. Returns each party's name, role (Plaintiff, Defendant, Petitioner, Respondent, etc.), and their attorneys with contact information, scoped to this docket. Costs one party request plus up to five attorney roster requests. A later roster page blocked by the local request budget returns fetched detail with capped resolution, unresolved IDs, and the remaining roster cursor. Obtain docket IDs from courtlistener_search_dockets or courtlistener_get_docket.
| Argument | Type | Description |
|---|---|---|
| cursor | string | Pagination cursor from a previous response's next_cursor field. Omit for the first page. This is an opaque token, not a page number — CourtListener cursor-paginates this endpoint, so a numeric value selects nothing and re-serves the first page. |
| docket_id* | integer | Docket ID from a courtlistener_search_dockets or courtlistener_get_docket result's docket_id field. |
| page_size | integer | Positive requested party page size (default 10), bounded to 10 before retrieval. CourtListener uses fixed 20-row pages and ignores this request; final pages can be smaller. page_sizing reports requested, bounded and actual sizes. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"docket_id"
],
"properties": {
"cursor": {
"type": "string",
"description": "Pagination cursor from a previous response's next_cursor field. Omit for the first page. This is an opaque token, not a page number — CourtListener cursor-paginates this endpoint, so a numeric value selects nothing and re-serves the first page."
},
"docket_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Docket ID from a courtlistener_search_dockets or courtlistener_get_docket result's docket_id field."
},
"page_size": {
"type": "integer",
"default": 10,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Positive requested party page size (default 10), bounded to 10 before retrieval. CourtListener uses fixed 20-row pages and ignores this request; final pages can be smaller. page_sizing reports requested, bounded and actual sizes."
}
},
"additionalProperties": false
}Resolve legal citations (e.g., "410 U.S. 113", "93 S. Ct. 705") to opinion cluster IDs and case metadata. Enables workflows that start from a known citation rather than a search query. CourtListener extracts every citation it finds in the submitted text, so passing a passage returns one entry per citation, each with its own resolution status — an unresolved or ambiguous citation is reported in the results, not raised as an error. Supports standard US reporter formats. Costs one request against CourtListener's per-citation quota, plus one ordinary request per distinct docket whose court is resolved — max_court_lookups bounds that second half (default 4, set 0 to skip court resolution entirely). CourtListener meters this endpoint by citations submitted rather than by call, so a long passage spends proportionally more of that quota. Requires authentication — uses the CourtListener /citation-lookup/ endpoint.
| Argument | Type | Description |
|---|---|---|
| citation* | string | Text to extract citations from — normally a single citation (e.g., "410 U.S. 113", "347 U.S. 483", "93 S. Ct. 705"), but any passage works and every citation in it is resolved. Supports standard reporter formats. Up to 64000 characters, which is CourtListener's own ceiling; a longer passage is rejected here rather than spending a request to be refused upstream. |
| max_court_lookups | integer | How many distinct dockets this call may spend a request on to resolve cluster courts. The lookup itself is metered separately by CourtListener (per citation submitted), so this budget is drawn entirely from the ordinary per-request allowance — published free tier 5/min, 50/hour, 125/day, varying by token tier. 0 skips court resolution and costs nothing beyond the lookup; 20 is the ceiling. Clusters past the budget come back with court null and court_resolution "over_budget". |
List courts with optional filtering by jurisdiction type, active/inactive status, and scraper coverage. Primarily used to discover court IDs for use in search and filter parameters across all other courtlistener tools. Defaults to the active bench — the courts CourtListener still scrapes; pass status:'inactive' for historical courts or status:'any' for every court. A bundled snapshot returns the complete list of matching court IDs without paging whenever the filtered set fits the response budget, which covers the default bench and every jurisdiction filter. Full court records — names, citation strings, scraper status — come live from CourtListener at a fixed 20 rows per page, so pull those only when a court ID alone is not enough.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (1-indexed). CourtListener serves /courts/ at a fixed 20 rows per page and ignores any requested page size, so the number of pages is the enrichment totalCount divided by 20 — there is no way to pull a larger page. Pass the next_cursor from a previous response here to walk them one call at a time. |
| status | string | Which bench to return. 'active' (default) returns only courts CourtListener currently scrapes; 'inactive' returns only the historical and defunct courts it no longer scrapes; 'any' returns both. The two filtered sets are disjoint, so 'any' is the only value that reaches the whole list — but reaching all of it means paging, one call per 20 courts, and the inactive bench is several times larger than the active one. Prefer the narrowest value that answers the question, and narrow with jurisdiction rather than paging the full list. |
| jurisdiction | string | Jurisdiction type — CourtListener's own court classification, one code per court: F=Federal Appellate, FD=Federal District, FB=Federal Bankruptcy, FBP=Federal Bankruptcy Panel, FS=Federal Special, S=State Supreme, SA=State Appellate, ST=State Trial, SS=State Special, SAG=State Attorney General, TRS=Tribal Supreme, TRA=Tribal Appellate, TRT=Tribal Trial, TRX=Tribal Special, TS=Territory Supreme, TA=Territory Appellate, TT=Territory Trial, TSP=Territory Special, MA=Military Appellate, MT=Military Trial, C=Committee, I=International. Omit to list all. SCOTUS and the numbered circuits are F; USITC and FISC are FS. Upstream's Testing code is not offered here: /courts/ excludes testing courts from every response, so a filter on it can only ever return nothing. Accepted but matching no court as of the 2026-07-30 snapshot: TSP, MT. Courts whose stored jurisdiction is not one of these codes (njcirctsussex, ohctapp1) are unreachable through this filter at any value — the value they store is not one the filter accepts. Pass those ids straight to the tool that needs them, or list with no jurisdiction filter. |
Search RECAP federal court dockets. Query terms match case name, docket number, party, and attorney names; filters narrow by party name, court, and filing date. RECAP is a crowd-sourced mirror of PACER (the federal court filing system) — coverage varies by court and date. Returns docket metadata with the parties, attorneys, and firms of record, plus up to 3 sample document entries per docket. Use courtlistener_lookup_courts to find court IDs.
| Argument | Type | Description |
|---|---|---|
| q* | string | Query terms matched against case name, docket number, party names, and attorney names. Example: "Apple Inc patent infringement". |
| court | string | Filter to a specific federal court ID (e.g., "dnd", "cacd", "deb" for Delaware Bankruptcy). Use courtlistener_lookup_courts to find court IDs. |
| cursor | string | Pagination cursor from a previous response's next_cursor field. |
| page_size | integer | Positive requested page size (default 20), bounded to 20. Upstream search has a 20-row minimum; empty and final pages can be smaller. Full pages and continuation are preserved; page_sizing reports actual sizes. |
| party_name | string | Filter to dockets listing a specific party by name — applied in addition to (AND with) the q query. More precise than including party names in q when the party name is known. |
| filed_after |
Search federal judicial financial disclosure filings — the annual reports judges file on investments, gifts, debts, outside positions, and income. Filter by judge (person ID from courtlistener_search_judges) and/or filing year; the year filter is applied to the fetched page only (CourtListener has no server-side year filter), so page through with cursor to reach a judge's filings for a year that fall on later pages. Returns per-filing metadata, category counts, itemized gifts, and a link to the source PDF. Line-item investments (often hundreds per filing, with coded values) are summarized as counts; the linked PDF carries the full itemization. Use this for judicial-ethics and recusal research after identifying a judge's person ID.
| Argument | Type | Description |
|---|---|---|
| year | integer | Filing year to filter by (e.g., 2022). Applied client-side to the fetched page only — CourtListener rejects a server-side year param, so filings for this year on later pages are not included. When a page has no match for the year but more pages remain, next_cursor is returned; pass it as cursor to check the next page. Omit to return all years on the page. |
| cursor | string | Pagination cursor from a previous response's next_cursor field. |
| judge_id | integer | Person ID of the judge whose disclosures to return — obtain from courtlistener_search_judges (the person_id field). Omit to browse across all filers. |
| page_size | integer | Positive requested page size (default 20), bounded to 20. Upstream has a minimum of 20; final pages and page-local year filtering can return fewer. Full fetched pages and continuation are preserved; page_sizing reports returned sizes. |
Search judge/person records by name, appointing president, court, political affiliation, or demographic. Returns biographical data, current position, and appointment summary. Use courtlistener_get_judge for full appointment history and education records.
| Argument | Type | Description |
|---|---|---|
| q* | string | Search query — judge name, court, city, or relevant keywords. |
| court | string | Filter to judges who have held a position at this court (e.g., "scotus", "ca9"). Use court_id strings from courtlistener_lookup_courts. |
| cursor | string | Pagination cursor from a previous response's next_cursor field. |
| appointer | string | Filter by appointing president's last name (e.g., "Obama", "Trump", "Biden"). Matches against the appointer field in position records. |
| page_size | integer | Positive requested page size (default 20), bounded to 20. Upstream search has a 20-row minimum; empty and final pages can be smaller. Full pages and continuation are preserved; page_sizing reports actual sizes. |
| political_affiliation | string | Filter by political affiliation: d=Democrat, r=Republican, i=Independent, l=Libertarian, g=Green Party, u=Unknown/unconfirmed. Based on party of the appointing president or election affiliation. |
Full-text search across 9M+ written US court opinions with field-level filtering. Returns opinion cluster summaries with case metadata, citations, matched text snippets, and the individual opinion variants filed in each case. Supports CourtListener field syntax (caseName:"roe v wade", court_id:scotus, judge:"Alito") and boolean operators (AND, OR, NOT). Use courtlistener_lookup_courts to find court IDs. CourtListener publishes free-tier limits of 5 req/min, 50/hr, 125/day; actual limits vary by token tier.
| Argument | Type | Description |
|---|---|---|
| q* | string | Full-text query. Supports field syntax (caseName:"roe v wade", court_id:scotus, judge:"Alito") and boolean operators (AND, OR, NOT). Use plain English for semantic-style queries or legal citations. |
| court | string | Filter to a specific court by court ID (e.g., "scotus", "ca9", "nyed"). Use courtlistener_lookup_courts to find court IDs. |
| cursor | string | Pagination cursor from a previous response's next_cursor field. Omit for the first page. |
| status | string | Opinion publication status. "Published": precedential. "Unpublished": not citable as precedent in most jurisdictions. "Errata": corrections. "Separate": separate opinion filed outside main cluster. "In-chambers": single-justice order. "Relating-to": companion or related-case order. Omit to use CourtListener’s Published default. |
| order_by | string | Result ordering. "score desc" (default) ranks by relevance. "citeCount desc" surfaces most-cited opinions first. |
Search appellate oral argument audio recordings — the largest public collection of oral argument audio. Returns recording metadata with two direct MP3 links per result (download_url at the originating court, local_path for CourtListener's durable copy), panel judge IDs, and transcript snippets where available. Panel judge IDs can be passed to courtlistener_get_judge for biographical context.
| Argument | Type | Description |
|---|---|---|
| q* | string | Query terms matched against case name and transcribed argument text (where available). |
| court | string | Filter to a specific court (e.g., "scotus", "ca9"). |
| cursor | string | Pagination cursor from a previous response's next_cursor field. |
| page_size | integer | Positive requested page size (default 20), bounded to 20. Upstream search has a 20-row minimum; empty and final pages can be smaller. Full pages and continuation are preserved; page_sizing reports actual sizes. |
| argued_after | string | Earliest date the case was argued (ISO 8601) — filters by argument date, not publication date. |
| argued_before | string | Latest date the case was argued (ISO 8601). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"citation"
],
"properties": {
"citation": {
"type": "string",
"description": "Text to extract citations from — normally a single citation (e.g., \"410 U.S. 113\", \"347 U.S. 483\", \"93 S. Ct. 705\"), but any passage works and every citation in it is resolved. Supports standard reporter formats. Up to 64000 characters, which is CourtListener's own ceiling; a longer passage is rejected here rather than spending a request to be refused upstream."
},
"max_court_lookups": {
"type": "integer",
"default": 4,
"maximum": 20,
"minimum": 0,
"description": "How many distinct dockets this call may spend a request on to resolve cluster courts. The lookup itself is metered separately by CourtListener (per citation submitted), so this budget is drawn entirely from the ordinary per-request allowance — published free tier 5/min, 50/hour, 125/day, varying by token tier. 0 skips court resolution and costs nothing beyond the lookup; 20 is the ceiling. Clusters past the budget come back with court null and court_resolution \"over_budget\"."
}
},
"additionalProperties": false
}| has_opinion_scraper | boolean | Filter to courts with active opinion scraping. Useful when planning search queries — courts without scrapers have sparse coverage. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"default": 1,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number (1-indexed). CourtListener serves /courts/ at a fixed 20 rows per page and ignores any requested page size, so the number of pages is the enrichment totalCount divided by 20 — there is no way to pull a larger page. Pass the next_cursor from a previous response here to walk them one call at a time."
},
"status": {
"enum": [
"active",
"inactive",
"any"
],
"type": "string",
"default": "active",
"description": "Which bench to return. 'active' (default) returns only courts CourtListener currently scrapes; 'inactive' returns only the historical and defunct courts it no longer scrapes; 'any' returns both. The two filtered sets are disjoint, so 'any' is the only value that reaches the whole list — but reaching all of it means paging, one call per 20 courts, and the inactive bench is several times larger than the active one. Prefer the narrowest value that answers the question, and narrow with jurisdiction rather than paging the full list."
},
"jurisdiction": {
"enum": [
"F",
"FD",
"FB",
"FBP",
"FS",
"S",
"SA",
"ST",
"SS",
"SAG",
"TRS",
"TRA",
"TRT",
"TRX",
"TS",
"TA",
"TT",
"TSP",
"MA",
"MT",
"C",
"I"
],
"type": "string",
"description": "Jurisdiction type — CourtListener's own court classification, one code per court: F=Federal Appellate, FD=Federal District, FB=Federal Bankruptcy, FBP=Federal Bankruptcy Panel, FS=Federal Special, S=State Supreme, SA=State Appellate, ST=State Trial, SS=State Special, SAG=State Attorney General, TRS=Tribal Supreme, TRA=Tribal Appellate, TRT=Tribal Trial, TRX=Tribal Special, TS=Territory Supreme, TA=Territory Appellate, TT=Territory Trial, TSP=Territory Special, MA=Military Appellate, MT=Military Trial, C=Committee, I=International. Omit to list all. SCOTUS and the numbered circuits are F; USITC and FISC are FS. Upstream's Testing code is not offered here: /courts/ excludes testing courts from every response, so a filter on it can only ever return nothing. Accepted but matching no court as of the 2026-07-30 snapshot: TSP, MT. Courts whose stored jurisdiction is not one of these codes (njcirctsussex, ohctapp1) are unreachable through this filter at any value — the value they store is not one the filter accepts. Pass those ids straight to the tool that needs them, or list with no jurisdiction filter."
},
"has_opinion_scraper": {
"type": "boolean",
"description": "Filter to courts with active opinion scraping. Useful when planning search queries — courts without scrapers have sparse coverage."
}
},
"additionalProperties": false
}| string |
| Earliest case filing date (ISO 8601). |
| filed_before | string | Latest case filing date (ISO 8601). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"description": "Query terms matched against case name, docket number, party names, and attorney names. Example: \"Apple Inc patent infringement\"."
},
"court": {
"type": "string",
"description": "Filter to a specific federal court ID (e.g., \"dnd\", \"cacd\", \"deb\" for Delaware Bankruptcy). Use courtlistener_lookup_courts to find court IDs."
},
"cursor": {
"type": "string",
"description": "Pagination cursor from a previous response's next_cursor field."
},
"page_size": {
"type": "integer",
"default": 20,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Positive requested page size (default 20), bounded to 20. Upstream search has a 20-row minimum; empty and final pages can be smaller. Full pages and continuation are preserved; page_sizing reports actual sizes."
},
"party_name": {
"type": "string",
"description": "Filter to dockets listing a specific party by name — applied in addition to (AND with) the q query. More precise than including party names in q when the party name is known."
},
"filed_after": {
"type": "string",
"description": "Earliest case filing date (ISO 8601)."
},
"filed_before": {
"type": "string",
"description": "Latest case filing date (ISO 8601)."
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"year": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Filing year to filter by (e.g., 2022). Applied client-side to the fetched page only — CourtListener rejects a server-side year param, so filings for this year on later pages are not included. When a page has no match for the year but more pages remain, next_cursor is returned; pass it as cursor to check the next page. Omit to return all years on the page."
},
"cursor": {
"type": "string",
"description": "Pagination cursor from a previous response's next_cursor field."
},
"judge_id": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Person ID of the judge whose disclosures to return — obtain from courtlistener_search_judges (the person_id field). Omit to browse across all filers."
},
"page_size": {
"type": "integer",
"default": 20,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Positive requested page size (default 20), bounded to 20. Upstream has a minimum of 20; final pages and page-local year filtering can return fewer. Full fetched pages and continuation are preserved; page_sizing reports returned sizes."
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"description": "Search query — judge name, court, city, or relevant keywords."
},
"court": {
"type": "string",
"description": "Filter to judges who have held a position at this court (e.g., \"scotus\", \"ca9\"). Use court_id strings from courtlistener_lookup_courts."
},
"cursor": {
"type": "string",
"description": "Pagination cursor from a previous response's next_cursor field."
},
"appointer": {
"type": "string",
"description": "Filter by appointing president's last name (e.g., \"Obama\", \"Trump\", \"Biden\"). Matches against the appointer field in position records."
},
"page_size": {
"type": "integer",
"default": 20,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Positive requested page size (default 20), bounded to 20. Upstream search has a 20-row minimum; empty and final pages can be smaller. Full pages and continuation are preserved; page_sizing reports actual sizes."
},
"political_affiliation": {
"enum": [
"d",
"r",
"i",
"l",
"g",
"u"
],
"type": "string",
"description": "Filter by political affiliation: d=Democrat, r=Republican, i=Independent, l=Libertarian, g=Green Party, u=Unknown/unconfirmed. Based on party of the appointing president or election affiliation."
}
},
"additionalProperties": false
}| page_size | integer | Positive requested page size (default 20), bounded to 20 before retrieval. Upstream search has a 20-row minimum; empty and final pages can be smaller. Full upstream pages and continuation are preserved; page_sizing reports requested, bounded and actual sizes. |
| filed_after | string | Earliest filing date (ISO 8601, e.g., "2020-01-01"). Narrows search to opinions filed on or after this date. |
| filed_before | string | Latest filing date (ISO 8601). Narrows search to opinions filed before or on this date. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"description": "Full-text query. Supports field syntax (caseName:\"roe v wade\", court_id:scotus, judge:\"Alito\") and boolean operators (AND, OR, NOT). Use plain English for semantic-style queries or legal citations."
},
"court": {
"type": "string",
"description": "Filter to a specific court by court ID (e.g., \"scotus\", \"ca9\", \"nyed\"). Use courtlistener_lookup_courts to find court IDs."
},
"cursor": {
"type": "string",
"description": "Pagination cursor from a previous response's next_cursor field. Omit for the first page."
},
"status": {
"enum": [
"Published",
"Unpublished",
"Errata",
"Separate",
"In-chambers",
"Relating-to",
"Unknown"
],
"type": "string",
"description": "Opinion publication status. \"Published\": precedential. \"Unpublished\": not citable as precedent in most jurisdictions. \"Errata\": corrections. \"Separate\": separate opinion filed outside main cluster. \"In-chambers\": single-justice order. \"Relating-to\": companion or related-case order. Omit to use CourtListener’s Published default."
},
"order_by": {
"enum": [
"score desc",
"dateFiled desc",
"dateFiled asc",
"citeCount desc"
],
"type": "string",
"default": "score desc",
"description": "Result ordering. \"score desc\" (default) ranks by relevance. \"citeCount desc\" surfaces most-cited opinions first."
},
"page_size": {
"type": "integer",
"default": 20,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Positive requested page size (default 20), bounded to 20 before retrieval. Upstream search has a 20-row minimum; empty and final pages can be smaller. Full upstream pages and continuation are preserved; page_sizing reports requested, bounded and actual sizes."
},
"filed_after": {
"type": "string",
"description": "Earliest filing date (ISO 8601, e.g., \"2020-01-01\"). Narrows search to opinions filed on or after this date."
},
"filed_before": {
"type": "string",
"description": "Latest filing date (ISO 8601). Narrows search to opinions filed before or on this date."
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"description": "Query terms matched against case name and transcribed argument text (where available)."
},
"court": {
"type": "string",
"description": "Filter to a specific court (e.g., \"scotus\", \"ca9\")."
},
"cursor": {
"type": "string",
"description": "Pagination cursor from a previous response's next_cursor field."
},
"page_size": {
"type": "integer",
"default": 20,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Positive requested page size (default 20), bounded to 20. Upstream search has a 20-row minimum; empty and final pages can be smaller. Full pages and continuation are preserved; page_sizing reports actual sizes."
},
"argued_after": {
"type": "string",
"description": "Earliest date the case was argued (ISO 8601) — filters by argument date, not publication date."
},
"argued_before": {
"type": "string",
"description": "Latest date the case was argued (ISO 8601)."
}
},
"additionalProperties": false
}