Skip to content
For agents
← zambo.dev
Public receipt verification

Check a receipt.

Can a saved AI log or receipt be changed without anyone noticing?

No, a changed saved result fails its digest comparison. Each verifiable receipt carries a digest over its saved result. Change one byte of the saved result and the digest no longer matches. That is what checking a receipt means: compare the saved bytes with their recorded commitment, rather than trusting an edited account.

A real receipt you can check

Receipt 91e376b1-37f4-4c5b-a93e-5497da7410ce is a Zambo MCP prompt_shield receipt, saved 2026-10-18T11:36:51.819Z. It is not a CrewAI or smolagents run.

The public receipt page shows the observed result and saved time. Its machine verification response identifies the tool, recorded request context, canonical saved bytes, and output_hash digest. Recompute SHA-256 over the decoded saved bytes and compare that digest with the stored value. Check this receipt or read the machine check.

A receipt proves the saved result was not changed since it was saved. It never proves the answer was right and never proves an external event happened.

Open your saved receipt

Verifying a workflow? Paste its ID here and we'll take you to the workflow page.

This checks the public hosted receipt. Its profile format is documented separately from the raw AER-1 connection receipt schema.

Read hosted profile schema · Run the read-only demo · Use the local proxy

Advanced: check an offline receipt

Offline AER-1 receipt check

Paste a full MCP response or its raw result._receipt object. After this page loads, the checker makes no network request. It checks the published AER-1 schema, recomputes SHA-256 over the exact output bytes, and verifies the separate metadata_hash for receipt identity, timestamp, tool, schema version, output hash, and provenance claim. Historic v0.2 and v0.3 receipts retain their original bytes and show a legacy notice. A matching hash does not authenticate the issuer.

The byte-change button edits only the text in this browser. It does not send or store the changed receipt. A matching hash checks the recorded bytes, not whether an outside action happened.

Every receipt has a fingerprint. If anyone changes the receipt, the fingerprint no longer matches. A match does not prove the answer is right.

AER-1 draft -22 defines the receipt format.

Receipts withheld for privacy

Some receipts keep canonical bytes private. Their public verifier reports “withheld” instead of showing a green check. The receipt owner can use the offline verifier below with the original bytes to recompute the commitment.

Attach a Zambo receipt

For developers

Replace <id> with the receipt UUID. A receipt link shows the public run page; the machine link returns the v2 verification checks.

Markdown badge
For developers
[![Zambo receipt](https://zambo.dev/api/receipt/<id>/badge.svg)](https://zambo.dev/run/<id>)
HTML badge
For developers
<a href="https://zambo.dev/run/b08cfe77-6a52-47e7-9ade-b01fbcd5e543"><img src="https://zambo.dev/api/receipt/<id>/badge.svg" alt="Zambo receipt"></a>
Machine verification link
For developers
https://zambo.dev/api/v2/receipt/<id>/verify
Commit or pull request trailer
For developers
Zambo-Receipt: https://zambo.dev/run/<id>
JSON pointer
For developers
{"zambo_receipt":{"id":"<id>","url":"https://zambo.dev/run/<id>","verify_url":"https://zambo.dev/api/v2/receipt/<id>/verify","output_hash":"sha256:…"}}
connection metadata key
For developers
_meta["dev.zambo/receipt"]
A2A extension key
For developers
https://zambo.dev/ext/aer1/v1

CI recipe: Add receipt verification to GitLab CI.

Advanced: check a multi-step job

Verify a workflow receipt

A workflow receipt commits to an ordered list of independently verifiable step receipts. Use the verified receipt example as the reference record. Every step must independently verify through its own receipt endpoint before the workflow root is meaningful.

Exact Merkle construction

  1. For each 1-based step, lowercase the 64-character receipt output-hash hex and remove its sha256: prefix. The leaf is SHA-256(UTF-8 bytes of decimal seq + ":" + hash hex).
  2. At each parent level, hash the raw 32-byte left node concatenated with the raw 32-byte right node: SHA-256(left bytes || right bytes).
  3. If a level has an odd number of nodes, duplicate its final node before pairing. Repeat until one root remains.

The example workflow is 42a3c2cf-2cdd-5b8a-aced-016e5a2fb634 and reports this root:

a4b2fcb4684cec481e4ece889ed15c7d9e47e58d9ba4fb02ea354c0cb2ca44c4

Fetch each step at /api/v2/receipt/<receipt-id>/verify. Recompute its SHA-256 commitment from the exact decoded bytes and compare the output hash with the ordered commitment shown by the workflow. Signature and chain checks are separate and remain unchecked unless independently verified.

A matching root proves the integrity and order of the listed commitments. It does not prove that the workflow succeeded in its goal, that a provider's data was true, or that an external side effect occurred.

Open a verified receipt → · Read the receipt schema →

Verify agent receipt

Paste the receipt UUID in the form above. The public checks let you inspect the recorded result and integrity material without relying on an agent's summary.

Verify AI agent output

A valid receipt check means the saved record matches its commitment. It does not prove that the model's answer was correct or that an unobserved outside action succeeded. Review those claims separately.

Explore receipts and handovers

Want your AI to make receipts like this? Add Zambo to your AI

https://zambo.dev/mcp

Claude setup · ChatGPT setup · Grok setup · Cursor setup

ChatGPT needs a paid plan to add a custom connector; free ChatGPT users cannot add it. Use Claude or Grok instead, or paste this link into any AI and ask for setup instructions. Pasting a link does not itself install a connector.

Questions and answers

How can I tell if an AI receipt was changed after it was saved?

Recompute the receipt digest over its exact saved bytes and compare it with the recorded digest. A one byte change produces a different digest. The check does not establish the truth of the result or the issuer's identity.

What does verifying a receipt actually check?

A receipt proves the saved result was not changed since it was saved. It never proves the answer was right and never proves an external event happened. The hosted verifier checks the public saved record. Offline AER-1 checking uses the exact supplied bytes and their declared commitments.

Add Zambo to your AI

Connect the free MCP at https://zambo.dev/mcp in Claude, ChatGPT, Gemini, Cursor, Grok, Windsurf, or VS Code. No key is needed. The first receipt arrives with the first call through Zambo. Adding a URL does not automatically install a connector; use your client's MCP settings.

More AI agent answers · Try the demo · Current pricing and tool-specific limits

For developers and agents

Zambo gives AI work a receipt you can check. For people: add Zambo to your AI app and ask for a job. These technical links are for developers and AI agents. One hosted MCP at https://zambo.dev/mcp. Check the proof for recorded tool calls (verify a receipt). Agents: 24-hour Day Pass, $0.99 USDC on Base via x402, not per call. People: Zambo Pass $29/mo or $290/yr.

Start here: For AI agents · Zambo Receipt Bot for Grok teams · Add Zambo · Check a receipt · Answers · Guides · What a receipt is · Open receipt format (draft) · All tools · Pricing · Day Pass: $0.99 · Agent Day Pass · Switch AIs without losing your work · Connect your AI · Founder · Source code
Brennan on X · Zambo on X