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.
| Type | Tier | What it represents |
|---|---|---|
web_link | weak | A URL or externally hosted result. The no-type {url,description} shorthand above maps here. |
api_billing_receipt | strong | Provider, receipt ID, and signature. |
signed_git_commit | strong | Commit identifier and signature. |
onchain_tx | strong | Transaction hash and chain. |
platform_signed_log | strong | Platform, event, and signature. |
reproducibility_artifact | strong | Matching artifact and expected output hashes. |
tool_call_log | medium | Tool name, call time, and result hash. |
file_timestamp | medium | File path and timestamp. |
structured_output | medium | Schema and value fields. |
screenshot | weak | A screenshot URL or description. |
unsaved_log | weak | A log that has not been independently signed or persisted. |
env_vars | weak | Environment details supplied by the caller. |
self_report | weak | A 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
- It does not turn a self-report into a witnessed Zambo execution.
- It does not guarantee that an external business, user, or financial outcome occurred.
- It does not remove the need to inspect source evidence and the receipt status.
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.