โ† Docs

Secondary receipts

A base execution receipt records work Zambo observed through its own MCP call. A secondary receipt is different: it lets a caller submit a result produced elsewhere and attach evidence for a bounded review.

Submit the record

This is the primary example. It is intentionally the documented URL-and-description shape, with no type field. Execute this JSON-RPC body verbatim against https://zambo.dev/api/mcp:

{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"secondary_receipt","arguments":{"output":"The completed work","source_url":"https://example.com/result","evidence":[{"url":"https://example.com/result","description":"Source evidence"}]}}}

The URL shorthand is normalized to the conservative web_link evidence type. The optional source_url identifies the primary result URL and is retained on the receipt.

Supported evidence types

Every typed evidence item uses type, data, and an optional description. The examples below are complete tools/call requests and each can be executed independently. Structured payloads are JSON strings so they match the published tool schema.

TypeTierWhat it represents
web_linkweakA URL or externally hosted result. The no-type {url,description} shorthand above maps here.
api_billing_receiptstrongProvider, receipt ID, and signature.
signed_git_commitstrongCommit identifier and signature.
onchain_txstrongTransaction hash and chain.
platform_signed_logstrongPlatform, event, and signature.
reproducibility_artifactstrongMatching artifact and expected output hashes.
tool_call_logmediumTool name, call time, and result hash.
file_timestampmediumFile path and timestamp.
structured_outputmediumSchema and value fields.
screenshotweakA screenshot URL or description.
unsaved_logweakA log that has not been independently signed or persisted.
env_varsweakEnvironment details supplied by the caller.
self_reportweakA caller statement without stronger supporting evidence.

web_link

{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"secondary_receipt","arguments":{"output":"A linked result","evidence":[{"type":"web_link","data":"https://example.com/result","description":"Linked result"}]}}}

api_billing_receipt

{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"secondary_receipt","arguments":{"output":"A billed API result","evidence":[{"type":"api_billing_receipt","data":"{\"provider\":\"example\",\"receipt_id\":\"r-1\",\"signature\":\"sig-1\"}","description":"Provider receipt"}]}}}

signed_git_commit

{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"secondary_receipt","arguments":{"output":"A signed commit","evidence":[{"type":"signed_git_commit","data":"{\"commit\":\"abc123\",\"signature\":\"sig-1\"}","description":"Signed commit"}]}}}

onchain_tx

{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"secondary_receipt","arguments":{"output":"An onchain result","evidence":[{"type":"onchain_tx","data":"{\"tx_hash\":\"0x123\",\"chain\":\"base\"}","description":"Confirmed transaction"}]}}}

platform_signed_log

{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"secondary_receipt","arguments":{"output":"A platform event","evidence":[{"type":"platform_signed_log","data":"{\"platform\":\"example\",\"signature\":\"sig-1\",\"event\":\"completed\"}","description":"Signed platform event"}]}}}

reproducibility_artifact

{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"secondary_receipt","arguments":{"output":"A reproducible artifact","evidence":[{"type":"reproducibility_artifact","data":"{\"artifact_hash\":\"sha256:abc\",\"expected_output_hash\":\"sha256:abc\"}","description":"Matching hashes"}]}}}

tool_call_log

{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"secondary_receipt","arguments":{"output":"A logged tool result","evidence":[{"type":"tool_call_log","data":"{\"tool\":\"build\",\"called_at\":\"2026-09-18T00:00:00Z\",\"result_hash\":\"sha256:abc\"}","description":"Tool call log"}]}}}

file_timestamp

{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"secondary_receipt","arguments":{"output":"A timestamped file","evidence":[{"type":"file_timestamp","data":"{\"path\":\"dist/output.txt\",\"timestamp\":\"2026-09-18T00:00:00Z\"}","description":"File timestamp"}]}}}

structured_output

{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"secondary_receipt","arguments":{"output":"A structured result","evidence":[{"type":"structured_output","data":"{\"schema\":\"result-v1\",\"value\":\"complete\"}","description":"Structured output"}]}}}

screenshot

{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"secondary_receipt","arguments":{"output":"A screenshot-backed result","evidence":[{"type":"screenshot","data":"https://example.com/result.png","description":"Result screenshot"}]}}}

unsaved_log

{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"secondary_receipt","arguments":{"output":"An unsaved log result","evidence":[{"type":"unsaved_log","data":"build completed locally","description":"Local log"}]}}}

env_vars

{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"secondary_receipt","arguments":{"output":"An environment-backed result","evidence":[{"type":"env_vars","data":"NODE_ENV=production","description":"Environment details"}]}}}

self_report

{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"secondary_receipt","arguments":{"output":"A caller-reported result","evidence":[{"type":"self_report","data":"The caller reports completion","description":"Self report"}]}}}

Use only information the caller is authorized to publish. The system stores a hash of the submitted output, evaluates the supplied evidence with the published scoring function, and exposes the resulting receipt through the normal public receipt routes. Weak evidence is recorded but does not become independent proof.

What it does not prove

Inspect and verify

Keep the returned receipt ID. Use /run/<id> for the human-readable handoff and /api/receipt/<id>/verify to recompute the stored hash. The page labels the secondary nature and the disclaimer supplied by the server.

Connect Zambo โ†’ ยท Read workflow patterns โ†’