Install
pip install aer1-verify
aer1-verify is a single-file, standard-library-only verifier: no dependencies, no network, no trust in any server, including ours. Current PyPI release: aer1-verify 0.2.16, written against draft-zambo-aer1-26, with workflow-close verification under both Merkle rules.
The three-line check
curl -s "https://zambo.dev/api/v2/receipt/RECEIPT-ID/verify" -o receipt.json
pip install aer1-verify
aer1-verify receipt.json
The first line fetches a receipt as JSON from the public verify endpoint. The third runs the offline check: aer1-verify recomputes every hash commitment locally, prints a PASS or FAIL line per check, and ends with a verdict. Unplug the network before the third line if you want to prove the point: the verdict does not change.
What it checks
- Shape: the input is a recognized receipt shape and the required fields are present.
- Bytes: the saved bytes decode strictly and re-encode byte-exactly, so nothing hides in a re-serialization.
- Digest: sha256 of the saved bytes equals the committed output hash.
- Workflow closes: for a job record, the Merkle root is recomputed from the step receipts under the close's declared merkle_version (draft-zambo-aer1-26, Section 8.1).
Try it on a live receipt
This receipt is from a live Zambo call, a BTC price check run on 2026-10-24: https://zambo.dev/run/26b353a9-8e34-4820-a351-9a65208e11c1. Fetch its JSON with the curl line above (the receipt ID is the last part of the URL), run aer1-verify on it, and compare the verdict with the browser check at zambo.dev/verify. Two codebases, one record, one answer.
What a receipt is, in one sentence: an agent receipt is a record of one ai agent tool call that anyone can check: it keeps the exact saved bytes and their sha-256 digest, and it proves the result was not changed since it was saved, not that it was right.
What a pass means, and what it does not
A pass means the record you are holding is the record that was saved when the call ran. It does not mean the agent's answer was right: a receipt proves the saved result was not changed, not that the result was correct. The verifier enforces that boundary by checking math, not meaning.
Get receipts on your own agent work
Checking receipts is the second half. The first half is making sure your agents' calls leave one: when a client or a teammate disputes what an agent did, the argument ends where a checkable record begins. Add Zambo and every call your agents run through the endpoint comes back with a verifiable AER-1 receipt at a public link, starting with 20 free calls per day.
Frequently asked questions
How do I verify an AER-1 receipt in Python?
Install the verifier with pip install aer1-verify, fetch the receipt as JSON from the public verify endpoint, and run aer1-verify on the file. It prints a PASS or FAIL line per check and a final verdict, entirely offline.
Does aer1-verify need a network connection?
No. aer1-verify is standard library only and verifies a receipt from the receipt data alone: it recomputes the sha-256 hash commitments locally and never calls a server. Fetching the receipt JSON is the only step that needs the network, and any copy of the receipt works.
What does the AER-1 Python verifier check?
It checks the receipt's shape and required fields, that the saved bytes decode strictly and re-encode byte-exactly, and that sha256 of the saved bytes equals the committed output hash. For a workflow close it also recomputes the Merkle root from the step receipts under the declared merkle_version.
Does a passing check prove the agent's answer was right?
No. An agent receipt is a record of one ai agent tool call that anyone can check: it keeps the exact saved bytes and their sha-256 digest, and it proves the result was not changed since it was saved, not that it was right. The check proves the record was not changed; judging whether the work itself was right is still yours.
Where is AER-1 specified?
AER-1 is an open IETF Internet-Draft, draft-zambo-aer1, and the current revision is draft-zambo-aer1-26 on the IETF Datatracker. The public conformance corpus ships with the kit: 126 vectors and 129 checks at kit v1.5.7.
Related
- AER-1 npm verifier: check a receipt in three lines
- AER-1 at the IETF: draft-zambo-aer1-26 is current
- AER-1: the agent execution receipt standard
- AER-1 conformance test: run the suite
- run the AER-1 conformance test: independent implementations and their results, on the registry.
- Verify AI work: the verification loop