Guides to failed payments on Stripe | RecoverFlow

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.

Guide

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.

Guide

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.

Guide

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.

Guide

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.

Guide

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.

Guide

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.

Guide

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.

Guide

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.

Guide

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.

Guide

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.

Guide

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.

Guide

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.

Guide

The Visa excessive reattempts rule: 15 tries per card, per 30 days

Visa bulletin AI10325 caps reattempts of one payment at 15 per 30 calendar days, from 17 April 2021. What Stripe does at the limit, and where the budget is zero.

Guide

Stripe is not retrying your failed invoice. Here are the nine reasons why.

A checklist for the moment a subscription invoice fails and no retry is scheduled. Nine documented causes, and the exact API field that proves each one.

Guide

The free Stripe settings to switch on before you pay anyone

Every free retry and customer email setting in Stripe Billing, with the exact Dashboard path for each, and an honest note on when that is all you need.

Decline code

invoice.payment_failed vs payment_intent.payment_failed

Both events report a failed payment, from different layers of Stripe. For subscription dunning, one of them carries the retry state you need. Here is how to choose.

Decline code

call_issuer on Stripe: what it means when the bank says call us

Stripe documents call_issuer as a decline for an unknown reason where the customer needs to contact their card issuer. How it differs from do_not_honor: barely.

Decline code

card_velocity_exceeded on Stripe: the customer hit a limit

card_velocity_exceeded means the card hit its balance, credit limit or transaction limit. The issuer will not say which. It is a soft decline and Stripe retries it.

Decline code

currency_not_supported on Stripe: the card cannot pay in that currency

Stripe documents currency_not_supported as the card not supporting the specified currency, with the customer needing to check with their issuer. What to do next.

Decline code

duplicate_transaction on Stripe: check your records before you do anything

Stripe documents this decline as an identical transaction submitted very recently. The next step is aimed at you, not the customer: check for a recent payment.

Decline code

The fraudulent decline code on Stripe: who suspects what, and what to say

Stripe documents fraudulent as a payment declined because Stripe suspects it is fraudulent, and instructs you to present it to the customer as a generic decline.

Decline code

What does generic_decline mean on Stripe?

Stripe's docs say it plainly: declined for an unknown reason, or blocked by Radar. Here is how to tell which one you got, and what to do about each.

Decline code

incorrect_cvc on Stripe: what it means and what actually fixes it

The CVC the customer entered is wrong, and Stripe's documented fix is the customer trying again with the right one. Retries alone cannot type a security code.

Decline code

incorrect_number vs invalid_number on Stripe

Stripe documents both codes as the card number being incorrect. Only one is on the list that stops retries, and either way no retry can type a card number.

Decline code

lost_card and stolen_card on Stripe: what to do, and what never to say

Both codes sit on Stripe's hard decline list, and both carry the same documented instruction: do not tell the customer the specific reason. Here is the playbook.

Decline code

pickup_card vs restricted_card on Stripe: same words, opposite retry treatment

Stripe documents both codes with the same description, yet one is on the hard decline list and the other gets retried. The difference decides your next move.

Decline code

processing_error on Stripe: the decline you should simply retry

Stripe's documented next step for processing_error is unusually direct: attempt the payment again, and if it still fails, try again later. Here is why.

Decline code

transaction_not_allowed on Stripe: the unknown-reason decline that stops retries

Stripe documents transaction_not_allowed as a decline for an unknown reason, yet it sits on the hard decline list. That combination changes how you handle it.

Decline code

try_again_later on Stripe: one deprecated code, one live one

Stripe's reference now marks the try_again_later decline code as deprecated, but an advice code with the same name is alive and means something different.

Pillar

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

6 calculators and lookups that need no signup and no email address.

Stripe decline codes explained

Every Stripe card decline code, what it means, what to do, and which nine Stripe will not retry.

Dunning email generator

Generate a failed payment email by decline reason and sequence position.

Failed payment recovery estimator

Free calculator: how much failed subscription revenue you lose monthly, how much is recoverable, and what each recovery tool would cost you at that volume.

Payment retry schedule builder

Build a retry schedule for failed Stripe payments by decline reason.

How many of your Stripe retries were never going to work?

Free browser calculator. Enter your decline codes and see how much failed revenue sits on cards no retry can ever collect.

How close is each card to Visa's 15 attempt ceiling?

Paste one attempt per line as a card fingerprint and a date. See each card's peak in any rolling 30 day window against Visa's cap of 15.