At a glance
Dispute Defence answers a PayPal chargeback with evidence the merchant can actually prove, before the response deadline passes.
An agent gathers what exists, scores it out of 100, and drafts a response. A rules gate then rejects any figure, tracking number or date that does not appear in the gathered evidence, so the draft cannot improve on the record.
One dispute in the app is genuine, filed by a sandbox buyer through PayPal's own Resolution Centre against a payment we captured.
The default judgment problem
A dispute arrives with a clock on it. PayPal gives the seller a window to respond, and the window is the whole game: a dispute that gets no response is decided for the buyer automatically. Not on the merits. On the silence.
For a small merchant this is a brutal shape. The evidence usually exists — a carrier scan, a signature, an email thread confirming delivery — scattered across three systems and nobody's job to assemble at eleven at night. So the deadline passes, the money goes, and the record shows a loss that was never argued.

The app opens on what matters: how many disputes are on the clock, and how long each has left.
Assembling a case

For each dispute, the agent gathers what the merchant can actually prove, scores it out of 100, and drafts a response.

The scoring is the useful part. A dispute with a signed delivery to the billing address is not the same as one with a tracking number that stops at "in transit", and a merchant deciding where to spend an hour needs to know which is which.
The rule that keeps it honest
A drafted response is checked before it is filed. Any figure, tracking number or date that does not appear in the gathered evidence is rejected. The agent can argue from the record; it cannot improve on it.
That matters more here than almost anywhere else. A fabricated tracking number in a dispute response is not an embarrassing hallucination — it is a merchant submitting false evidence to a payment processor.

And sometimes the honest answer is to stop. When the evidence will not carry a defence, the app says so and offers to accept the claim rather than spending the deadline on a losing argument. A tool that only ever advises fighting is not advising.
The real dispute
There is a genuine PayPal dispute in this app.
PP-R-IQQ-10190238 was filed by a sandbox buyer through PayPal's own Resolution Centre, against a payment we captured — 84M12857JS087152G, $229.00. It carries a real reason code, a real response deadline, and a two-way message thread: the buyer's complaint, and a seller reply this application sent through POST /v1/customer/disputes/{id}/send-message.
Getting it was harder than it should have been, and the difficulty is worth recording:
PayPal's sandbox offers no API that creates a dispute. Only a buyer can open one, in a browser, against a payment they made. We created the order, approved it as the buyer, captured it, and then filed the complaint by hand. PayPal's own Resolution Centre errored out twice before it took.
A new dispute is not in the list endpoint immediately. For the first minutes GET /v1/customer/disputes returns an empty array and every dispute_state filter returns nothing, while a direct fetch by id returns the full object. We fetch by id because of it.

Under the hood
| Agent | Claude Sonnet 4.5 on Amazon Bedrock, gathering evidence, scoring it, drafting the response |
| Guard | A rules gate rejects any draft containing a figure or tracking number absent from the evidence |
| PayPal | Disputes v1 — read, provide-evidence, accept-claim, send-message. Signed webhooks with certificate-host and transmission-age checks, so a replayed or re-hosted delivery is refused with a 401. |
| Platform | AWS Lambda, DynamoDB, S3 and CloudFront |
Where PayPal's sandbox stops
The sandbox never adjudicates. No application can show PayPal ruling for the buyer or the seller, because that outcome does not exist in sandbox. Everything up to and including the filing is real; the verdict is labelled as simulated wherever it appears. We would rather say that than imply a win we cannot produce.
Built With
- bedrock
- cloudfront
- paypal