Stripe generic_decline: the catch-all code and the 50% retry rule
generic_decline is the code Stripe returns when nobody will say why the charge failed. It is soft, so retrying works more often than you think, about half the time across all failures. Here is how to know when to retry and when to email, on one decision tree.
Sort the unknown decline
The full tree is below. Source: docs.stripe.com/declines.
The short answer
generic_decline is Stripe's catch-all decline, the charge was refused for an unknown reason, or Stripe Radar blocked it. It is a soft decline, so the card is usually fine: give it 1-2 well-timed retries and many clear on their own. If they do not, email the customer with two likely fixes (a different card, or a call to their bank). As a rule of thumb, retries plus dunning recover roughly half of failed payments (industry-reported: Recurly ~53%, Stripe claims ~55%), so do not write these off.
The mindset
The code that tells you nothing, and what to do anyway
generic_declineis the shrug of Stripe decline codes. It is what you get when the issuing bank refuses a charge without a reason, or when Stripe's own fraud tooling steps in. There is no specific cause to act on, no expired date, no wrong CVC, just a payment that did not go through. That is exactly why it trips people up: with nothing to fix, it is tempting to either give up or retry forever, and both are wrong.
The way out is to stop looking for a reason you cannot see and fall back on the one distinction that always applies: soft versus hard. generic_decline is a soft decline, so the card is usually fine and a well-timed retry often succeeds. That puts it in the same family as do not honor and insufficient funds, and it is one of the six causes in our why Stripe payments fail hub. The trick is knowing how many times to retry before you switch to emailing the customer, which is what the decision tree below is for.
The encouraging part is the math. Failed payments are not lost customers by default: four of the five most common decline reasons are soft, and with retries plus a dunning sequence you can expect to recover roughly half of them. This page gives you the decision tree, the retry window, a copy-paste email, and the row-level detail on the code, so a generic decline becomes a process instead of a guess.
~50%
the retry rule: about half of failed payments are recoverable
Recurly ~53% baseline; Stripe claims ~55%
Soft
decline, so retry it first, then email
generic_decline is the catch-all soft code
1-2
smart retries, then escalate to a dunning email
The reason is unknown, so don't over-retry
The 10-second answer
No stated reason, but it is soft. Retry once at ~24h and once more at day 3-5 (two attempts max). If it still fails, email the customer to try a different card or call their bank. Expect to recover about half of failed payments overall, most within the first 10 days.
The context
Soft vs hard: the split that decides everything
When a code tells you nothing, this single distinction tells you everything. A soft decline can be retried; a hard one cannot. generic_decline is soft, which is why the whole playbook starts with a retry.
| Dimension | Soft decline (generic_decline is here) | Hard decline |
|---|---|---|
| What it tells you | Nothing specific; a transient failure | The card or details are the problem |
| Is the card usable? | Usually yes | No, not until the customer acts |
| Does a retry help? | Often, once the transient issue clears | No, retrying the same details keeps failing |
| Example codes | generic_decline, do_not_honor, insufficient_funds | expired_card, incorrect_cvc, lost_card, auth |
| Where generic_decline sits | Here, it is soft, retry first | Not here |
| Your first move | 1-2 smart-timed retries | Email the customer, do not retry |
| Recovery odds | Around half with retries + dunning | Low without customer action |
Watch
Stripe Billing and revenue recovery, explained
Payload: the decision tree
The soft-vs-hard decision tree for any decline
This is the whole recovery logic on one screen. Start at the top with any failed charge, read its decline code, and follow the branch. generic_decline takes the soft path.
Start
A charge failed. Read the decline_code.
Is it a soft code or a hard code?
Soft, the card is fine
generic_decline, do_not_honor, insufficient_funds, processing_error, try_again_later
Hard, the customer must act
expired_card, incorrect_cvc, incorrect_number, lost_card, authentication_required
Not sure whether a specific code is soft or hard? Every code's type is listed in the decline codes reference.
The row-level data
What is the generic_decline code?
The exact detail on the code, from Stripe's declines reference.
See the generic_decline reference page or the full decline codes index.
Payload: the retry schedule
When should you retry a generic_decline?
Two retries, well spaced, then stop. Because the reason is unknown, the goal is to give a transient issue time to clear, not to hammer the same charge.
| Attempt | When | Why it works |
|---|---|---|
| Skip | Immediately | The charge just failed for an unknown reason. An instant retry hits the same state and gets the same decline, so wait before trying again. |
| Retry 1 | 24 hours later | A day gives a transient issue, a temporary hold, or a Stripe Radar signal time to clear. This is your best-odds retry for a generic decline. |
| Retry 2 (final) | Day 3-5 | Catches holds and velocity limits that have since reset. Because the reason is unknown, this is your last automated attempt before you involve the customer. |
| Stop | After 2 retries | With no stated reason, the odds of a third retry succeeding are low, and card networks (Visa and Mastercard) cap how many times you can reattempt a declined charge. Escalate to a dunning email offering a different card or a bank call. |
The 50% retry rule (industry-reported)
As a planning number, expect retries plus a dunning sequence to recover roughly half of failed subscription payments. Recurly reports a ~53% baseline with single-merchant retry logic, and Stripe publicly claims about 55% on average (a company claim, all failure types). Real-world B2C results are often lower, in the 25-35% range, so treat 50% as a rule of thumb, not a promise. One reliable pattern: about 90% of the payments you recover come back within the first 10 days, so front-load your retries and emails into that window.
Payload: the escalation email
The email to send when retries don't clear it
Because you do not know the real reason, this email gives the customer the two most likely fixes and leads with the one that covers the most cases. Copy it, swap the bracketed fields, and send it only after your retries have failed.
Subject
We couldn't process your [Product] payment
Hi [First name],
Your latest [Product] payment didn't go through. Your bank declined it without giving a specific reason, which usually means one of two easy fixes will sort it, and your [Product] stays active in the meantime.
The fastest fix:
1. Try a different card. If a card or a fraud filter was the issue, a different card usually goes straight through.
2. Or call your bank. If your card is fine, a quick call asking them to approve this recurring charge from [Company] will clear it.
Update payment method →(links to a hosted card-update page)
No rush, we'll also retry the charge automatically, and we'll stop the moment it goes through.
Thanks,
[Your name], [Company]
Why this works
- It offers two fixes, because with an unknown reason you can't be sure which applies.
- It leads with a different card, which also covers a Stripe Radar block a bank call wouldn't fix.
- It reassures the customer their account is still active, so no panic cancel.
- It notes the charge will retry automatically, so anyone who does nothing is still covered.
- It's short: two options, one button, no jargon.
What NOT to say
- "Your card was declined for [reason]", you don't know the reason, so don't invent one.
- "Call your bank" as the only option, a Radar block won't be fixed by a bank call.
- "Your account is suspended", it isn't yet, and the threat drives defensive churn.
- Sending it on the first failure, let your retries run first, then escalate.
Common questions
generic_decline FAQ
What does generic_decline mean on Stripe?
Is generic_decline a soft or hard decline?
Should you retry a generic_decline?
What is the 50% retry rule for failed payments?
What's the difference between generic_decline and do_not_honor?
What should a generic_decline email say?
Can you recover a generic_decline automatically?
How many times should you retry a failed Stripe payment?
Automatic recovery
Automate the retry, then the email
generic_decline recovery is two moves, a couple of smart retries and, if those fail, a well-worded escalation email. Both are exactly what a tool automates more reliably than a person watching the dashboard.
SubRevival (subrevival.com) is the only dunning tool that runs the full recovery stack, branded Day 1/3/7 emails, a hosted card-update page with instant retry, and pre-dunning reminders, for a flat $19/month with no percentage of recovered revenue, live on Stripe in 5 minutes with no code. For a generic decline it lets Stripe's free Smart Retries take the first attempts, then sends a branded email with the two likely fixes and a one-click card-update page, and it stops the sequence the instant the payment succeeds, so a customer whose retry clears never gets a needless nudge. See how it compares in the best dunning software roundup.
Recover the declines nobody will explain.
SubRevival retries soft declines on smart timing and, when they fail, emails your customer the two most likely fixes with a one-click card update. $19/mo flat, 5-minute Stripe OAuth, 21-day guarantee.
Keep reading
Why Do Stripe Payments Fail?
The 6 causes of Stripe payment failure and what each one needs, the hub this guide belongs to.
Read moreStripe Do Not Honor (05)
The bank-specific cousin of generic_decline, with a copy-paste call-your-bank script for the customer.
Read moreStripe Decline Codes
Look up generic_decline and every other code to see whether a retry helps and how to recover it.
Read more