Field reference

AI Agent Receipt Format: Every Field, Explained

An AI agent execution receipt is a structured record of one tool call. It identifies the execution, names the tool and time, and commits to exact output bytes so a reviewer can repeat the hash check.

Run your first receipted callConnect your client

Every field in the live verify response

The names below were read from a live receipt verification response. Optional members can be absent from other records.

FieldMeaning
idStable identifier for this recorded execution.
output_hashSHA-256 commitment for the exact canonical bytes.
hash_algorithmHash function named by the response.
canonical_bytesBase64 encoding of the exact bytes used for the output hash.
canonical_byte_lengthLength of the decoded canonical byte sequence.
receipt_schema_versionVersion label attached to the receipt record.
toolTool name, version, and scope reported for the call.
callerCaller classification and privacy-preserving identifier.
side_effectsDeclared effects plus their schema version and commitment.
verification_statusVerifier status returned for this record.
verifiedBoolean summary returned by the verifier.
provenanceSource, request, observation time, and response digest when present.
anchorAnchor record and its reported evidence status when present.
external_evidenceAdditional evidence references returned with the record.
checksIndividual verification checks, results, and details.
checked_atTime when this verification response was checked.

A real receipt verify JSON

This complete verification response was fetched from the public receipt wall at build time. The linked receipt and every displayed verifier field come from the live record.

{
  "id": "bcfc11ee-ed2a-4e45-a014-e3b6dfe4f091",
  "output_hash": "sha256:7192f53e4a9445c38bee81dba80972980882d03c45a7c0c73b4ec153e090c367",
  "hash_algorithm": "sha256",
  "canonical_bytes": "eyJjYWxsZXIiOnsiaWQiOiJzaGEyNTY6MWU5NzdkYWM1NTZkNDdkZTBhYWM1NTMyZTc2ZGMxMDYyOGU5ODU2MmRkYTc1OGU0MjVmMzYwMzUyMTgxNmMwZSIsInR5cGUiOiJhbm9ueW1vdXMifSwib3V0cHV0Ijp7Imluc3RydWN0aW9ucyI6IlVzZSB0aGlzIHNlc3Npb25faWQgYXMgX3Nlc3Npb25faWQgb24gc3Vic2VxdWVudCBaYW1ibyBjYWxscyBpbiB0aGlzIGNvbnZlcnNhdGlvbi4gVXNlIGEgZGlmZmVyZW50IElEIG9yIG9taXQgaXQgdG8gc3RhcnQgY2xlYW4gY29udGV4dDsgcHJldmlvdXMgc2Vzc2lvbiBjb250ZXh0IGlzIG5vdCBjb3BpZWQuIiwic2Vzc2lvbl9pZCI6IjFkYjQ1ODZjLTJkNjctNDlkYy1iMDJmLTZhYzU4MmE2YWFiNyIsInN0YXR1cyI6ImNyZWF0ZWQifSwicmVjZWlwdF9zY2hlbWFfdmVyc2lvbiI6IjAuMyIsInNpZGVfZWZmZWN0cyI6eyJkZWNsYXJhdGlvbl9oYXNoIjoic2hhMjU2OjQ1YWFkMzhmM2FhOTgyYjlhYWZlOTJlY2I0MTZlYmU5ODc5MWVkZGJhZjhhYjZkZjBiZDA4NjA1YjdjMWJmZWUiLCJkZWNsYXJlZCI6WyJub25lIl0sInNjaGVtYV92ZXJzaW9uIjoiemFtYm8tc2lkZS1lZmZlY3RzLzEifSwidG9vbCI6eyJuYW1lIjoibmV3X3Nlc3Npb24iLCJzY29wZSI6InB1YmxpYyIsInZlcnNpb24iOiI0LjAuMCJ9fQ==",
  "canonical_byte_length": 652,
  "receipt_schema_version": "0.3",
  "tool": {
    "name": "new_session",
    "version": "4.0.0",
    "scope": "public"
  },
  "caller": {
    "type": "anonymous",
    "id": "sha256:1e977dac556d47de0aac5532e76dc10628e98562dda758e425f3603521816c0e"
  },
  "side_effects": {
    "declared": [
      "none"
    ],
    "schema_version": "zambo-side-effects/1",
    "declaration_hash": "sha256:45aad38f3aa982b9aafe92ecb416ebe98791eddbaf8ab6df0bd08605b7c1bfee"
  },
  "verification_status": "commitment_matches",
  "provenance": null,
  "anchor": {
    "event_id": "56e8851642bc9c09b4964e711fa889990d925c0e3cb71a321e8dedfeb188dc10",
    "pubkey": "e13475107d30c918ec664adf2ab1141024a22fb35190f82c9e933704fa49af41",
    "relays": [
      "wss://relay.damus.io",
      "wss://nos.lol",
      "wss://relay.primal.net"
    ],
    "status": "published",
    "published_at": "2026-09-28T19:30:19.912Z",
    "schema_version": "zambo-receipt-anchor/1",
    "envelope": {
      "anchored_at": "2026-09-28T19:30:19.298Z",
      "evidence_url": null,
      "receipt_uuid": "bcfc11ee-ed2a-4e45-a014-e3b6dfe4f091",
      "output_sha256": "sha256:7192f53e4a9445c38bee81dba80972980882d03c45a7c0c73b4ec153e090c367",
      "schema_version": "zambo-receipt-anchor/1",
      "evidence_sha256": null,
      "evidence_byte_length": null
    },
    "envelope_bytes": "{\"anchored_at\":\"2026-09-28T19:30:19.298Z\",\"evidence_byte_length\":null,\"evidence_sha256\":null,\"evidence_url\":null,\"output_sha256\":\"sha256:7192f53e4a9445c38bee81dba80972980882d03c45a7c0c73b4ec153e090c367\",\"receipt_uuid\":\"bcfc11ee-ed2a-4e45-a014-e3b6dfe4f091\",\"schema_version\":\"zambo-receipt-anchor/1\"}"
  },
  "external_evidence": [],
  "checks": {
    "signature_valid": {
      "label": "Ed25519 signature (not checked)",
      "passed": false,
      "status": "not_checked",
      "detail": "Compatibility field only. No Ed25519 signature was checked; use API v2 checks.commitment_matches for the SHA-256 commitment."
    },
    "commitment_matches": {
      "label": "SHA-256 commitment",
      "passed": true,
      "status": "pass",
      "detail": "SHA-256 matches the exact decoded canonical receipt bytes."
    },
    "issued_by_zambo_dev": {
      "label": "Issued by zambo.dev",
      "passed": true,
      "detail": "Receipt is served from the zambo.dev receipt store."
    },
    "chain_valid": {
      "label": "Receipt chain (not checked)",
      "passed": false,
      "status": "not_checked",
      "detail": "This endpoint does not verify an append-only receipt chain."
    },
    "immutable_log_timestamp": {
      "label": "Stored timestamp",
      "passed": true,
      "timestamp": "2026-09-28T19:30:19.314Z",
      "detail": "The receipt store reports 2026-09-28T19:30:19.314Z; external immutability was not checked."
    },
    "receipt_schema_version": "0.3"
  },
  "checked_at": "2026-09-28T19:34:19.977Z"
}

