Docs / Verify / Verification API
// PROOF LEDGER READ SURFACE
Verification API
Read and verify receipts programmatically. The endpoints below let you recompute a leaf, fetch a Merkle proof, pull a self-contained evidence bundle, walk the chain, and confirm the on-chain anchor — all over the same proof the public Trust Portal exposes.
Verify a receipt now
Paste a receipt hash. If it is the committed public sample, the leaf and Merkle proof are recomputed entirely in your browser. Otherwise we run the public lookup. Either way: real math, never a fake spinner.
GET /api/proof/verify?hash=, returning all four steps (receipt_recomputed, chain_ok, merkle_ok, anchor_ok). Logged out, the public lookup degrades gracefully — the sample still verifies fully client-side.Endpoints
Runs all four verification steps server-side and returns a VerifyResult. No short-circuit — every check actually runs.
| Field | Type | Meaning |
|---|---|---|
| receipt_recomputed | bool | The leaf recomputed from the stored receipt matches receipt_hash. |
| chain_ok | bool | prev_hash links back through the tenant chain with no break. |
| merkle_ok | bool | The sibling proof folds to the batch's merkle_root. |
| anchor_ok | bool | The on-chain memo equals the merkle_root. |
| batch_id, merkle_root | string | The anchored batch and its root. |
| anchor_txid, anchor_chain, anchor_block | string · number | The anchoring transaction coordinates. |
| verified | bool | All four checks passed. |
| steps[] | object[] | The ordered checklist rendered by the verify widgets. |
Returns the raw Merkle proof so clients fold it themselves: { leaf, index, siblings[], merkle_root }. Siblings are a bare list — sorted-pair, no left/right flags.
The self-contained offline evidence bundle (see the bundle shape). Sets content-disposition: attachment. Also accepts ?batch=<id>.
Walks the chain toward genesis: [{ receipt_hash, prev_hash, receipt_seq }], up to depth entries.
The widget feed: { receipts, billable_receipts, anchored_batches, pending_batches, latest_root, latest_txid }.
The frozen published schema — no flag, no auth. Any logged-out browser can fetch it; it is the single source of truth behind the Receipt schema doc.
The public un-pinned lookup. Returns { verified, <minimal fields> } only — never the canonical body of another tenant's receipt (enumeration-hiding). This is the one a logged-out browser can call.
Example
# public lookup (no auth):
curl https://agentics.you/api/trust/verify/8ae41ff9f6cd265ce08a312dacc24f89da2c634c18e0ed47a29a475ad5e70efb
# full server recompute (console session):
curl https://agentics.you/api/proof/verify?hash=8ae41ff9… \
-H "Authorization: Bearer ak_…"