ProofKit
Live · legal citations

Every AI answer — with a receipt.

Proof Kit checks what an AI wrote against the source and returns a signed receipt anyone can verify offline. Start with legal citations: paste an AI-written brief and see which cases are real — in seconds.

Live demo — paste text with US case citations

Catch fabricated cases

A citation that does not exist — or a real citation that belongs to a different case — is flagged with a link to the source.

Signed, tamper-evident

Every check returns receipt.json signed with Ed25519 and chained into a public log. Change one character and verification fails.

Evidence for audits

Keep receipts as a record of what was checked, when and against which source — useful for record-keeping duties such as EU AI Act Art. 12.

How it works

Paste or call the API

Send the AI-written text to the web checker or POST /api/v1/check. We extract US reporter citations (U.S., S. Ct., F.3d, F. Supp., state reporters).

We resolve each citation

Each citation is looked up in CourtListener and the case name is compared token by token. Verdicts: verified, wrong case, not found, ambiguous, unverifiable.

You get a signed receipt

The result is signed and its digest is appended to a public hash chain. Anyone — a partner, a client, a court — can verify it without trusting us.

Example receipt.json

{
 "body": {
  "spec": "sapir-receipt/1",
  "kind": "citation-check",
  "ts": "2026-10-28T20:51:04.775Z",
  "input_sha256": "e8115555b9505b63…d061b211c69",
  "checker": "CourtListener citation resolver (courtlistener.com/c/), name-token match >= 0.5",
  "results": [
   { "cite": "410 U.S. 113", "name": "Roe v. Wade", "verdict": "verified",
     "source": "https://www.courtlistener.com/opinion/108713/roe-v-wade/" },
   { "cite": "925 F.3d 1339", "name": "Varghese v. China Southern Airlines Co.", "verdict": "not_found",
     "note": "No case at this citation in CourtListener. Likely fabricated." }
  ],
  "summary": { "total": 2, "verified": 1, "flagged": 1 },
  "key": { "alg": "Ed25519", "x": "RMJOfCYzDOsYHFAMA5W5VPmnYN51jh7_sgDPzijAzu0" }
 },
 "sig": "gN-7XztHZP4GRO5MZ0zZTKAuat8V…JAegI0In4lE3gGpEDA",
 "digest": "64997144dd1234f4…2e987fdc24",
 "log": { "n": 33, "hash": "d23cc14ceead753a…52e95f85e55e" }
}

Shortened for display. Real receipts include full hashes and every note.

Verify offline in ~10 lines

import { readFileSync } from "node:fs";   // node verify.mjs receipt.json  (Node 20+)
const r = JSON.parse(readFileSync(process.argv[2] || "receipt.json", "utf8"));
const canon = o => o === null || typeof o !== "object" ? JSON.stringify(o) : Array.isArray(o) ? "[" + o.map(canon).join(",") + "]"
  : "{" + Object.keys(o).sort().filter(k => o[k] !== undefined).map(k => JSON.stringify(k) + ":" + canon(o[k])).join(",") + "}";
const msg = new TextEncoder().encode(canon(r.body));
const hex = Buffer.from(await crypto.subtle.digest("SHA-256", msg)).toString("hex");
const pub = (await (await fetch("https://proof.sapir861.com/.well-known/proofkit-pubkey")).json()).jwk;
const key = await crypto.subtle.importKey("jwk", pub, { name: "Ed25519" }, false, ["verify"]);
const ok = await crypto.subtle.verify({ name: "Ed25519" }, key, Buffer.from(r.sig, "base64url"), msg);
console.log(ok && hex === r.digest && pub.x === r.body.key.x ? "VALID" : "INVALID");

Public key: /.well-known/proofkit-pubkey

Use cases

Live

Legal citations

Law firms, legal-tech and in-house teams: check every case an AI drafted before it reaches a court. Hundreds of sanctions for AI-invented cases have been reported worldwide.
Beta · waitlist

Prices vs. source document

Did the AI quote the right price, date or figure from your PDF or CSV? Proof Kit will match each claim to the cell it came from.
Join the waitlist →
Beta

Arithmetic in AI answers

Totals, percentages and unit conversions are recomputed deterministically, not judged by another model.
Request beta access →

Why now

Courts keep sanctioning filings with AI-invented case law, and public trackers now list thousands of such decisions. Probability scores — “an AI judging an AI” — do not hold up in front of a judge or an auditor. A signed receipt that a third party can check does.

Pricing

Simple plans in USD. Subscriptions are in early access: we invoice monthly and lock today’s price for early customers.

Free

$0
  • Web checker
  • 100 citations / month
  • Signed receipts
Start free
Most popular

Pro

$49/mo
  • API access
  • 5,000 checks / month
  • Receipt archive
  • Email support
Start Pro

Team

$249/mo
  • Shared workspace
  • 30,000 checks / month
  • Audit export (CSV + receipts)
  • Priority support
Start Team

Pilot

$1,500
  • 30 days on your documents
  • Report of every flagged citation
  • No errors found in your AI output → the pilot is free
Request a pilot

We reply within 24 hours on business days.

What is proven — honestly

The checker tells you whether a citation exists in CourtListener and whether the case name matches. It does not judge whether the case supports your argument. Coverage is US case law available in CourtListener; Westlaw/Lexis-only cites are marked unverifiable. Independent evaluation across more models and larger datasets is in progress; methodology is public in our research record.