Log Out?

Are you sure you want to log out?

๐Ÿ”“

Unlock Premium Features

Get full access to CourtListener links, unlimited verifications, and all platform integrations.

Direct CourtListener links
Unlimited verifications
All AI platforms (ChatGPT, Claude, Gemini, Grok)
Smart glasses & voice commands
$19/month Pro (unlimited)
$190/year Pro annual (two months free)
One subscription โ€ข All platforms
View Plans

For autonomous agents

Verify a legal citation. Pay a cent. No account.

Veridictum tells you whether a US legal citation is real โ€” and, more usefully, whether it is a plausible-looking fabrication. Agents pay per call over x402: HTTP 402 plus a signed USDC payment. Payment is the authentication. There is no API key, no signup and no rate limit.

What it verifies

A citation is extracted with regular expressions โ€” never a language model โ€” and then looked up in three tiers: a cache of previously confirmed results, a local corpus of court opinions, and finally the CourtListener API. The verdict is the outcome of that lookup.

No language model sits anywhere in the verification path. That is the whole point: the same citation submitted twice returns the same verdict, and no model can talk the engine out of one. An answer here is reproducible rather than generated.

What it does not do: judge whether a real case supports the proposition it was cited for. It verifies existence and identity, not reasoning.

The three verdicts

status: "verified"  ยท  verified: true

The citation resolves to a real case. If a case name was submitted, it matched the case found โ€” name_match: "confirmed".

status: "suspicious"  ยท  name_match: "mismatch"

The fabrication signature. The volume, reporter and page resolve to a real case โ€” but to a different case than the name given. That is what an invented citation looks like: a real-looking reporter slot borrowed for a case that does not exist.

This is the most valuable answer this service returns. A not_found might be a typo or a gap in coverage; a mismatch is a specific, checkable claim that the citation and the name do not belong to each other.

status: "not_found"  ยท  verified: false

No case matches the citation.

verified: false is a finding, not an error. Retrying it costs another payment and returns the same answer.

Supplying the case name is what enables mismatch detection. A bare citation like 384 U.S. 436 can only be confirmed to exist, and comes back with name_match: "not_checked".

Price, networks and the caching rule

Route Price Notes
POST /api/v1/agent/verify $0.01 One citation.
POST /api/v1/agent/verify/bulk $0.10 Up to 50 citations, one flat price for the call. Fifty citations cost the same as two.
MCP tool verify_citation_paid $0.01 Same answer over MCP at https://veridictum.legal/mcp/agent.

Payable on either chain, in USDC:

Both are advertised in the 402; pick either. The receiving address for each is in the accepts list of the Payment-Required header โ€” never hardcode one from this page.

The caching rule, because it affects what a retry buys you

Only verified results are ever cached. A suspicious or not_found answer is re-checked on every call โ€” so a paid retry of a suspicious citation buys a genuinely fresh lookup rather than a stored one. A confirmed citation does not need re-checking, and a fabricated one must never be remembered as an answer.

Request and response

Request:

POST /api/v1/agent/verify
Content-Type: application/json
PAYMENT-SIGNATURE: <base64url of the signed x402 payload>

{"citation": "Miranda v. Arizona, 384 U.S. 436 (1966)"}

Response โ€” identical to the free, keyed route's envelope:

200 OK
PAYMENT-RESPONSE: <base64url settlement receipt: success, tx, network, payer>
X-Veridictum-Surface: agent

{
  "citation": "Miranda v. Arizona, 384 U.S. 436 (1966)",
  "status": "verified",
  "verified": true,
  "case_name": "Miranda v. Arizona",
  "court": "Supreme Court of the United States",
  "date_filed": "1966-06-13",
  "courtlistener_url": "https://www.courtlistener.com/opinion/107252/miranda-v-arizona/",
  "courtlistener_id": "107252",
  "confidence": "high",
  "tier": 1,
  "message": "Citation verified",
  "source": "local_corpus",
  "cached": true,
  "api_call_made": false,
  "name_match": "confirmed"
}

