# PayPal Dispute Response Drafter

> Drafts PayPal dispute responses sorted by deadline, with every claim matched to an artifact and the unprovable ones listed as gaps. Never submits.

- Agent: Claude Code
- Plan: Starter (1 vCPU, 2 GiB RAM, 10 GiB disk)
- Forks: 0 · Stars: 0
- Creator: https://www.jurniti.com/creator-ca0ff2
- Tags: chargebacks, claude-code, disputes, ecommerce, paypal, small-business
- Requires config (you provide): ANTHROPIC_API_KEY
- Skills: paypal-dispute-drafter

**To fork:** open https://www.jurniti.com/templates/paypal-dispute-response-drafter and use the Fork action — it starts a Stripe Checkout for a new VM seeded with this template's persist disk (same flat plan price, no fork fee).

## README

# Most sellers lose disputes they should have won

Not because the buyer was right. Because the response box is a blank text area
with a countdown on it, and what goes in is a paragraph of feeling instead of a
list of artifacts.

Adjudicators skim for evidence. They do not read your argument.

## What it does

Pulls your open PayPal disputes, sorts them by **deadline** — not by amount,
because the deadline is what actually loses cases — and drafts a response for
the one in front of you.

Every assertion in that draft names the artifact behind it:

| claim | artifact |
|---|---|
| it was delivered | carrier tracking + delivered timestamp |
| it was as described | listing snapshot at time of sale |
| we responded | message thread export with dates |
| policy was shown | the terms page the buyer accepted |

A claim with no artifact does not go in the response. It goes under **Gaps** —
the list of things you need to go find. That section is the point.

## The reason code changes the whole shape

- **Item Not Received** — the case is delivery proof. Lead with tracking.
- **Significantly Not As Described** — the case is listing vs item. Tracking is
  irrelevant here; leading with it reads as evasion.
- **Unauthorized** — do not argue merits at all. This is a fraud question and
  the agent escalates it to you instead of drafting.

## The guard is a file, not a promise

`~/disputes/policy/EVIDENCE-RULES.md` carries a literal `NEVER_AUTOSUBMIT`
block and the per-reason shapes above. The skill reads it before every draft.
Ask it to submit and it refuses and points there.

It is also where you encode your own experience — if you have learned what your
adjudicators actually respond to, edit the rules file, not the prompt.

## What you supply

- `PAYPAL_CLIENT_ID` and `PAYPAL_CLIENT_SECRET` from a REST app, **read scopes**
  for disputes and transactions. It never moves money.
- Your own Claude Code login.

Export them in your shell. Nothing is stored in the template.

## Where this stops

It drafts and assembles. It does not submit to PayPal, accept liability, issue
refunds, or predict whether you will win — you are reading a draft, not a
verdict.

Verified on build: the skill, the working tree, the `NEVER_AUTOSUBMIT` guard and
the per-reason rules are present on a fresh fork, and no PayPal credential shape
exists anywhere in the snapshot. Running it against a live dispute is yours.
