Every AI agent purchase gets a verifiable receipt.

A PayPal charge proves money moved. It does not prove what the agent did, what it meant to buy, or whether the thing delivered matches the thing ordered. This demo closes that gap: the purchase runs inside a Zambo job, and the job wraps into an AER-1 receipt that binds the PayPal capture to the whole record. Built for the PayPal AI Hackathon.

How it works

  1. The agent opens a job in Zambo at https://zambo.dev/mcp. One session id binds every call into that job.
  2. It creates a PayPal Sandbox order (Orders API) and journals the order id into the job as an external action, with its own receipt.
  3. It captures the order. The capture id, the amount, and the item are journaled into the same job, again with a receipt.
  4. The agent wraps the job with a handover. Zambo issues an AER-1 receipt whose record binds the PayPal capture to everything the agent did.
  5. The buyer opens one link and cross-checks the capture id against PayPal. The receipt proves the saved record was not changed afterward; the claim itself can be checked against the original payment record.

The recorded run

This run was recorded on November 4, 2026. Read the disclosure before the output: the run was made in rehearsal mode, so its PayPal leg is simulated and labeled that way everywhere it appears, including inside the receipt itself. The Zambo job, the journal entries, and the AER-1 receipt are fully real, and every link below is live. Run the same file with free PayPal sandbox credentials and the identical flow binds a live capture instead.

[zambo] caller: paypal-agent-3373679b
[zambo] job session: paypal-demo-66607d0671a34e84a9a50a6597eaf7c1
[paypal] SIMULATED order created: SIMULATED-ORDER-4D4A875DBF
[zambo] journaled order, receipt: https://zambo.dev/run/9ba0d8fa-81ef-4510-a30c-c6832b0f8c07
[paypal] SIMULATED capture: SIMULATED-CAPTURE-39486D5E3A amount=9.99 USD
[zambo] journaled capture, receipt: https://zambo.dev/run/fc656bfa-2c7a-45be-ad1a-190d52c69bf8
[zambo] job wrapped. Receipt: https://zambo.dev/run/e340c33c-ccec-458f-aa9d-fe98f4243969

Open the receipts

Order step: zambo.dev/run/9ba0d8fa

Capture step: zambo.dev/run/fc656bfa

The wrapped job: zambo.dev/run/e340c33c

Run it yourself

The code is public under the MIT license: github.com/zambodotdev/zambo-receipts-paypal. You need Python 3.10+ and a free PayPal sandbox app from developer.paypal.com.

pip install requests
export PAYPAL_CLIENT_ID=your-sandbox-client-id
export PAYPAL_CLIENT_SECRET=your-sandbox-secret
python3 demo.py

Sandbox only: the demo uses PayPal's sandbox API and a published sandbox test card, so no real money moves. Zambo's free tier covers the demo's calls, and verifying receipts is always free.

Why a receipt, not just a charge

Payments already have records. Agent work does not. When an agent spends on your behalf, the receipt for the work is what lets you, your accountant, or another agent check the purchase against the job that produced it: what was ordered, for how much, under which goal, and whether the record anyone is showing you is the record that was saved at the time. That is the gap Zambo fills for agent commerce, and AER-1 (IETF draft-zambo-aer1, closed at revision -26) is the format the receipt is written in.