Is this citation, case, filing, drug record, or grant real? Deterministic, evidence-backed checks against the actual authoritative record — no signup, pay per call.
Models fabricate citations, cite retracted papers, invent case law (including real-looking citation numbers paired with invented case names — real lawyers have been sanctioned for exactly this), and misattribute SEC filings, FDA approvals, or NIH grant numbers. None of this is a guess an agent can resolve from the inside — it requires checking against the actual record.
DOI or title/authors/year/journal, checked against Crossref (includes Retraction Watch data) with OpenAlex as a fallback. Flags retractions and mismatched metadata.
Live fetch plus Wayback Machine archival status, redirect chain, content hash, optional expected-content match.
Checked against CourtListener. Flags fabricated case citations, including a real-looking citation number paired with an invented case name. Existence only — no free source publishes "still good law" status.
Given a filer's CIK and a claimed accession number, checked against SEC EDGAR's submissions API. Flags a fabricated or misattributed filing citation, including a real-looking accession number paired with an invented form type or date.
A feed, not a single-claim check — given a CIK, returns a filer's recent SEC filings, optionally filtered by form type (e.g. only 10-Ks). Checked against SEC EDGAR, scoped to the filer's recent-filings window.
Given a claim_type (approval, ndc, or recall) and its identifier, checked against openFDA. Flags a fabricated or misattributed drug approval, NDC listing, or recall citation. Existence/status only — not medical advice.
Given a full NIH project number, checked against NIH RePORTER. Flags a fabricated or misattributed grant citation, including a real-looking project number paired with an invented PI or institution.
Every check is deterministic and evidence-backed — no LLM in the verification path. "Unknown" is a valid, honest answer when a source is down, and it's never charged.
curl -i https://goodsong.dev/verify/citation \
-H "Content-Type: application/json" \
-d '{"doi": "10.1234/example.doi"}'
# → 402 Payment Required, with the x402 payment challenge in the response body
Every endpoint takes the same call shape, just a different body:
POST /verify/citation {"doi": "10.1234/example.doi"}
POST /verify/url {"url": "https://example.com/blog/some-article"}
POST /verify/case {"citation": "576 U.S. 644"}
POST /verify/filing {"cik": "320193", "accession_number": "0000320193-23-000106"}
POST /verify/filings {"cik": "320193", "form_type": "10-K"}
POST /verify/drug {"claim_type": "approval", "identifier": "NDA020702"}
POST /verify/grant {"grant_number": "1ZIAHG200389-11"}
citation: doi and/or title required; authors, year, journal optional.url: expected_content, expected_date optional.case: case_name optional.filing: form_type, filed_date optional.filings: form_type optional filter; limit optional, default 5, capped at 20.drug: claim_type must be approval, ndc, or recall; expected_name optional.grant: grant_number must include its support-year suffix (e.g. -04); expected_pi, expected_org optional.Pay per call via x402 (USDC on Base) — no account, no key. A failed check (our source was down) is always free. /verify/case is priced above the rest because real volume needs CourtListener's paid tier, a fixed cost none of the other sources here carry. Full field reference in the OpenAPI spec.