Decline code
Generic Decline
`generic_decline` means the card issuer declined the charge without giving Stripe a specific reason. Stripe's own definition is blunt: the card was declined for an unknown reason, or Stripe's own Radar or Adaptive Acceptance systems blocked the payment before it reached the network. Either way, there is no diagnostic detail attached to the code itself. It is a soft decline, not a signal that the card is closed, stolen, or invalid. Banks use `generic_decline` as a catch-all for a range of temporary situations: a fraud flag that clears within hours, a spending limit the customer bumped against, a bank system hiccup, or a short hold placed on the account. None of these describe a permanent problem with the card.
Why it happens
Recurring charges hit `generic_decline` more often than one-time purchases for a few reasons. Bank fraud systems apply stricter automated scrutiny to charges that look like recurring billing, and a charge firing at 2am during a batch billing run reads differently to that system than a charge a customer initiates themselves at checkout. Card velocity limits can also contribute: if a customer has been charged several times in a short window across different merchants, the next charge is more likely to get flagged. On top of that, Stripe Radar rules configured by the merchant can themselves produce a `generic_decline` when a transaction matches a risk pattern, even when the bank would have approved it.
How to fix it
Yes, but not immediately. Retrying the instant a `generic_decline` comes back rarely works, because the condition that caused the decline (a fraud hold, a limit, a system issue) is usually still present a few seconds or minutes later. Waiting gives those temporary conditions time to clear. Card networks also enforce hard caps on retry volume: Mastercard allows up to 35 retry attempts per card within 30 days, and Visa allows up to 15. Exceeding either threshold triggers network penalty fees, so retry timing and count both matter, not just persistence. Space retries out over hours or days rather than firing them back to back. Track how many attempts have been made against network limits. If retries are exhausted without success, move to a direct, low-friction message to the customer asking them to update or confirm their payment method, rather than a generic "payment failed" notice that gives them no path forward.
How Foxhound recovers it
A Foxhound-scheduled silent retry runs first, timed for the specific decline pattern rather than an immediate repeat. If the retry succeeds, the customer never sees anything happened. If it does not, Foxhound moves to a dunning email sequence across the following weeks, written in the merchant's own brand voice, with a hosted card-update link on every email as a passive fallback channel.
Questions
See what this looks like on your account
The free audit shows what Stripe already recovered and what is still dying, no signup required.
Run your free audit