CourtListener API endpoint
Lists CourtListener's anonymous public court directory. Provide court_id to retrieve one court. page is used only for directory browsing and is 1-indexed. The endpoint does not retrieve dockets, opinions, judges, or account data.
/courtlistener/courtsLists CourtListener's anonymous public court directory, or returns one court when court_id is supplied. It returns court reference metadata only; dockets, opinion text, judges, alerts, and account data are not included.
Query parameters:
court_id (optional) — CourtListener court identifier, for example scotus. When provided, the response contains one court and ignores page.page (optional) — 1-indexed directory page. Defaults to 1; allowed values are 1 through 100000.Notable response behavior: use next_page when supplied to continue directory pagination. A valid court identifier that is unavailable upstream returns an upstream error.
| Field | Filled in, of 1 checked | Values in the sample |
|---|---|---|
| id | 1 | |
| short_name | 1 | |
| full_name | 1 | |
| url | 1 | supremecourt.gov |
| citation | 1 | |
| position | 1 | 1 |
| in_use | 1 | true in 1 of 1 |
| has_opinion_scraper | 1 | true in 1 of 1 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| court_id | string | No | CourtListener court identifier | scotus | |
| page | integer | No | Directory page, 1-indexed Minimum: 1. | 1 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/courtlistener/courts?page=1" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"total": 1,
"courts": [
{
"id": "scotus",
"short_name": "Supreme Court",
"full_name": "Supreme Court of the United States",
"citation": "SCOTUS",
"in_use": true,
"has_opinion_scraper": true
}
]
}
}Request schema
No body schema
Response schema
#/definitions/courtlistener.courtsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | courtlistener.CourtsResponse | No | ||||
| data.courts | array | No | ||||
| data.courts[].citation | string | No | ||||
| data.courts[].full_name | string | No | ||||
| data.courts[].has_opinion_scraper | boolean | No | ||||
| data.courts[].id | string | No | ||||
| data.courts[].in_use | boolean | No | ||||
| data.courts[].position | number | No | ||||
| data.courts[].short_name | string | No | ||||
| data.courts[].url | string | No | ||||
| data.next_page | integer | No | ||||
| data.page | integer | No | ||||
| data.total | integer | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/courtlistener/courts?page=1" \
-H "x-api-key: $CRAWLORA_API_KEY"