Inspiration
AI agents have started to shop for people and pay with PayPal. PayPal's own Agent Toolkit lets an agent create and pay for an order in a few lines. But think about what happens when one of those orders is disputed. A normal dispute has two sides: the buyer and the seller. An agent purchase has three. Maybe the user changed their mind, maybe the agent overspent or picked the wrong thing, or maybe the merchant shipped something other than what the agent saw.
Nobody keeps the evidence that would settle it: what the user authorised, what the product page showed at the moment of purchase, and why the agent chose that item. So the merchant refunds and absorbs the loss by default. That liability gap is a reason for merchants to block agent traffic altogether, and it's what we set out to close.
What it does
Provenant has two halves: it seals evidence at purchase and judges disputes later.
At purchase time, the agent records four things into an evidence bundle:
- the user's signed mandate (budget cap, categories, merchants, an "ask me above $X" threshold, expiry), signed with the user's own Ed25519 key;
- a snapshot of the offer the agent saw: title, attributes, price, delivery promise and the product image;
- the agent's decision trace: why it chose this offer over the others;
- the approved cart.
Every event is signed and joins a SHA-256 hash chain. The bundle id goes into the PayPal order's purchase_units[].custom_id, so every PayPal order points at its evidence.
When PayPal reports a dispute (by webhook, or by polling), Provenant links it to its bundle and runs a pipeline:
Integrity → Mandate rules → Delivery rules → Claim vs snapshot (Claude) → Decide (deterministic) → Plan the PayPal call
It returns one of five verdicts:
| Verdict | Example | PayPal action |
|---|---|---|
| Within mandate | Buyer remorse; item matched the listing | provide-evidence with a generated PDF |
| Agent out of bounds | Agent paid $65 on a $50 cap | accept-claim (refund), booked to the agent platform's liability |
| Merchant misrepresented | Listing showed black, blue arrived | accept-claim (refund) |
| Shared fault | Listing and mandate were both ambiguous | make-offer (partial refund) |
| Insufficient evidence | The evidence was edited after the fact | none: human review |
The merchant sees the verdict, the cited evidence and the exact Disputes API request body in a console, and nothing reaches PayPal until they click Approve.
Built With
- ag-grid
- anthropic
- claude
- drizzle-orm
- ed25519
- fastify
- model-context-protocol
- next.js
- node.js
- paypal
- paypal-agent-toolkit
- paypal-disputes-api
- paypal-orders-api
- paypal-webhooks
- playwright
- pnpm
- postgresql
- postman
- react
- sha-256
- tailwindcss
- turborepo
- typescript
- vitest
- zod