The 13 tools
The same surface over REST and MCP. Every one returns a Trust Envelope; every price below derives from the live charging table rather than being written here.
Verification
The core. These are the calls that produce labels and evidence.
| Tool | What it does | Price |
|---|---|---|
| verdict_check_citationsPOST /v1/citations/verify | Extract citations from text (or take a list) and verify each. Opt-in treatment=true adds beta reliance signals. | 3¢ per citation |
| verdict_check_quotesPOST /v1/quotes/verify | Verify quoted passages appear verbatim in the cited sources — the fabricated-quote-on-a-real-case class. | 7¢ per quote |
| verdict_check_briefPOST /v1/briefs/verify | Whole-brief run (citations + quotes) returning a certification block. Large briefs run as jobs. | $9.95 flat |
| verdict_check_ai_outputPOST /v1/ai/verify | Brief engine tuned for AI drafts; adds typed hallucination rollups. Advisory labels are excluded from the rollup. | $4.95 flat |
| verdict_reportGET /v1/reports/{id} | Poll or fetch an async brief report. The job was charged once, at submission — polling costs nothing. | Free |
A citation we cannot decide costs 1¢ instead of 3¢, and a quote we cannot resolve costs 1¢. Brief certification includes 150 citations, then 3¢ each.
Retrieval
| Tool | What it does | Price |
|---|---|---|
| searchGET /v1/search?q= | Search cases by name. | 3¢ per query |
| fetchGET /v1/cases/{id}/text | Full opinion text by canonical id. | 2¢ each |
| verdict_get_caseGET /v1/cases/{id} | One case by canonical id or citation. Opt-in blocks: treatment, authorship, cited_for, disposition. | 2¢ each |
| verdict_get_casesPOST /v1/cases/batch | Up to 500 canonical ids per call — the reconciliation-sweep tool. | 2¢ per FOUND record |
| verdict_get_lawGET /v1/law | Federal regulations (CFR) by citation via eCFR, versioned by an as-of date: sections, part appendices and their items, and section appendices. An as-of date eCFR cannot serve is a coverage gap, never a miss. U.S.C. citations are a gap here — the statute lane in citation checks covers them. | 2¢ each |
Batch is billed per record found, not per id submitted — a sweep over ids that are not in the corpus is not charged for the misses.
Platform
| Tool | What it does | Price |
|---|---|---|
| verdict_verification_logGET /v1/logs/{request_id} | The audit record behind any prior response. Returns a ledger row wrapping the stored Trust Envelope. | Free |
| verdict_accountGET /v1/account | Balance, usage, keys and packs. | Free |
| verdict_coverageGET /v1/coverage | Corpus coverage by jurisdiction — check what we cover before you spend anything. | Free |
A brief or AI-output job is charged once, at submission. Polling its report by id costs nothing however often you poll, and the report's own meter is the read's (zero), not the job's — the job's charge lives on the submission envelope and in its verification-log entry. Account reads are free the same way. Every “Free” above is a zero-priced row in the same manifest as every other price on this site, never an inference.
Console metrics live at GET /v1/account/usage?window=7d|30d|90d (free, REST only — dashboards, not agents). It is rate-guarded: fetch it per navigation, never on a timer, and honor Retry-After on a 429.
Request ids are safe to share
A request_id identifies a record only to the account that created it. The lookup is scoped to the calling principal in the query itself, so an id belonging to someone else returns the same “no verification record” answer as an id that never existed — there is no existence oracle.
Paste one into a support ticket or a bug report without worrying that it exposes the underlying record. It is an identifier, not a credential — and unlike an API key, it grants nothing.
Errors are structured
Every error carries error.kind and a message. A caller error is 400 invalid_input, and REST validates every typed argument against the tool’s schema before any charge, so a malformed body is never billed. 404 not_found is reserved for a resource you addressed that does not exist for you: a case that is not in the corpus, or its opinion text; a report or verification-log id that is not this account’s; a key prefix with no active key. Text you supply inside a citation never changes the status. Treat the set of kinds as open: a kind you do not recognize is a non-retryable caller-side condition unless the status is 5xx, internal is always a structured envelope (never a raw traceback), and rate_limited always carries Retry-After.
Retries and replays
meter.replayed: true. Verification tools replay identical requests for 24 hours; log reads replay for 1 minute. The same window is why you must not probe “did the fix land?” with a byte-identical request — you will get the replay, not a fresh answer.A verification that ran and was charged but whose stored result cannot be served answers a structured error.kind: internal carrying the request id, and the charge is refunded to your balance automatically. The verification log keeps the record with state refunded; a refunded record never replays, so a retry re-runs the verification. Every envelope also carries audit.guidance_version, the contract it was issued under; validate a stored record against the version it names, not the current one.