Verifiable receipt d9b1c60b - pdf_extract result | Zambo
✓ This result hasn’t changed since it was saved.
Saved:
What was asked: The request recorded for this receipt.
Zambo is the verifiable work layer for AI.
Zambo is the verifiable work layer for AI. Verifiable receipt for a pdf_extract call on Zambo: {"url":"https://zambo.dev/guides/x402-agent-payments/","content_type":"text/html","word_count":2972,"extract
Observed result
{"url":"https://zambo.dev/guides/x402-agent-payments/","content_type":"text/html","word_count":2972,"extracted_text":"X402 day pass payments for funded AI agents | Zambo\n\n← All guides\n\nAgent payments · Zambo\n\nx402 Day Pass payments for funded AI agents\n\nx402 agent payments, live on this site The endpoint below answers a real x402 challenge today. A funded agent using a compatible x402 client may pay for its own Day Pass within its spending policy. Do not submit a payment merely to inspect the challenge.\n\ncurl -i https://zambo.dev/api/x402/day-pass\n\nThe GET returns HTTP 402. This is the checked response shape, limited to the challenge's resource and payment requirement fields. Fetch a fresh challenge before authorizing payment.\n\n{\n\n"x402Version": 2,\n\n"resource": {\n\n"url": "https://zambo.dev/api/x402/day-pass"\n\n},\n\n"accepts": [\n\n{\n\n"scheme": "exact",\n\n"amount": "990000",\n\n"network": "eip155:8453",\n\n"asset": "0x8335…2913",\n\n"payTo": "0xb753…b9AC"\n\n}\n\n]\n}\n\nAfter settlement, keep the spend receipt and access expiry with the subsequent tool receipt. The paid call's work enters the same verifiable receipt trail as a free Zambo call; a payment alone is not evidence that the work succeeded. x402 is a payment convention Zambo implements, not a Zambo invention. 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.\n\nZambo x402 returns a machine-readable HTTP 402 challenge for the $0.99, 24-hour USDC-on-Base Day Pass. A funded agent may pay for its own Day Pass when its configured spending policy permits; users can instruct it not to self-pay or to ask first. This permission applies only to the Day Pass, not Zambo Pass or ProvibeCode. The Day Pass is time-based, not per-call.\n\nTry the Zambo demo · Explore Zambo\n\nHow Zambo does it\n\nZambo publishes its payment contract at /.well-known/x402 . Request GET /api/x402/day-pass without payment to receive the live x402 challenge for $0.99 USDC on Base. If the agent is funded and its spending policy allows this purchase, an official client signs the EIP-3009 authorization and retries POST /api/x402/day-pass with the proof. Respect any user instruction not to self-pay or to ask first. The server verifies settlement before activating the 24-hour pass. MCP callers can use day_pass_activate for the same challenge flow and bind it to the current job with _session_id .\n\nOfficial TypeScript client\n\nmatching package versions on October 4, 2026: @x402/core , @x402/fetch , and @x402/evm 2.28.0. The client automatically handles the challenge after you invoke it. The example enforces the Base USDC asset and 0.99 USDC amount in the x402 hook. It submits a real payment on Base, so use it only with a funded agent and within its configured spending policy. Users may instruct the agent not to self-pay or to ask first. Keep the wallet key in a secret store.\n\nnpm install @x402/core@2.28.0 @x402/fetch@2.28.0 @x402/evm@2.28.0 viem\n\nimport { wrapFetchWithPayment, x402HTTPClient } from \"@x402/fetch\";\nimport { x402Client } from \"@x402/core/client\";\nimport { ExactEvmScheme } from \"@x402/evm/exact/client\";\nimport { privateKeyToAccount } from \"viem/accounts\";\n\nconst key = process.env.EVM_PRIVATE_KEY;\nif (!key || !/^0x[a-fA-F0-9]{64}$/.test(key)) throw new Error(\"Load the wallet key from a secret store.\");\nconst signer = privateKeyToAccount(key as \\`0x${string}\\`);\n\nconst client = new x402Client();\nclient.register(\"eip155:8453\", new ExactEvmScheme(signer));\nclient.onBeforePaymentCreation(async ({ selectedRequirements }) => {\n\nconst correctUsdc = selectedRequirements.asset.toLowerCase() === \"0x8335…2913\";\n\nif (selectedRequirements.network !== \"eip155:8453\" || !correctUsdc || String(selectedRequirements.amount) !== \"990000\") {\n\nreturn { abort: true, reason: \"This example only permits the 0.99 USDC Base Day Pass.\" };\n\n}\n});\nconst fetchWithPayment = wrapFetchWithPayment(fetch, client);\nconst httpClient = new x402HTTPClient(client);\nconst jobId = process.env.ZAMBO_JOB_ID; // Optional: bind the pass to this existing job.\nconst body = jobId ? { _session_id: jobId } : {};\nconst response = await fetchWithPayment(\"https://zambo.dev/api/x402/day-pass\", {\n\nmethod: \"POST\",\n\nheaders: { \"Content-Type\": \"application/json\" },\n\nbody: JSON.stringify(body),\n});\nconst result = await httpClient.processResponse(response);\n\nif (result.paymentStatus !== \"settled\" || !response.ok) {\n\nconsole.error(\"Payment or activation was refused; inspect the refusal receipt and do not retry blindly.\");\n\nprocess.exitCode = 1;\n} else {\n\nconst payload = result.body && typeof result.body === \"object\" ? result.body as Record<string, unknown> : {};\n\nconst accessKey = payload.access_key;\n\nconst expiresAt = payload.expires_at;\n\nconst spendReceipt = payload.spend_receipt;\n\nif (typeof accessKey !== \"string\" || !accessKey || typeof expiresAt !== \"string\" || !spendReceipt) {\n\nthrow new Error(\"Activation response is missing its access key, expiry, or spend receipt.\");\n\n}\n\n// Keep accessKey in memory or a secret store. Never print it or put it in a URL.\n\n// Resume the same job with X-Zambo-Key (or _zambo_key) before expiresAt.\n\nconsole.log(\"Day Pass active until\", expiresAt, \"settlement\", payload.payment?.transaction);\n}\n\nOfficial Python client\n\nThe official PyPI package was x402 2.25.0 when checked on October 4, 2026. Its HTTP wrapper handles the challenge and retry. This submits a real payment on Base, so use it only with a funded agent and within its configured spending policy. Users may instruct the agent not to self-pay or to ask first. The example checks the exact asset, network, and amount in the official
This is the saved result preview, not proof that the answer was correct.
Check this receipt
This page shows the result and when it was saved. Use the receipt checker to see whether the saved result has changed.
Show technical provenance details
Provenance for every timeline entry
- EXECUTED BY ZAMBOZambo ran the tool call itself.
- OBSERVED VIA GATEWAYA Zambo gateway observed request and response bytes from the named external executor. Zambo did not run that external action.
- LOGGED BY AGENTAn agent or local hook reported the action. Zambo attests that the record is unchanged since logging, not that the action happened as described.
Private agent reasoning, built-in client actions, and direct calls to unrelated MCP servers are not included unless an agent or gateway reports them.
What is an execution receipt?
An execution receipt is a public record of a reported AI agent tool call. Its byte commitment and provenance claim can be checked independently; neither alone authenticates the issuer. Read the canonical definition of an AI agent execution receipt.
What the receipt can and cannot prove
What is this?
Zambo's receipt store reports a tool call and records its result. The SHA-256 commitment covers the exact canonical bytes. The provenance label is bound to v0.4 receipt bytes when that check passes, but no pinned signature or trusted issuer key is checked. An anchor can timestamp a fingerprint; it does not authenticate the issuer.
Access is active
This receipt was created with paid access. Your Day Pass remains active until it expires; no additional Day Pass unlock is needed.
Or re-run this exact call, using the same tool and arguments.
Share this receipt
Show technical verification checks
Verification checks
- SHA-256 commitment: Checked independently against the exact decoded bytes
- Provenance binding: PASS; The metadata claim is consistent with the verified receipt bytes; issuer is not authenticated.
- Metadata binding: PASS; metadata_hash matches the canonical metadata block.
- Issuer authentication: NOT CHECKED; no pinned signing key or trusted issuer was supplied
- Signature: NOT CHECKED; no Ed25519 signature or pinned key is supplied
- Chain: NOT CHECKED; no append-only chain proof is validated
- Stored timestamp: 2026-10-20T01:29:32.419Z; external immutability is not checked
Get proof like this from your own AI
Get receipts for your own AI work: add zambo.dev/mcp
One URL, no key. Copy the line for your AI and add it yourself in its settings.
- ClaudeSettings, Connectors, Add custom connector, paste the URL.
https://zambo.dev/mcp - ChatGPTSettings, Apps and Connectors, developer mode, create a connector with this URL.
https://zambo.dev/mcp - GrokAdd a remote MCP server in your Grok client and paste the URL.
https://zambo.dev/mcp - CursorPaste into ~/.cursor/mcp.json.
{"mcpServers":{"zambo":{"url":"https://zambo.dev/mcp"}}}
Nothing is installed automatically. Full setup guides
Want a verifiable receipt for every job your bots do?
Add Zambo Receipt Bot to your team · File this in Receipt Bot
Show receipt data and verification evidence
Committed provenance claim
EXECUTED BY ZAMBO
The metadata claim is consistent with the verified receipt bytes; issuer is not authenticated.
- Receipt ID
d9b1c60b-fc84-474f-a31f-36f81b597d59- SHA-256 output hash
sha256:b3be35899b95510ae85e281ce1f9e61214a48a67aaaa89c662e0aa38645f766e- Canonical bytes
eyJjYWxsZXIiOnsiaWQiOiJzaGEyNTY6MTExZGNlNzdjMjc2ZmNmYjc3OTBkNzhjNjQxYmVhOGZmNjlkYjVmZWUzMjZkMTE2YTc2ZjEzNzM5ZWEwNGI1MiIsInR5cGUiOiJhcGlfa2V5In0sImlzc3Vlcl9jbGFpbXMiOnsicHJvdmVuYW5jZV9jbGFzcyI6IkVYRUNVVEVEIEJZIFpBTUJPIn0sIm91dHB1dCI6eyJjb250ZW50X3R5cGUiOiJ0ZXh0L2h0bWwiLCJleHRyYWN0ZWRfdGV4dCI6Ilg0MDIgZGF5IHBhc3MgcGF5bWVudHMgZm9yIGZ1bmRlZCBBSSBhZ2VudHMgfCBaYW1ib1xuXG7ihpAgQWxsIGd1aWRlc1xuXG5BZ2VudCBwYXltZW50cyDCtyBaYW1ib1xuXG54NDAyIERheSBQYXNzIHBheW1lbnRzIGZvciBmdW5kZWQgQUkgYWdlbnRzXG5cbng0MDIgYWdlbnQgcGF5bWVudHMsIGxpdmUgb24gdGhpcyBzaXRlICBUaGUgZW5kcG9pbnQgYmVsb3cgYW5zd2VycyBhIHJlYWwgeDQwMiBjaGFsbGVuZ2UgdG9kYXkuIEEgZnVuZGVkIGFnZW50IHVzaW5nIGEgY29tcGF0aWJsZSB4NDAyIGNsaWVudCBtYXkgcGF5IGZvciBpdHMgb3duIERheSBQYXNzIHdpdGhpbiBpdHMgc3BlbmRpbmcgcG9saWN5LiBEbyBub3Qgc3VibWl0IGEgcGF5bWVudCBtZXJlbHkgdG8gaW5zcGVjdCB0aGUgY2hhbGxlbmdlLlxuXG5jdXJsIC1pIGh0dHBzOi8vemFtYm8uZGV2L2FwaS94NDAyL2RheS1wYXNzXG5cblRoZSBHRVQgcmV0dXJucyBIVFRQIDQwMi4gVGhpcyBpcyB0aGUgY2hlY2tlZCByZXNwb25zZSBzaGFwZSwgbGltaXRlZCB0byB0aGUgY2hhbGxlbmdlJ3MgcmVzb3VyY2UgYW5kIHBheW1lbnQgcmVxdWlyZW1lbnQgZmllbGRzLiBGZXRjaCBhIGZyZXNoIGNoYWxsZW5nZSBiZWZvcmUgYXV0aG9yaXppbmcgcGF5bWVudC5cblxue1xuXG4mcXVvdDt4NDAyVmVyc2lvbiZxdW90OzogMixcblxuJnF1b3Q7cmVzb3VyY2UmcXVvdDs6IHtcblxuJnF1b3Q7dXJsJnF1b3Q7OiAmcXVvdDtodHRwczovL3phbWJvLmRldi9hcGkveDQwMi9kYXktcGFzcyZxdW90O1xuXG59LFxuXG4mcXVvdDthY2NlcHRzJnF1b3Q7OiBbXG5cbntcblxuJnF1b3Q7c2NoZW1lJnF1b3Q7OiAmcXVvdDtleGFjdCZxdW90OyxcblxuJnF1b3Q7YW1vdW50JnF1b3Q7OiAmcXVvdDs5OTAwMDAmcXVvdDssXG5cbiZxdW90O25ldHdvcmsmcXVvdDs6ICZxdW90O2VpcDE1NTo4NDUzJnF1b3Q7LFxuXG4mcXVvdDthc3NldCZxdW90OzogJnF1b3Q7MHg4MzM1ODlmY2Q2ZWRiNmUwOGY0YzdjMzJkNGY3MWI1NGJkYTAyOTEzJnF1b3Q7LFxuXG4mcXVvdDtwYXlUbyZxdW90OzogJnF1b3Q7MHhiNzUzYmU1RWFjNUIyOWM3MTEwNTFEZkY5MTI3OTgzNGU5QzliOUFDJnF1b3Q7XG5cbn1cblxuXVxufVxuXG5BZnRlciBzZXR0bGVtZW50LCBrZWVwIHRoZSBzcGVuZCByZWNlaXB0IGFuZCBhY2Nlc3MgZXhwaXJ5IHdpdGggdGhlIHN1YnNlcXVlbnQgdG9vbCByZWNlaXB0LiBUaGUgcGFpZCBjYWxsJ3Mgd29yayBlbnRlcnMgdGhlIHNhbWUgdmVyaWZpYWJsZSByZWNlaXB0IHRyYWlsIGFzIGEgZnJlZSBaYW1ibyBjYWxsOyBhIHBheW1lbnQgYWxvbmUgaXMgbm90IGV2aWRlbmNlIHRoYXQgdGhlIHdvcmsgc3VjY2VlZGVkLiB4NDAyIGlzIGEgcGF5bWVudCBjb252ZW50aW9uIFphbWJvIGltcGxlbWVudHMsIG5vdCBhIFphbWJvIGludmVudGlvbi4gIEEgcmVjZWlwdCBwcm92ZXMgdGhlIHNhdmVkIHJlc3VsdCB3YXMgbm90IGNoYW5nZWQgc2luY2UgaXQgd2FzIHNhdmVkLiBJdCBuZXZlciBwcm92ZXMgdGhlIGFuc3dlciB3YXMgcmlnaHQgYW5kIG5ldmVyIHByb3ZlcyBhbiBleHRlcm5hbCBldmVudCBoYXBwZW5lZC5cblxuWmFtYm8geDQwMiByZXR1cm5zIGEgbWFjaGluZS1yZWFkYWJsZSBIVFRQIDQwMiBjaGFsbGVuZ2UgZm9yIHRoZSAkMC45OSwgMjQtaG91ciBVU0RDLW9uLUJhc2UgRGF5IFBhc3MuIEEgZnVuZGVkIGFnZW50IG1heSBwYXkgZm9yIGl0cyBvd24gRGF5IFBhc3Mgd2hlbiBpdHMgY29uZmlndXJlZCBzcGVuZGluZyBwb2xpY3kgcGVybWl0czsgdXNlcnMgY2FuIGluc3RydWN0IGl0IG5vdCB0byBzZWxmLXBheSBvciB0byBhc2sgZmlyc3QuIFRoaXMgcGVybWlzc2lvbiBhcHBsaWVzIG9ubHkgdG8gdGhlIERheSBQYXNzLCBub3QgWmFtYm8gUGFzcyBvciBQcm92aWJlQ29kZS4gVGhlIERheSBQYXNzIGlzIHRpbWUtYmFzZWQsIG5vdCBwZXItY2FsbC5cblxuVHJ5IHRoZSBaYW1ibyBkZW1vICDCtyAgRXhwbG9yZSBaYW1ib1xuXG5Ib3cgWmFtYm8gZG9lcyBpdFxuXG5aYW1ibyBwdWJsaXNoZXMgaXRzIHBheW1lbnQgY29udHJhY3QgYXQgIC8ud2VsbC1rbm93bi94NDAyIC4gUmVxdWVzdCAgR0VUIC9hcGkveDQwMi9kYXktcGFzcyAgd2l0aG91dCBwYXltZW50IHRvIHJlY2VpdmUgdGhlIGxpdmUgeDQwMiBjaGFsbGVuZ2UgZm9yICQwLjk5IFVTREMgb24gQmFzZS4gSWYgdGhlIGFnZW50IGlzIGZ1bmRlZCBhbmQgaXRzIHNwZW5kaW5nIHBvbGljeSBhbGxvd3MgdGhpcyBwdXJjaGFzZSwgYW4gb2ZmaWNpYWwgY2xpZW50IHNpZ25zIHRoZSBFSVAtMzAwOSBhdXRob3JpemF0aW9uIGFuZCByZXRyaWVzICBQT1NUIC9hcGkveDQwMi9kYXktcGFzcyAgd2l0aCB0aGUgcHJvb2YuIFJlc3BlY3QgYW55IHVzZXIgaW5zdHJ1Y3Rpb24gbm90IHRvIHNlbGYtcGF5IG9yIHRvIGFzayBmaXJzdC4gVGhlIHNlcnZlciB2ZXJpZmllcyBzZXR0bGVtZW50IGJlZm9yZSBhY3RpdmF0aW5nIHRoZSAyNC1ob3VyIHBhc3MuIE1DUCBjYWxsZXJzIGNhbiB1c2UgIGRheV9wYXNzX2FjdGl2YXRlICBmb3IgdGhlIHNhbWUgY2hhbGxlbmdlIGZsb3cgYW5kIGJpbmQgaXQgdG8gdGhlIGN1cnJlbnQgam9iIHdpdGggIF9zZXNzaW9uX2lkIC5cblxuT2ZmaWNpYWwgVHlwZVNjcmlwdCBjbGllbnRcblxubWF0Y2hpbmcgcGFja2FnZSB2ZXJzaW9ucyBvbiBPY3RvYmVyIDQsIDIwMjY6ICBAeDQwMi9jb3JlICwgIEB4NDAyL2ZldGNoICwgYW5kICBAeDQwMi9ldm0gIDIuMjguMC4gVGhlIGNsaWVudCBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgdGhlIGNoYWxsZW5nZSBhZnRlciB5b3UgaW52b2tlIGl0LiBUaGUgZXhhbXBsZSBlbmZvcmNlcyB0aGUgQmFzZSBVU0RDIGFzc2V0IGFuZCAwLjk5IFVTREMgYW1vdW50IGluIHRoZSB4NDAyIGhvb2suIEl0IHN1Ym1pdHMgYSByZWFsIHBheW1lbnQgb24gQmFzZSwgc28gdXNlIGl0IG9ubHkgd2l0aCBhIGZ1bmRlZCBhZ2VudCBhbmQgd2l0aGluIGl0cyBjb25maWd1cmVkIHNwZW5kaW5nIHBvbGljeS4gVXNlcnMgbWF5IGluc3RydWN0IHRoZSBhZ2VudCBub3QgdG8gc2VsZi1wYXkgb3IgdG8gYXNrIGZpcnN0LiBLZWVwIHRoZSB3YWxsZXQga2V5IGluIGEgc2VjcmV0IHN0b3JlLlxuXG5ucG0gaW5zdGFsbCBAeDQwMi9jb3JlQDIuMjguMCBAeDQwMi9mZXRjaEAyLjI4LjAgQHg0MDIvZXZtQDIuMjguMCB2aWVtXG5cbmltcG9ydCB7IHdyYXBGZXRjaFdpdGhQYXltZW50LCB4NDAySFRUUENsaWVudCB9IGZyb20gXCJAeDQwMi9mZXRjaFwiO1xuaW1wb3J0IHsgeDQwMkNsaWVudCB9IGZyb20gXCJAeDQwMi9jb3JlL2NsaWVudFwiO1xuaW1wb3J0IHsgRXhhY3RFdm1TY2hlbWUgfSBmcm9tIFwiQHg0MDIvZXZtL2V4YWN0L2NsaWVudFwiO1xuaW1wb3J0IHsgcHJpdmF0ZUtleVRvQWNjb3VudCB9IGZyb20gXCJ2aWVtL2FjY291bnRzXCI7XG5cbmNvbnN0IGtleSA9IHByb2Nlc3MuZW52LkVWTV9QUklWQVRFX0tFWTtcbmlmICgha2V5IHx8ICEvXjB4W2EtZkEtRjAtOV17NjR9JC8udGVzdChrZXkpKSB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkIHRoZSB3YWxsZXQga2V5IGZyb20gYSBzZWNyZXQgc3RvcmUuXCIpO1xuY29uc3Qgc2lnbmVyID0gcHJpdmF0ZUtleVRvQWNjb3VudChrZXkgYXMgXFxgMHgke3N0cmluZ31cXGApO1xuXG5jb25zdCBjbGllbnQgPSBuZXcgeDQwMkNsaWVudCgpO1xuY2xpZW50LnJlZ2lzdGVyKFwiZWlwMTU1Ojg0NTNcIiwgbmV3IEV4YWN0RXZtU2NoZW1lKHNpZ25lcikpO1xuY2xpZW50Lm9uQmVmb3JlUGF5bWVudENyZWF0aW9uKGFzeW5jICh7IHNlbGVjdGVkUmVxdWlyZW1lbnRzIH0pID0+IHtcblxuY29uc3QgY29ycmVjdFVzZGMgPSBzZWxlY3RlZFJlcXVpcmVtZW50cy5hc3NldC50b0xvd2VyQ2FzZSgpID09PSBcIjB4ODMzNTg5ZmNkNmVkYjZlMDhmNGM3YzMyZDRmNzFiNTRiZGEwMjkxM1wiO1xuXG5pZiAoc2VsZWN0ZWRSZXF1aXJlbWVudHMubmV0d29yayAhPT0gXCJlaXAxNTU6ODQ1M1wiIHx8ICFjb3JyZWN0VXNkYyB8fCBTdHJpbmcoc2VsZWN0ZWRSZXF1aXJlbWVudHMuYW1vdW50KSAhPT0gXCI5OTAwMDBcIikge1xuXG5yZXR1cm4geyBhYm9ydDogdHJ1ZSwgcmVhc29uOiBcIlRoaXMgZXhhbXBsZSBvbmx5IHBlcm1pdHMgdGhlIDAuOTkgVVNEQyBCYXNlIERheSBQYXNzLlwiIH07XG5cbn1cbn0pO1xuY29uc3QgZmV0Y2hXaXRoUGF5bWVudCA9IHdyYXBGZXRjaFdpdGhQYXltZW50KGZldGNoLCBjbGllbnQpO1xuY29uc3QgaHR0cENsaWVudCA9IG5ldyB4NDAySFRUUENsaWVudChjbGllbnQpO1xuY29uc3Qgam9iSWQgPSBwcm9jZXNzLmVudi5aQU1CT19KT0JfSUQ7IC8vIE9wdGlvbmFsOiBiaW5kIHRoZSBwYXNzIHRvIHRoaXMgZXhpc3Rpbmcgam9iLlxuY29uc3QgYm9keSA9IGpvYklkID8geyBfc2Vzc2lvbl9pZDogam9iSWQgfSA6IHt9O1xuY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaFdpdGhQYXltZW50KFwiaHR0cHM6Ly96YW1iby5kZXYvYXBpL3g0MDIvZGF5LXBhc3NcIiwge1xuXG5tZXRob2Q6IFwiUE9TVFwiLFxuXG5oZWFkZXJzOiB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sXG5cbmJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxufSk7XG5jb25zdCByZXN1bHQgPSBhd2FpdCBodHRwQ2xpZW50LnByb2Nlc3NSZXNwb25zZShyZXNwb25zZSk7XG5cbmlmIChyZXN1bHQucGF5bWVudFN0YXR1cyAhPT0gXCJzZXR0bGVkXCIgfHwgIXJlc3BvbnNlLm9rKSB7XG5cbmNvbnNvbGUuZXJyb3IoXCJQYXltZW50IG9yIGFjdGl2YXRpb24gd2FzIHJlZnVzZWQ7IGluc3BlY3QgdGhlIHJlZnVzYWwgcmVjZWlwdCBhbmQgZG8gbm90IHJldHJ5IGJsaW5kbHkuXCIpO1xuXG5wcm9jZXNzLmV4aXRDb2RlID0gMTtcbn0gZWxzZSB7XG5cbmNvbnN0IHBheWxvYWQgPSByZXN1bHQuYm9keSAmJiB0eXBlb2YgcmVzdWx0LmJvZHkgPT09IFwib2JqZWN0XCIgPyByZXN1bHQuYm9keSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA6IHt9O1xuXG5jb25zdCBhY2Nlc3NLZXkgPSBwYXlsb2FkLmFjY2Vzc19rZXk7XG5cbmNvbnN0IGV4cGlyZXNBdCA9IHBheWxvYWQuZXhwaXJlc19hdDtcblxuY29uc3Qgc3BlbmRSZWNlaXB0ID0gcGF5bG9hZC5zcGVuZF9yZWNlaXB0O1xuXG5pZiAodHlwZW9mIGFjY2Vzc0tleSAhPT0gXCJzdHJpbmdcIiB8fCAhYWNjZXNzS2V5IHx8IHR5cGVvZiBleHBpcmVzQXQgIT09IFwic3RyaW5nXCIgfHwgIXNwZW5kUmVjZWlwdCkge1xuXG50aHJvdyBuZXcgRXJyb3IoXCJBY3RpdmF0aW9uIHJlc3BvbnNlIGlzIG1pc3NpbmcgaXRzIGFjY2VzcyBrZXksIGV4cGlyeSwgb3Igc3BlbmQgcmVjZWlwdC5cIik7XG5cbn1cblxuLy8gS2VlcCBhY2Nlc3NLZXkgaW4gbWVtb3J5IG9yIGEgc2VjcmV0IHN0b3JlLiBOZXZlciBwcmludCBpdCBvciBwdXQgaXQgaW4gYSBVUkwuXG5cbi8vIFJlc3VtZSB0aGUgc2FtZSBqb2Igd2l0aCBYLVphbWJvLUtleSAob3IgX3phbWJvX2tleSkgYmVmb3JlIGV4cGlyZXNBdC5cblxuY29uc29sZS5sb2coXCJEYXkgUGFzcyBhY3RpdmUgdW50aWxcIiwgZXhwaXJlc0F0LCBcInNldHRsZW1lbnRcIiwgcGF5bG9hZC5wYXltZW50Py50cmFuc2FjdGlvbik7XG59XG5cbk9mZmljaWFsIFB5dGhvbiBjbGllbnRcblxuVGhlIG9mZmljaWFsIFB5UEkgcGFja2FnZSB3YXMgIHg0MDIgIDIuMjUuMCB3aGVuIGNoZWNrZWQgb24gT2N0b2JlciA0LCAyMDI2LiBJdHMgSFRUUCB3cmFwcGVyIGhhbmRsZXMgdGhlIGNoYWxsZW5nZSBhbmQgcmV0cnkuIFRoaXMgc3VibWl0cyBhIHJlYWwgcGF5bWVudCBvbiBCYXNlLCBzbyB1c2UgaXQgb25seSB3aXRoIGEgZnVuZGVkIGFnZW50IGFuZCB3aXRoaW4gaXRzIGNvbmZpZ3VyZWQgc3BlbmRpbmcgcG9saWN5LiBVc2VycyBtYXkgaW5zdHJ1Y3QgdGhlIGFnZW50IG5vdCB0byBzZWxmLXBheSBvciB0byBhc2sgZmlyc3QuIFRoZSBleGFtcGxlIGNoZWNrcyB0aGUgZXhhY3QgYXNzZXQsIG5ldHdvcmssIGFuZCBhbW91bnQgaW4gdGhlIG9mZmljaWFsIGNsaWVudCBob29rLlxuXG5waXAgaW5zdGFsbCBcIng0MDJbaHR0cHgsZXZtXT09Mi4yNS4wXCJcblxuaW1wb3J0IGFzeW5jaW9cbmltcG9ydCBvc1xuZnJvbSBldGhfYWNjb3VudCBpbXBvcnQgQWNjb3VudFxuZnJvbSB4NDAyIGltcG9ydCBBYm9ydFJlc3VsdCwgeDQwMkNsaWVudFxuZnJvbSB4NDAyLmh0dHAuY2xpZW50cyBpbXBvcnQgeDQwMkh0dHB4Q2xpZW50XG5mcm9tIHg0MDIubWVjaGFuaXNtcy5ldm0gaW1wb3J0IEV0aEFjY291bnRTaWduZXJcbmZyb20geDQwMi5tZWNoYW5pc21zLmV2bS5leGFjdC5yZWdpc3RlciBpbXBvcnQgcmVnaXN0ZXJfZXhhY3RfZXZtX2NsaWVudFxuXG5hc3luYyBkZWYgbWFpbigpOlxuXG5jbGllbnQgPSB4NDAyQ2xpZW50KClcblxuYWNjb3VudCA9IEFjY291bnQuZnJvbV9rZXkob3MuZW52aXJvbltcIkVWTV9QUklWQVRFX0tFWVwiXSlcblxucmVnaXN0ZXJfZXhhY3RfZXZtX2NsaWVudChjbGllbnQsIEV0aEFjY291bnRTaWduZXIoYWNjb3VudCkpXG5cbmFzeW5jIGRlZiBlbmZvcmNlX2RheV9wYXNzX3NwZW5kaW5nX3BvbGljeShjb250ZXh0KTpcblxucmVxdWlyZW1lbnRzID0gY29udGV4dC5zZWxlY3RlZF9yZXF1aXJlbWVudHNcblxuY29ycmVjdF91c2RjID0gcmVxdWlyZW1lbnRzLmFzc2V0Lmxvd2VyKCkgPT0gXCIweDgzMzU4OWZjZDZlZGI2ZTA4ZjRjN2MzMmQ0ZjcxYjU0YmRhMDI5MTNcIlxuXG5pZiByZXF1aXJlbWVudHMubmV0d29yayAhPSBcImVpcDE1NTo4NDUzXCIgb3Igbm90IGNvcnJlY3RfdXNkYyBvciBpbnQocmVxdWlyZW1lbnRzLmFtb3VudCkgIT0gOTkwMDAwOlxuXG5yZXR1cm4gQWJvcnRSZXN1bHQocmVhc29uPVwiVGhpcyBleGFtcGxlIG9ubHkgcGVybWl0cyB0aGUgMC45OSBVU0RDIEJhc2UgRGF5IFBhc3MuXCIpXG5cbmNsaWVudC5vbl9iZWZvcmVfcGF5bWVudF9jcmVhdGlvbihlbmZvcmNlX2RheV9wYXNzX3NwZW5kaW5nX3BvbGljeSlcblxuYXN5bmMgd2l0aCB4NDAySHR0cHhDbGllbnQoY2xpZW50KSBhcyBodHRwOlxuXG5qb2JfaWQgPSBvcy5nZXRlbnYoXCJaQU1CT19KT0JfSURcIilcblxucmVzcG9uc2UgPSBhd2FpdCBodHRwLnBvc3QoXG5cblwiaHR0cHM6Ly96YW1iby5kZXYvYXBpL3g0MDIvZGF5LXBhc3NcIixcblxuanNvbj17XCJfc2Vzc2lvbl9pZFwiOiBqb2JfaWR9IGlmIGpvYl9pZCBlbHNlIHt9LFxuXG4pXG5cbmF3YWl0IHJlc3BvbnNlLmFyZWFkKClcblxuaWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgIT0gMjAwOlxuXG5wcmludChcIlBheW1lbnQgb3IgYWN0aXZhdGlvbiB3YXMgcmVmdXNlZDsgaW5zcGVjdCB0aGUgcmVmdXNhbCByZWNlaXB0IGFuZCBkbyBub3QgcmV0cnkgYmxpbmRseS5cIilcblxucmV0dXJuXG5cbnJlc3VsdCA9IHJlc3BvbnNlLmpzb24oKVxuXG5hY2Nlc3Nfa2V5ID0gcmVzdWx0LmdldChcImFjY2Vzc19rZXlcIilcblxuZXhwaXJlc19hdCA9IHJlc3VsdC5nZXQoXCJleHBpcmVzX2F0XCIpXG5cbnNwZW5kX3JlY2VpcHQgPSByZXN1bHQuZ2V0KFwic3BlbmRfcmVjZWlwdFwiKVxuXG5pZiBub3QgaXNpbnN0YW5jZShhY2Nlc3Nfa2V5LCBzdHIpIG9yIG5vdCBhY2Nlc3Nfa2V5IG9yIG5vdCBpc2luc3RhbmNlKGV4cGlyZXNfYXQsIHN0cikgb3Igbm90IHNwZW5kX3JlY2VpcHQ6XG5cbnJhaXNlIFJ1bnRpbWVFcnJvcihcIkFjdGl2YXRpb24gcmVzcG9uc2UgaXMgbWlzc2luZyBpdHMgYWNjZXNzIGtleSwgZXhwaXJ5LCBvciBzcGVuZCByZWNlaXB0LlwiKVxuXG4jIEtlZXAgYWNjZXNzX2tleSBpbiBtZW1vcnkgb3IgYSBzZWNyZXQgc3RvcmUuIE5ldmVyIHByaW50IGl0IG9yIHB1dCBpdCBpbiBhIFVSTC5cblxuIyBSZXN1bWUgdGhlIHNhbWUgam9iIHdpdGggWC1aYW1iby1LZXkgKG9yIF96YW1ib19rZXkpIGJlZm9yZSBleHBpcmVzX2F0LlxuXG5hc3luY2lvLnJ1bihtYWluKCkpXG5cbkh1bWFuIGNoZWNrb3V0IHZpYSBQYXlQYWxcblxuQXNrIHRoZSBwZXJzb24gd2hldGhlciB0aGV5IHdhbnQgYSBQYXlQYWwgY2hlY2tvdXQgbGluay4gT25seSBhZnRlciB0aGV5IGV4cGxpY2l0bHkgYWdyZWUsIGNhbGwgIGRheV9wYXNzX2NoZWNrb3V0X2xpbmsgIHdpdGggIGh1bWFuX2FwcHJvdmVkPXRydWUgLiBUaGUgMzAtbWludXRlIFVSTCBjcmVhdGVzIG5vIG9yZGVyIG9yIGNoYXJnZTsgdGhlIHBlcnNvbiBtdXN0IG9wZW4gaXQgYW5kIGFwcHJvdmUgcGF5bWVudC4gVGhlbiBjaGVjayB3aXRoICBkYXlfcGFzc19zdGF0dXMgIGluIHRoZSBzYW1lIE1DUCBzZXNzaW9uLiBTdGF0dXMgZXhwb3NlcyBhY3RpdmF0aW9uIGFuZCBleHBpcnksIG4iLCJub3RlIjoiVGV4dCB0cnVuY2F0ZWQgdG8gODAwMCBjaGFycy4gRnVsbCBkb2N1bWVudCBpcyAyMDUxNCBjaGFycy4iLCJ1cmwiOiJodHRwczovL3phbWJvLmRldi9ndWlkZXMveDQwMi1hZ2VudC1wYXltZW50cy8iLCJ3b3JkX2NvdW50IjoyOTcyfSwicmVjZWlwdF9zY2hlbWFfdmVyc2lvbiI6IjAuNCIsInNpZGVfZWZmZWN0cyI6eyJkZWNsYXJhdGlvbl9oYXNoIjoic2hhMjU2OjQ1YWFkMzhmM2FhOTgyYjlhYWZlOTJlY2I0MTZlYmU5ODc5MWVkZGJhZjhhYjZkZjBiZDA4NjA1YjdjMWJmZWUiLCJkZWNsYXJlZCI6WyJub25lIl0sInNjaGVtYV92ZXJzaW9uIjoiemFtYm8tc2lkZS1lZmZlY3RzLzEifSwidG9vbCI6eyJuYW1lIjoicGRmX2V4dHJhY3QiLCJzY29wZSI6InB1YmxpYyIsInZlcnNpb24iOiI0LjAuMCJ9fQ==- Timestamp
Bound call context
- Receipt schema
0.4- Tool name
pdf_extract- Tool version
4.0.0- Permission scope
public- Caller type
api_key- Caller ID
sha256:111dce77c276fcfb7790d78c641bea8ff69db5fee326d116a76f13739ea04b52- Declared side effects
none- Side-effects schema
zambo-side-effects/1- Declaration hash
sha256:45aad38f3aa982b9aafe92ecb416ebe98791eddbaf8ab6df0bd08605b7c1bfee
This records what the server-side tool contract declared at call time. It does not independently verify that a downstream side effect happened.
Bound upstream evidence
- Status
- no_upstream_bytes_captured
- Evidence SHA-256
unavailable- Byte length
- unavailable
Neutral Nostr anchor
- Event ID
5c38317b3a0369c5cbf77d191281ecc48b95a087d475b74790b344cc12b00029- Anchor status
- published
- Public key
e13475107d30c918ec664adf2ab1141024a22fb35190f82c9e933704fa49af41
Relay hints: wss://relay.damus.io · wss://nos.lol · wss://relay.primal.net
Schema: zambo-receipt-anchor/1
Anchor envelope bytes:
{"anchored_at":"2026-10-20T01:29:32.419Z","evidence_byte_length":null,"evidence_sha256":null,"evidence_url":null,"output_sha256":"sha256:b3be35899b95510ae85e281ce1f9e61214a48a67aaaa89c662e0aa38645f766e","receipt_uuid":"d9b1c60b-fc84-474f-a31f-36f81b597d59","schema_version":"zambo-receipt-anchor/1"}
Anchor status "published": Published to all configured relay targets.
Check this hash yourself
Receipt commitment: commitment matched; issuer, signature and chain not checked. This checks the saved bytes, not whether the answer was correct. Recompute the SHA-256 commitment in your browser. Open the API v2 JSON response to inspect the machine-readable checks. See the Nostr anchor event on a public viewer. The fingerprint is timestamped outside Zambo too.
Embed this receipt
Markdown
[](https://zambo.dev/run/d9b1c60b-fc84-474f-a31f-36f81b597d59?ref=badge)
HTML
<a href="https://zambo.dev/run/d9b1c60b-fc84-474f-a31f-36f81b597d59?ref=badge"><img src="https://zambo.dev/api/receipt/d9b1c60b-fc84-474f-a31f-36f81b597d59/badge.svg" alt="Verifiable Zambo receipt"></a>
Recent receipts
53,103 verifiable receipts minted
Get your own: connect https://zambo.dev/mcp. Free daily calls, no API key.