The bulk route takes and returns:

POST /api/v1/agent/verify/bulk
{"citations": ["384 U.S. 436", "Varghese v. China Southern Airlines Co., 925 F.3d 1339 (11th Cir. 2019)"]}

{
  "success": true,
  "total_citations": 2,
  "verified_count": 1,
  "not_found_count": 1,
  "suspicious_count": 0,
  "results": [ /* one envelope per citation, in order */ ],
  "verification_time_ms": 412,
  "hallucination_risk": "MEDIUM"
}

hallucination_risk is LOW when every citation verified, MEDIUM at one or two not found, and HIGH at three or more.

The 402 flow, in five lines

  1. POST the route with no payment header. You get 402.
  2. The requirements are in the Payment-Required response header, base64url-encoded JSON โ€” not in the body, which is {}.
  3. Decode it, pick one entry from accepts (one per network), and sign a payment for that exact amount to that exact payTo.
  4. POST the same request again with the signed payload in the PAYMENT-SIGNATURE header.
  5. You get 200 and the verdict, plus a settlement receipt in the PAYMENT-RESPONSE header.

Any x402 client library does steps 2 to 4 for you. Nothing is charged for the unpaid 402, and nothing is settled if the handler fails โ€” the payment settles after a successful answer, not before.

Over MCP

The same verification is a paid MCP tool, verify_citation_paid, at https://veridictum.legal/mcp/agent (streamable HTTP), at $0.01 per call. The payment rides in the tool call's _meta under x402/payment; the settlement receipt comes back in the result's _meta under x402/payment-response. An unpaid call returns the payment requirements instead of a verdict.

Use https://veridictum.legal/mcp/agent, not https://veridictum.legal/mcp. They are two different MCP servers. https://veridictum.legal/mcp carries the free tools and requires an OAuth bearer token โ€” it will answer 401 to a caller that has a wallet and no account, before it will even list its tools. https://veridictum.legal/mcp/agent carries the paid tool and requires no token at all: the payment is the authentication.

The paid endpoint exists for agents that have a wallet and no account. If you have a Veridictum account and an interactive client, the free tools at https://veridictum.legal/mcp are the ones you want.

Verify the numbers yourself

Accuracy claims about citation verification are easy to make and rarely checked. These two are checkable, and the recipe is below โ€” you do not have to take the figure on trust, and you should not.

1305 / 1318

The landmark audit

1318 citations drawn from 288 landmark cases, verified end to end on 2026-08-31. The 13 that did not verify are each named and accounted for โ€” corpus damage, one parser defect left open deliberately, and two genuine corpus gaps โ€” rather than absorbed into a percentage.

6 / 6

Mata v. Avianca

The 2023 federal filing that got a lawyer sanctioned cited six cases generated by ChatGPT. All six were fabricated. Veridictum flags all 6 โ€” the case that made this problem famous is the obvious thing to test against, so it is tested against.

How to re-run it. Submit any citation to the paid route with its case name attached, and compare the courtlistener_url in the response against CourtListener directly. Every verified answer carries the opinion it resolved to, so any verdict here can be checked against a source we do not control. To reproduce the mismatch behaviour, submit a real reporter citation with the wrong case name and confirm the reply is suspicious / mismatch rather than verified.

How the figures were arrived at is written up in docs/METHOD.md (the audit, the eight parser defects it found, and why the test strings are taken from the corpus rather than written by hand) and docs/REPORTER_COVERAGE.md (reporter coverage, and the four occasions on which something adjacent to the question was measured and reported as the question). Both live in the project repository.

One caveat stated plainly, because it is the honest version of the claim: this verifies that a citation exists and that its name matches the case it points to. It does not verify that the case supports the argument it was cited for. Substance still needs a lawyer.

Also