Awesome-Agent-Skills-for-Empirical-Research caselaw-access-api
Query 360+ years of US case law via the Harvard Caselaw Access Project
install
source · Clone the upstream repo
git clone https://github.com/brycewang-stanford/Awesome-Agent-Skills-for-Empirical-Research
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/brycewang-stanford/Awesome-Agent-Skills-for-Empirical-Research "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/43-wentorai-research-plugins/skills/domains/law/caselaw-access-api" ~/.claude/skills/brycewang-stanford-awesome-agent-skills-for-empirical-research-caselaw-access-ap && rm -rf "$T"
manifest:
skills/43-wentorai-research-plugins/skills/domains/law/caselaw-access-api/SKILL.mdsource content
Caselaw Access Project API
Overview
The Caselaw Access Project (CAP) by Harvard Law School provides free access to 6.9 million US court opinions spanning 360+ years. The REST API enables searching, filtering, and downloading full-text case opinions from all federal and state courts. No authentication required for metadata; API key (free registration) required for full text of post-1923 cases.
API Endpoints
Base URL
https://api.case.law/v1/
Cases
# Search cases by keyword curl "https://api.case.law/v1/cases/?search=free+speech&decision_date_min=2020-01-01" # Get a specific case by ID curl "https://api.case.law/v1/cases/12345678/" # Filter by jurisdiction and court curl "https://api.case.law/v1/cases/?jurisdiction=us&court=us-sup-ct&search=miranda+rights" # Filter by date range curl "https://api.case.law/v1/cases/?decision_date_min=2015-01-01&decision_date_max=2025-12-31" # Get full text (requires API key for post-1923) curl -H "Authorization: Token YOUR_API_KEY" \ "https://api.case.law/v1/cases/12345678/?full_case=true"
Query Parameters
| Parameter | Description | Example |
|---|---|---|
| Full-text search | |
| Filter by jurisdiction slug | (California) |
| Filter by court slug | |
| Earliest date | |
| Latest date | |
| Search by citation | |
| Case name | |
| Sort results | |
| Results per page (max 100) | |
| Include full text | |
Courts and Jurisdictions
# List all courts curl "https://api.case.law/v1/courts/" # List all jurisdictions curl "https://api.case.law/v1/jurisdictions/" # List all reporters (case report series) curl "https://api.case.law/v1/reporters/"
Python Usage
import requests BASE_URL = "https://api.case.law/v1" def search_cases(query: str, jurisdiction: str = None, court: str = None, max_results: int = 20) -> list: """Search US case law.""" params = {"search": query, "page_size": min(max_results, 100)} if jurisdiction: params["jurisdiction"] = jurisdiction if court: params["court"] = court resp = requests.get(f"{BASE_URL}/cases/", params=params) resp.raise_for_status() data = resp.json() cases = [] for case in data.get("results", []): cases.append({ "id": case["id"], "name": case["name_abbreviation"], "citation": case["citations"][0]["cite"] if case.get("citations") else None, "court": case["court"]["name"], "date": case["decision_date"], "url": case["frontend_url"] }) return cases # Search Supreme Court cases results = search_cases("fourth amendment", court="us-sup-ct") for case in results: print(f"{case['citation']}: {case['name']} ({case['date']})")
Bulk Data Access
For large-scale research, download bulk datasets instead of querying the API:
# Bulk data available at: # https://case.law/bulk/download/ # Formats: JSON (full case data) or text-only # Organized by jurisdiction and reporter
Key Jurisdictions
| Slug | Jurisdiction | Cases |
|---|---|---|
| Federal (all) | ~1.5M |
| US Supreme Court | ~65K |
| California | ~500K |
| New York | ~600K |
| Texas | ~300K |
| Illinois | ~250K |
Authentication
1. Register at https://case.law/user/register/ 2. Get API token from your account page 3. Include in requests: Authorization: Token YOUR_TOKEN
Free accounts get full text for pre-1923 cases. Post-1923 full text requires an API token (still free).