AI workflow verification
What Is a Workflow Receipt?
Last updated: 2026-10-06
Plain answers about using Zambo, keeping your work, and checking receipts. A receipt shows what Zambo recorded for one call. It does not prove the answer is right.
A workflow receipt makes a multi-step AI workflow checkable as a whole without changing the ordinary receipts produced by its individual steps.
A workflow receipt commits to the ordered hashes of the receipts created by each step. It organizes those hashes in a Merkle tree and publishes one root that can be checked independently.
How the workflow receipt fits together
Think of each unchanged step receipt as a line item. The workflow receipt is the invoice that commits to those line items through a single Merkle root. It adds a workflow-level integrity check while keeping the step records intact.
Step receipts
Each executed step retains its own canonical receipt and observed result.
Zambo link shape and a real request
A workflow receipt Zambo link should accept a request that names the ordered steps or session being inspected and return a record that commits to those steps. The exact API contract belongs to the service exposing it. A caller should read the Zambo link documentation rather than guessing a field name. For a session-based workflow, a request may look like this:
Advanced (for developers)
curl -fsSL https://zambo.dev/api/v1/sessions/SESSION_IDUse a real session identifier supplied by the workflow. Do not copy the example as if it were a live record. The response commonly contains a workflow identifier, ordered step references, a root commitment, timestamps, and a status. A trimmed illustrative response is shown below. It is not a receipt and it does not assert that this session exists.
Advanced (for developers)
{
"workflow_id": "example-only",
"steps": [{"receipt_id": "step-1"}, {"receipt_id": "step-2"}],
"root": "sha256:example",
"status": "recorded"
}How to review the response
First check that the workflow identifier belongs to the task under review. Next confirm that the steps are ordered and that every referenced receipt can be resolved. Recompute the root from the exact step commitments using the documented procedure. If a step is missing, changed, or unavailable, the workflow is incomplete. A root value copied from the response is not independent verification. The reviewer must obtain the underlying values again or mark the check unresolved.
What a workflow receipt proves
A workflow receipt can commit to the set and order of receipts that the workflow record names. It can help a reviewer see whether the recorded path contains a missing step or changed commitment. It does not prove that the workflow's goal was achieved, that the inputs were truthful, or that an outside system retained a side effect. Keep outcome checks separate. For a standards-oriented field and fixture reference, see the conformance page.
Failure handling
Transport errors, expired sessions, an unknown identifier, and an invalid root are different results. Report them separately. A timeout means the reviewer does not yet have evidence. It is not proof that the workflow failed. An invalid commitment is a verification failure. A valid commitment with an incorrect tool result is a valid record of an incorrect observation. This vocabulary helps incident responders avoid collapsing all uncertainty into one red status.
Practical adoption
Start with a short workflow whose steps are already individually observable. Store each step receipt before constructing the root. Preserve the exact bytes used by the commitment process. Generate the workflow summary only after the step references are available. Give reviewers a way to retrieve the workflow and its steps without asking the agent to narrate them again. Then test missing, reordered, and changed steps before relying on the feature for consequential work.
A workflow receipt is most useful when it makes review faster without hiding detail. The root gives the reviewer a compact consistency check, while the step receipts preserve the evidence needed to understand a disputed action. If the system cannot retrieve a step, say so. If it cannot establish the outside outcome, say so. Clear limits are part of the receipt's value.
Operational review checklist
Before relying on an automated action, identify the exact claim that matters and the system that can independently confirm it. Preserve the request reference, execution reference, timestamp, scope, and observed result. If a payment, entitlement, workflow root, or outside state is involved, retain that reference separately. This prevents a single status line from carrying more meaning than the evidence supports. It also gives support and incident teams a common vocabulary when a caller reports that something did not happen.
Verification should be repeatable by someone who did not operate the workflow. A reviewer should be able to retrieve the record, compare its identifier and timestamp, inspect the tool and scope, check the committed bytes or output hash, and then compare the result with the owning system. If the record cannot be retrieved, label the result unavailable. If the record verifies but the outside state differs, label the execution and outcome separately. Do not rewrite a historical record after a retry. Add the retry as a new event and preserve the relationship.
Privacy belongs in the design from the beginning. Public evidence should contain only the fields needed to support the stated claim. Credentials, private prompts, customer records, wallet secrets, and confidential payloads should remain under the controlling system's access rules. A digest is an integrity value, not a universal privacy guarantee. Reviewers should document redactions and keep a restricted cross-reference when a public identifier must be connected to a private account or transaction.
These distinctions are useful whether the workflow is free, paid, synchronous, or asynchronous. They do not depend on a promise that automation is infallible. The strongest implementation says what the record proves, what another system proves, and what is still unknown. Use the public receipt verifier for the receipt portion, then follow the owning system's process for authorization, billing, delivery, or correctness.
Zambo link shape and a real request
A workflow receipt Zambo link should accept a request that names the ordered steps or session being inspected and return a record that commits to those steps. The exact API contract belongs to the service exposing it. A caller should read the Zambo link documentation rather than guessing a field name. For a session-based workflow, a request may look like this:
Advanced (for developers)
curl -fsSL https://zambo.dev/api/v1/sessions/SESSION_IDUse a real session identifier supplied by the workflow. Do not copy the example as if it were a live record. The response commonly contains a workflow identifier, ordered step references, a root commitment, timestamps, and a status. A trimmed illustrative response is shown below. It is not a receipt and it does not assert that this session exists.
Advanced (for developers)
{
"workflow_id": "example-only",
"steps": [{"receipt_id": "step-1"}, {"receipt_id": "step-2"}],
"root": "sha256:example",
"status": "recorded"
}How to review the response
First check that the workflow identifier belongs to the task under review. Next confirm that the steps are ordered and that every referenced receipt can be resolved. Recompute the root from the exact step commitments using the documented procedure. If a step is missing, changed, or unavailable, the workflow is incomplete. A root value copied from the response is not independent verification. The reviewer must obtain the underlying values again or mark the check unresolved.
What a workflow receipt proves
A workflow receipt can commit to the set and order of receipts that the workflow record names. It can help a reviewer see whether the recorded path contains a missing step or changed commitment. It does not prove that the workflow's goal was achieved, that the inputs were truthful, or that an outside system retained a side effect. Keep outcome checks separate. For a standards-oriented field and fixture reference, see the conformance page.
Failure handling
Transport errors, expired sessions, an unknown identifier, and an invalid root are different results. Report them separately. A timeout means the reviewer does not yet have evidence. It is not proof that the workflow failed. An invalid commitment is a verification failure. A valid commitment with an incorrect tool result is a valid record of an incorrect observation. This vocabulary helps incident responders avoid collapsing all uncertainty into one red status.
Practical adoption
Start with a short workflow whose steps are already individually observable. Store each step receipt before constructing the root. Preserve the exact bytes used by the commitment process. Generate the workflow summary only after the step references are available. Give reviewers a way to retrieve the workflow and its steps without asking the agent to narrate them again. Then test missing, reordered, and changed steps before relying on the feature for consequential work.
A workflow receipt is most useful when it makes review faster without hiding detail. The root gives the reviewer a compact consistency check, while the step receipts preserve the evidence needed to understand a disputed action. If the system cannot retrieve a step, say so. If it cannot establish the outside outcome, say so. Clear limits are part of the receipt's value.
Operational review checklist
Before relying on an automated action, identify the exact claim that matters and the system that can independently confirm it. Preserve the request reference, execution reference, timestamp, scope, and observed result. If a payment, entitlement, workflow root, or outside state is involved, retain that reference separately. This prevents a single status line from carrying more meaning than the evidence supports. It also gives support and incident teams a common vocabulary when a caller reports that something did not happen.
Verification should be repeatable by someone who did not operate the workflow. A reviewer should be able to retrieve the record, compare its identifier and timestamp, inspect the tool and scope, check the committed bytes or output hash, and then compare the result with the owning system. If the record cannot be retrieved, label the result unavailable. If the record verifies but the outside state differs, label the execution and outcome separately. Do not rewrite a historical record after a retry. Add the retry as a new event and preserve the relationship.
Privacy belongs in the design from the beginning. Public evidence should contain only the fields needed to support the stated claim. Credentials, private prompts, customer records, wallet secrets, and confidential payloads should remain under the controlling system's access rules. A digest is an integrity value, not a universal privacy guarantee. Reviewers should document redactions and keep a restricted cross-reference when a public identifier must be connected to a private account or transaction.
These distinctions are useful whether the workflow is free, paid, synchronous, or asynchronous. They do not depend on a promise that automation is infallible. The strongest implementation says what the record proves, what another system proves, and what is still unknown. Use the public receipt verifier for the receipt portion, then follow the owning system's process for authorization, billing, delivery, or correctness.
Merkle tree
The workflow links the ordered step receipt hashes into a tree.
Published root
The root commits to the workflow's step evidence for independent checks.
Verify the root in the browser
The workflow page's Verify control fetches each step's canonical receipt again, rebuilds the Merkle tree in the browser, and compares the computed root with the published root. A match confirms that the presented workflow manifest agrees with the retrieved step receipts. It does not claim that an external side effect happened unless that effect has its own observed evidence.
Workflow pages and indexing
Advanced (for developers)
Individual /workflow/<id> pages are session-scoped records marked noindex. That directive controls search indexing; it is not access control. This page is the public, indexable definition of the format.
Frequently asked questions
Does a workflow receipt replace a step receipt?
No. Each step keeps its own ordinary receipt. The workflow receipt references their hashes and provides a commitment to the workflow as a whole.
Can someone recompute the workflow root?
Yes. The step receipts can be fetched and their hashes organized into the same Merkle tree. The browser Verify control performs that check without relying on a server-side success label.
Does the root prove every claimed outcome?
No. It verifies the relationship between the workflow manifest and its step receipts. Claims about an outside effect still need corresponding observed evidence.