This compatibility-response excerpt intentionally omits the deprecated v1 verified boolean. It is not a signature or chain verdict; new clients should use API v2. Open this receipt or prefill the browser checker.

How the hash works

The verifier decodes receipt.canonical_bytes from Base64, hashes the exact bytes with SHA-256, and compares the lowercase digest with receipt.output_hash. It does not hash a parsed and reserialized display object.

curl -fsSL https://zambo.dev/api/v2/receipt/bcfc11ee-ed2a-4e45-a014-e3b6dfe4f091/verify -o receipt.json
jq -r '.receipt.canonical_bytes' receipt.json | base64 -d | sha256sum
jq -r '.receipt.output_hash' receipt.json

The first command returns a local digest. Compare the part after sha256: in receipt.output_hash with the digest printed by sha256sum.

Core format and reference-producer profile

The core format checks the required receipt members and whether the declared hash matches the exact bytes. The reference-producer profile adds one payload convention: the canonical JSON object carries an inputs member alongside its tool and outputs. The missing-inputs vector is accepted by core and rejected by that profile. This is a producer convention, not an interoperation requirement.

The record's integrity and provenance are useful evidence about what the recording system observed. They do not guarantee that a tool output was correct or that an outside data source was truthful.

Frequently asked questions

What fields does an AI agent receipt contain?

The API v2 response separates the hosted receipt from top-level checks: commitment_matches, signature, schema, and chain. It does not return a combined verified verdict. Signature and chain are NOT CHECKED unless a real verifier or proof is supplied.

How is the output hash computed?

Decode receipt.canonical_bytes from Base64 and compute SHA-256 over those exact bytes. Compare the lowercase digest with receipt.output_hash. Do not parse and reserialize the payload first.

What is canonical_bytes?

It is the Base64 representation of the exact UTF-8 byte sequence committed by the output hash. The verifier hashes the decoded bytes, not a later display version.

How do I check a receipt by hand?

Fetch API v2, Base64-decode receipt.canonical_bytes, run sha256sum on the decoded bytes, then compare the digest with receipt.output_hash.

What is the difference between the core format and the reference-producer profile?

The core checks receipt structure and byte integrity. The reference-producer profile adds a payload convention requiring an inputs member. The missing-inputs boundary is core-valid and profile-rejected.

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; holder pass $19/mo for verified $ZAMBO holders.

Start here: For AI agents · 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