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&quot;x402Version&quot;: 2,\n\n&quot;resource&quot;: {\n\n&quot;url&quot;: &quot;https://zambo.dev/api/x402/day-pass&quot;\n\n},\n\n&quot;accepts&quot;: [\n\n{\n\n&quot;scheme&quot;: &quot;exact&quot;,\n\n&quot;amount&quot;: &quot;990000&quot;,\n\n&quot;network&quot;: &quot;eip155:8453&quot;,\n\n&quot;asset&quot;: &quot;0x8335…2913&quot;,\n\n&quot;payTo&quot;: &quot;0xb753…b9AC&quot;\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 Run your own
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.

ZAMBO PASS $29 →

RUN YOUR OWN FREE CALL →

Or re-run this exact call, using the same tool and arguments.

Share this receipt

Share on X ·

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

Add to my 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

[![Verifiable Zambo receipt](https://zambo.dev/api/receipt/d9b1c60b-fc84-474f-a31f-36f81b597d59/badge.svg)](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>

Open badge SVG

Recent receipts

53,103 verifiable receipts minted

RUN YOUR OWN FREE CALL →

Get your own: connect https://zambo.dev/mcp. Free daily calls, no API key.

Open the interactive receipt view