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.

ToolWhat it doesPrice
verdict_check_citationsPOST /v1/citations/verifyExtract citations from text (or take a list) and verify each. Opt-in treatment=true adds beta reliance signals. per citation
verdict_check_quotesPOST /v1/quotes/verifyVerify quoted passages appear verbatim in the cited sources — the fabricated-quote-on-a-real-case class. per quote
verdict_check_briefPOST /v1/briefs/verifyWhole-brief run (citations + quotes) returning a certification block. Large briefs run as jobs.$9.95 flat
verdict_check_ai_outputPOST /v1/ai/verifyBrief 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 instead of , and a quote we cannot resolve costs . Brief certification includes 150 citations, then each.

Retrieval

ToolWhat it doesPrice
searchGET /v1/search?q=Search cases by name. per query
fetchGET /v1/cases/{id}/textFull opinion text by canonical id. each
verdict_get_caseGET /v1/cases/{id}One case by canonical id or citation. Opt-in blocks: treatment, authorship, cited_for, disposition. each
verdict_get_casesPOST /v1/cases/batchUp to 500 canonical ids per call — the reconciliation-sweep tool. per FOUND record
verdict_get_lawGET /v1/lawFederal 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. 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

ToolWhat it doesPrice
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/accountBalance, usage, keys and packs.Free
verdict_coverageGET /v1/coverageCorpus 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

Retries never double-charge
Idempotency is server-enforced: a retried request replays rather than re-billing, and the envelope says so with 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.