← home · verify legal case citations against real court records.
Pass ?text= (a paragraph) or ?citation= (a single cite). Also accepts POST with a JSON body { "text": "..." }.
curl "https://legalcite-one.vercel.app/api/verify?text=Roe%20v.%20Wade,%20410%20U.S.%20113%20and%20999%20U.S.%209999"
{
"input": "Roe v. Wade, 410 U.S. 113 and 999 U.S. 9999",
"count": 2,
"summary": { "total": 2, "real": 1, "not_found": 1, "mismatch": 0 },
"citations": [
{ "citation": "410 U.S. 113", "verdict": "real",
"case_name": "Roe v. Wade", "case_name_in_text": "Roe v. Wade",
"court": null, "year": null,
"url": "https://www.courtlistener.com/opinion/108713/roe-v-wade/" },
{ "citation": "999 U.S. 9999", "verdict": "not-found",
"case_name": null, "url": "https://www.courtlistener.com/c/U.S./999/9999/" }
],
"disclaimer": "LegalCite verifies whether a citation exists ... not legal advice.",
"source": "courtlistener-finder"
}
| verdict | meaning |
|---|---|
real | The case exists in court records and (if a name was given) it matches. |
not-found | No such case — likely hallucinated/fabricated. Do not rely on it. |
mismatch | The citation resolves, but the case name in your text is wrong. |
ambiguous | (token mode) Multiple cases match this citation. |
Free: 20 checks/day by IP. Pro: 2,000/day — send your key as X-API-Key: lk_… (or ?key=). Headers: X-RateLimit-Remaining, X-RateLimit-Reset.
One tool: verify_citations(text). Add to any MCP client:
{
"mcpServers": {
"legalcite": {
"command": "npx",
"args": ["-y", "legalcite-mcp"],
"env": { "LEGALCITE_API_KEY": "lk_… (optional, Pro)" }
}
}
}
Or run locally: node mcp/server.js. Set LEGALCITE_BASE to point at a different deployment.
Records from CourtListener (Free Law Project). LegalCite detects U.S. case citations by reporter pattern (U.S., S. Ct., F./F.2d/F.3d/F.4th, F. Supp., regional reporters, etc.) and resolves each against real records. It verifies existence and metadata, not legal correctness or good-law status, and is not legal advice.