Skip to content

Instantly share code, notes, and snippets.

@tuhuynh27
Created August 31, 2026 02:28
Show Gist options
  • Select an option

  • Save tuhuynh27/8beb0f9393a873d6b360d7862e786ecd to your computer and use it in GitHub Desktop.

Select an option

Save tuhuynh27/8beb0f9393a873d6b360d7862e786ecd to your computer and use it in GitHub Desktop.
Stripe Dispute practices

Stripe Dispute Runbook

How a dispute works

When a cardholder disputes a payment, the card network removes the disputed amount and fees from our Stripe balance. We can accept the dispute or submit evidence before the Stripe deadline. The card issuer, not Stripe, decides the outcome.

Terms alone do not guarantee a win. Our response must directly disprove the customer's stated reason with checkout consent, payment records, and proof that the account received and used the digital service.

When a dispute arrives

  1. Open the dispute in Stripe and record its reason, amount, response deadline, customer, payment, subscription, and Checkout Session IDs.
  2. Preserve relevant records immediately. Do not edit screenshots or reconstruct missing events.
  3. Suspend paid access while the dispute is reviewed and stop future renewal charges. A dispute does not reliably cancel a subscription, so confirm its Stripe status.
  4. Check whether the claim is valid. Accept genuine fraud, duplicate charges, billing errors, or charges made after a timely cancellation.
  5. If the claim is inaccurate, submit one short, reason-specific evidence packet before the deadline.
  6. Do not issue a separate refund while a dispute is open. Resolve it through Stripe.

Evidence to collect

Always include:

  • A short timeline containing the purchase, renewal, cancellation, access, and dispute dates
  • Stripe receipt, amount, billing cycle, payment result, and customer details
  • Checkout Session and subscription metadata, including termsVersion
  • The refund and cancellation clauses that applied at checkout
  • Proof that the policy was disclosed before payment
  • Relevant customer communications

Add evidence based on the dispute reason:

  • Fraud or unauthorized: 3DS, CVC and address checks, purchase IP, device information, account email, login history, usage from matching IPs, and prior undisputed payments
  • Subscription canceled: exact cancellation timestamp, proof no cancellation occurred before the charge, renewal notice, cancellation confirmation, and any use after the charge
  • Service not received: account activation, login timestamps, pages or features used, AI requests, downloads, and support history
  • Refund not processed: the accepted no-refund policy, proof no refund was promised, and all refund-related messages

Use only relevant evidence. Label screenshots, explain what each item proves, and never submit secrets, full card numbers, or unrelated personal data.

Prevention checklist

  • Keep the no-refund, annual prepayment, auto-renewal, and cancellation terms consistent across Terms, pricing, FAQ, receipts, and Checkout
  • Keep the bilingual disclosure beside Stripe's payment button and retain the applicable termsVersion
  • In Stripe Dashboard, set the Terms URL and enable required Terms acceptance for Checkout
  • Use a recognizable statement descriptor and send payment receipts and renewal notices
  • Keep cancellation simple, timestamp every request, stop renewals promptly, and send confirmation
  • Retain checkout, login, IP, device, feature-usage, and support logs according to the Privacy Policy
  • Use Stripe Radar and 3DS for elevated-risk payments

Important limits

Do not apply new Terms retroactively to older payments. Do not challenge a legitimate consumer claim merely because the policy says no refunds. Applicable law, card-network rules, and non-waivable customer rights take priority.

References: Stripe evidence best practices, Stripe dispute process, Stripe reason-code guidance, and 15 U.S.C. Section 8403.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment