How it works
- The agent opens a job in Zambo at https://zambo.dev/mcp. One session id binds every call into that job.
- It creates a PayPal Sandbox order (Orders API) and journals the order id into the job as an external action, with its own receipt.
- It captures the order. The capture id, the amount, and the item are journaled into the same job, again with a receipt.
- 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.
- 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.