Writing
Guides to failed payments on Stripe
Everything here is checked against Stripe's own documentation before it goes up, and dated so you can tell how stale it is. There are no invented case studies and no recovery rate percentages we cannot stand behind, which means some of these articles end by telling you that Stripe's free features are enough.
The nine Stripe decline codes that stop retries dead
Stripe will not retry nine specific decline codes until a new card is added. The exact list, what each one means, and what to do instead of retrying.
How Stripe Smart Retries actually work
Stripe Smart Retries defaults to 8 attempts over 2 weeks, timed by a model. What you can configure, what you cannot, and when to turn it off.
Why retrying an expired card rarely works
expired_card is not on Stripe's hard decline list, so Stripe retries it. An expired card does not become unexpired. Here is what actually recovers these payments.
Stripe's dunning emails: what you control and what you do not
Stripe emails your customers about failed payments for free. You control branding and whether they send, but not the copy, the schedule or the sender.
How to measure involuntary churn without guessing
Involuntary churn is revenue lost to a failed payment, not a decision. How to calculate it from your own Stripe data, and why benchmarks are not worth much.
Is insufficient_funds a hard decline?
No. insufficient_funds is not on Stripe's list of codes that block retries, and retrying it is correct. A lot of published guidance gets this backwards.
past_due, unpaid, canceled: what each Stripe subscription status means
past_due means Stripe is still trying. unpaid means it stopped but kept the subscription. canceled is terminal. Which one you get is a setting you choose.
Which Stripe webhooks tell you a payment failed
invoice.payment_failed is the event that matters, plus payment_action_required for authentication. Which fields to read, and the one-hour delay to know about.
Stripe test cards for every failed payment scenario
The exact test card numbers for generic decline, insufficient funds, lost card, stolen card, expired card and 3D Secure, and which decline_code each one produces.
Stripe updates expired cards for you, sometimes
Stripe works with the card networks to refresh saved cards automatically. No setup needed, no guarantee, and no way to tell in advance which cards it covers.
What do_not_honor actually means
do_not_honor means the issuer declined without saying why. Stripe will retry it, the bank will not explain it, and the only real fix runs through the customer.
Recovering authentication_required declines
authentication_required means the payment needs the cardholder to authenticate. Retries cannot fix it. The webhook and the hosted invoice page can.
How to recover failed Stripe payments
The overview: what fails, what can be retried, what needs an email, and where the free options run out.
Free tools
Four calculators and lookups that need no signup and no email address.
Decline code lookup
48 Stripe decline codes, searchable, with the nine that block retries flagged.
Recovery estimator
What failed payments cost you, against real competitor pricing at your scale.
Retry schedule builder
Builds a schedule, and tells you when a schedule is the wrong answer.
Dunning email generator
Reason aware copy, including the reasons you should never name.
Recover