Skip to content

Failed Payment Recovery: Retry Decisioning After a Declined Charge

A declined recurring charge is a decisioning problem: which codes to retry, on what schedule, what to change first, and when to stop trying.

PB
By Shaun Toh
TL;DR

A decline isn't an outcome, it's a decisioning problem: retry or don't, on what schedule, with what changed, and what to tell the customer. Decline-code logic, scheme retry caps, smart-retry evaluation, and how to measure recovery rate without lying about the denominator.

A recurring charge declines. What happens in the next ten seconds — or the next ten days — determines whether that revenue comes back or is written off as churn. Most operators treat this as a settled question: retry a fixed number of times on a fixed schedule, send a couple of emails, cancel if nothing works. That default leaves recoverable revenue on the table and burns scheme retry allowance on charges that were never going to succeed.

This article is scoped narrowly: what happens after a charge declines. It does not cover keeping the stored credential itself current — VAU/ABU, network tokens, and the rest of the credential lifecycle are owned by Card Credential Lifecycle and Account Updater Operations, and credential freshness only shows up here as an input to the retry decision. It does not cover billing-cycle mechanics — invoice generation, proration, plan changes — which live in Recurring Payments Operations. And it does not re-litigate the MIT/CIT authentication framework, covered fully in Merchant-Initiated Transactions — it only picks up where that framework leaves off: what a retry does to the authentication chain. This piece is the decisioning layer sitting on top of all three: given a specific decline, on this specific card, what do you do next.

Soft decline, hard decline, and the fork every retry decision starts at

The single fact that should gate every retry decision is whether the issuer's response is a soft decline or a hard one. A hard decline — account closed, card reported lost or stolen, restricted card — is the issuer telling you, in effect, that this credential is permanently unusable for this transaction. Retrying it does not recover the payment. It burns a retry attempt against a scheme allowance that resets slowly, and on some codes it triggers a compliance fee on the very first reattempt, not just the excessive ones.

A soft decline is different: insufficient funds, a temporary issuer-side block, a technical failure at the switch. These are conditions that can change between now and the next attempt without anything about the credential itself being fixed. This is where retry timing, not retry eligibility, does the work.

There is a third category that gets collapsed into "soft" far too often and shouldn't be: an authentication-required decline. The issuer isn't saying no — it's saying it wants the cardholder present for a 3-D Secure challenge before it will say yes. A plain resubmission returns the identical decline every time, because nothing about the transaction has changed from the issuer's point of view. Stripe's own automatic-retry system treats authentication_required as a non-retryable code for exactly this reason — it will keep the retry scheduled but will not fire the charge without a fresh authentication event. The full mapping of your PSP's decline codes against these three buckets is the actual first step of building retry logic; the decline-code reference is the place to check a specific code before assuming it belongs in any of them.

What the decline code is actually telling you to do

Not every soft decline gets the same treatment, and not every hard decline is equally final. A handful of representative codes illustrate the range:

CodeMeaningRetry?What actually recovers it
51 — Insufficient FundsBalance below the transaction amount right nowYesDelayed retry, most effective 24-48 hours out; cap at 1-2 attempts
91 — Issuer/Switch InoperativeConnectivity failure in the auth pathYesImmediate retry, ideally via a different routing path
05 — Do Not HonorIssuer catch-all, reason undisclosedConditional3-7 day heuristic, capped attempts; contact customer if it recurs
54 — Expired CardCard's stated expiry has passedConditionalNot retryable on the same data — needs updated details or an Account Updater hit first
1A — SCA RequiredIssuer wants authentication, not a resubmissionYes, but only via 3DS2Re-present through a customer-present authentication flow
61 — Exceeds Withdrawal Amount LimitAmount trips a configured capYesRetry after the reset window, or split/lower the amount
43 — Stolen CardCard reported stolenNoNone — request a new credential, flag for fraud review

The pattern worth internalizing: "retryable" is not a single bit. It's retryable-as-is (51, 91), retryable-only-with-a-change (54, 1A, 61), or not retryable at all (43). A retry engine that only checks a binary soft/hard flag and applies one fixed schedule to everything in the "soft" bucket will retry 54 blind — wasting the attempt, because the PAN it's charging no longer exists — and will retry 1A blind, which returns the same decline every time. Both failures look identical in a dashboard: "retry attempted, still declined." Only decline-code-level logic tells them apart.

Scheme retry rules: you don't get unlimited attempts

Retrying is not free, and it is not unlimited, even for genuinely soft declines. Visa's compliance framework separates decline codes into categories — some where no reattempt is permitted at all, and others where reattempts are permitted up to a capped count within a rolling window — and it assesses a non-compliance fee on every attempt that exceeds the eligible category's cap, and on every attempt at all against a never-retry code. Operator-facing disclosures from acquirers describe the eligible-category cap as roughly 15 reattempts within a 30-day window on a given card, with fees applying per excessive attempt beyond it. Exact attempt thresholds and fee amounts vary by acquirer disclosure and have moved across recent rule updates — treat the shape of the constraint (capped, tiered by category, enforced per card) as the reliable part, and get your acquirer's current fee schedule before budgeting against a specific number, including the one just cited.

The practical implication for architecture: this ceiling exists whether or not you've built anything to respect it. Every major PSP's own default retry policy already sits well inside it — Stripe's Smart Retries defaults to 8 attempts over 2 weeks (configurable up to 2 months, custom schedules capped at 3 retries), Recurly's basic dunning retries every 2 days for up to 5 attempts, Chargebee's Smart Retry goes up to 12 attempts, and Recurly's Intelligent Retries product caps at 20 attempts or 60 days, whichever comes first. If you're actually hitting scheme excessive-reattempt fees, the near-certain cause isn't your PSP's built-in retry system running away — it's a second system firing on the same card without visibility into the first: a support agent manually resubmitting a payment the automated dunning sequence is also retrying, or two integrated tools (a billing platform and a separately-configured orchestration layer) both independently deciding to retry the same decline.

Retry scheduling: fixed interval, backoff, or data-driven timing

"Retry every 3 days, four times" is the default a lot of billing systems ship with, and it is wrong for a specific, structural reason: it ignores the decline reason entirely. A code-91 technical failure doesn't need three days — it needs a retry in minutes, ideally on a different route. A code-51 insufficient-funds decline retried the next morning is often too early; balances refill around payday, not on a fixed 72-hour clock unrelated to when the customer gets paid. A fixed schedule applies the same wait to both and gets both wrong in opposite directions.

The three approaches, in increasing sophistication: fixed interval retries on a flat schedule regardless of reason code — simple, and it recovers some soft declines by accident, but it wastes early attempts on codes that need more time and wastes later attempts on codes that needed less. Exponential backoff — retrying more frequently early and spacing out later attempts — is a real improvement for technical failures (91, 96) where the failure clears quickly or not at all, but it still ignores payday-cycle timing for funds-related declines. Data-driven timing is what Stripe's Smart Retries, Adyen's Auto Rescue, Recurly's Intelligent Retries, and Chargebee's Smart Retry all do in some form: use decline reason, card BIN, issuer, and historical timing patterns across the PSP's own transaction volume to pick a retry time per decline rather than per schedule. Stripe's own description of the mechanism includes a concrete example of why this beats a generic clock — debit cards in some countries authorize more successfully right after midnight local time, a pattern no fixed-interval schedule could ever encode.

The operator takeaway isn't "always buy the smart retry product." It's that decline-reason-aware timing beats reason-blind timing regardless of who builds it, and a fixed schedule is defensible only as a starting point before you have enough volume to see the pattern in your own declines.

What to change between attempts, not just when

Timing is one lever. What the retry actually sends is a second, and it's the one naive retry logic skips entirely — resubmitting the identical transaction and hoping the outcome differs.

Credential. If the decline is stale-card-shaped (54, and some catch-all 05s), a query against Account Updater or a check for a network token update is a precondition to retrying at all, not an afterthought — retrying the same expired PAN a second, third, or fourth time changes nothing. That mechanism is covered in full in the credential lifecycle article linked above; here it's simply the first thing to check before the retry clock starts.

Routing — a different MID or acquirer. Some declines are relationship-specific: an issuer's risk model has a particular history with a particular acquiring BIN, and the identical transaction routed through a second acquirer can authorize where the first didn't. This is the same mechanism multi-acquirer routing exploits for fresh authorizations, applied to a retry instead of a first attempt — worth the engineering only above a volume where you can actually measure which acquirer recovers which issuer's declines.

Amount. Narrowly, for limit-type declines — code 61, exceeding a configured spend cap — splitting the charge or retrying at a lower amount is a legitimate recovery path, and it's the one code where the site's own decline-code reference explicitly recommends it. It does not generalize to insufficient-funds declines on products that can't be partially billed; charging a smaller amount doesn't make the customer able to pay for what they bought, it just under-collects.

Authentication path. For code 1A and its equivalents, the only change that matters is routing the retry through a 3DS2 challenge instead of resubmitting frictionlessly. This is also where the retry has to be flagged correctly inside the MIT chain — as a resubmission of the original transaction, not a fresh cardholder-initiated one — or the retry itself can trigger the exact authentication requirement it was meant to resolve.

SCA and 3-D Secure: when a retry needs the customer back on-session

Merchant-initiated retries exist precisely so the customer doesn't have to be present. An authentication-required decline breaks that premise for one attempt. Strong Customer Authentication is a per-transaction issuer decision, not a permanent state — an issuer can wave a routine renewal through unauthenticated for months and then demand a challenge on one specific attempt, usually because a risk signal moved (a new device fingerprint, an amount outside the established pattern, a regulatory sampling requirement).

When that happens, the recovery path stops being a background retry and becomes a customer-facing event: an in-app or emailed prompt bringing the cardholder back on-session to complete a 3DS2 challenge, which produces a fresh authenticated transaction and a new network reference to anchor future merchant-initiated attempts. Two things go wrong here in practice. First, teams try to route around it with a plain resubmission, which returns the identical decline and burns a retry attempt for nothing — this is exactly why Stripe excludes authentication_required from its automatic retry set rather than pretending a background attempt might work. Second, once the re-authentication is built, teams treat it as a permanent fix rather than a per-transaction one, and are surprised when the same subscriber gets challenged again eight months later for an unrelated risk-model reason.

Smart retries: what PSPs are actually selling, and how to evaluate the claim

Every major recurring-billing PSP now sells some version of "smart" retries, and the marketing language across all of them converges on the same three words — machine learning, optimal timing, revenue recovery — which makes the products harder to tell apart than they actually are. What they concretely do, per their own documentation: Stripe's model draws on over 500 attributes spanning customer, business, payment, seasonality, and billing signals, and the company reports $9 in recovered revenue for every $1 spent on Billing. Adyen's Auto Rescue schedules retries using BIN, country, and decline reason, and Adyen reports a 300% increase in recovered payments since introducing a machine-learning-driven version of its auto-retry logic in 2021. Recurly's Intelligent Retries and Chargebee's Smart Retry both describe the same category of behavior — dynamic, reason-and-history-informed scheduling instead of a fixed cadence — without publishing a comparable headline recovery figure.

None of these tools, by their own documentation, change the credential, the acquirer, or the authentication path between attempts — they change the clock. That's a meaningful improvement over a fixed schedule, but it's a specific one, and evaluating a vendor's "smart retry" claim means asking three questions: what baseline is the stated lift measured against (a merchant's own prior fixed schedule, or an unspecified industry average); does the product also touch what's retried, not just when; and is the pricing structured as a flat fee or a cut of recovered revenue, which changes the vendor's incentive to keep retrying past the point where it's still worth it to you. A tool that only optimizes timing is doing one job well. It is not doing the credential-refresh, routing, or authentication-path jobs described above, and shouldn't be credited for them.

Credential freshness as a retry input, not a retry mechanism

Account Updater queries and network token checks belong in the retry decision at exactly one point: before deciding whether a stale-credential-shaped decline (54, and a share of undisclosed 05s) is worth retrying at all on the current card data. If a query returns an updated PAN or the network token has already refreshed, the "retry" is really a new attempt against a corrected credential — not a resubmission of the failed one. If neither mechanism has anything newer, retrying the same data on any schedule, however well-timed, cannot succeed, because the number being charged no longer resolves to a live account. The mechanics of coverage, issuer participation, and market variance for both mechanisms are a separate, deeper subject the credential-lifecycle article already owns; the operational point here is narrow — check before you schedule, not after.

Customer messaging: the dunning sequence and the grace-period decision

Retries run silently by design; dunning is the part the customer sees, and it needs its own timing logic independent of the retry schedule. Recurly's own documentation makes this separation explicit — dunning and retry are deliberately decoupled, because the best moment to email a customer and the best moment to re-attempt a charge are not the same moment, and coupling them means every retry generates a notification even when a quiet background retry was the better first move.

A functional sequence runs roughly: an optional pre-dunning notice before a known card-expiry event, a same-day notification on first failure with a direct payment-method-update link (not just "your payment failed"), one or two escalating reminders through the retry window, and a final notice ahead of whatever consequence you've set — suspension or cancellation. Tone matters more than most teams budget for it: several decline codes (lost/stolen, restricted card) carry an explicit instruction from PSPs not to disclose the specific reason to the customer, so the message has to stay generic without sounding evasive.

The grace-period-versus-immediate-suspend decision is a real trade-off, not a formality. A longer grace period gives retries and customer self-service more time to land a recovery, at the cost of continuing to deliver a service nobody's currently paying for. Immediate suspension protects against that cost but removes the softest, cheapest recovery channel — a customer who updates their own card because access to the product just stopped is often easier to recover than one who has to be retried into paying weeks later. Where that line sits is a product-margin decision as much as a payments one: low-marginal-cost digital services can usually afford a longer grace window than anything with real per-unit delivery cost.

Measuring recovery properly: recoverable revenue, not total failed

The most common self-inflicted measurement error is dividing recovered revenue by every failed charge, hard declines included. That denominator is wrong on its face — you never intended to retry a stolen-card decline, so including it in the base only shrinks the ratio and makes genuine improvements to soft-decline handling look smaller than they are. The correct denominator is recoverable revenue: the subset of failures that were retry-eligible in the first place — soft declines, plus stale-credential declines fixable through Account Updater or a network token refresh before the next attempt. Recovered revenue divided by that narrower base is the number that actually reflects whether your retry and dunning logic is doing its job.

This same distinction underlies the difference between voluntary and involuntary churn. A subscriber who cancels because they no longer want the product is voluntary churn, and no amount of retry sophistication touches it. A subscriber who wanted to keep paying but whose charge failed and was never successfully recovered is involuntary churn — and it's the category retry and dunning logic can actually move. Conflating the two in a single "churned" bucket hides which failures are yours to fix.

The KPI set

Four numbers, tracked together rather than in isolation, describe whether the recovery stack is working:

Recovery rate — recovered revenue over recoverable revenue, as defined above. This is the headline number, and it's only meaningful with the denominator fixed.

Attempts-to-recovery — not just the mean, but the distribution. If nearly all recoveries land on attempt one or two, a schedule that keeps retrying out to attempt eight or twelve is mostly generating scheme-fee exposure and customer annoyance for a shrinking marginal return, and the schedule length should shrink to match.

Time-to-recovery — days from first decline to successful capture. This drives both cash-flow timing and the grace-period decision: a business whose recoveries cluster in the first 5 days can run a shorter grace period than one whose recoveries are still landing on day 20.

Cost per recovery attempt — the fully-loaded cost of a single retry: any scheme non-compliance fee exposure, the processing cost of a failed authorization, and any smart-retry vendor fee, amortized across attempts made rather than just attempts that succeeded. Without this number, "retry more" always looks free.

When to stop: the economics of a retry that costs more than it recovers

Retry probability declines with each attempt — most of the recovery in every PSP's own documentation happens early in the schedule, which is exactly why Stripe defaults to 8 attempts rather than 20, and why Recurly's basic dunning stops at 5. Continuing past the point where the marginal attempt's recovery probability, multiplied by the transaction's margin, is lower than the marginal cost of making that attempt is a net loss dressed up as diligence. For a low-ARPU subscription, that crossover point arrives fast — a handful of retries in, well before any scheme cap becomes the binding constraint. For a high-value B2B invoice, the math tolerates a longer schedule, because the margin on a single recovery dwarfs the processing and fee cost of getting there.

The scheme retry cap is a hard ceiling regardless of the economics — you cannot out-argue Visa's compliance fee structure with a spreadsheet showing positive expected value on attempt sixteen. But in practice, the economic stopping point usually arrives well before the scheme ceiling does. If your retry schedule is regularly running into the scheme cap rather than your own cost model, that's a sign the schedule was set by copying a competitor's default rather than by calculating your own numbers.

Common failure modes

One schedule for every decline code. The single most common mistake, and the one this entire article argues against: a fixed retry cadence applied uniformly regardless of whether the code was 51, 54, or 1A. Each needs a different action before timing is even relevant.

Retry storms from uncoordinated systems. A billing platform's automated dunning and a support team's manual resubmission, both firing on the same declined card without visibility into each other, is the most common route to an actual scheme excessive-reattempt fee — not a runaway automated schedule.

Retrying hard declines because the code mapping was never built. If the integration doesn't distinguish retry-eligible from never-retry codes at the code level, every decline defaults into the same retry bucket, including the ones the issuer will never approve.

Dunning that waits for retries to exhaust. Notifying the customer only after every automated attempt has failed removes the cheapest recovery channel — the customer updating their own card — for the entire length of the retry schedule.

Misattributing recovery to the retry engine. A recovery-rate improvement that coincided with a network token rollout or new Account Updater coverage often gets credited to a newly-purchased smart-retry product instead, because the two changes shipped close together and only one has a vendor dashboard showing a number.

Measuring against the wrong denominator. Covered above, and worth repeating as a failure mode on its own: recovered-over-total-failed is not the same metric as recovered-over-recoverable, and reporting the first while believing it's the second produces decisions based on a number that was never telling you what you thought.

Sources & methodology (10)

Stripe Billing's Smart Retries uses a machine learning model trained on more than 500 attributes across customer, business, payment, seasonality, and billing signals to time each retry, rather than a fixed schedule.

Checked:

Stripe reports Smart Retries and its other Billing revenue-recovery tools return $9 in recovered revenue for every $1 spent on Stripe Billing.

Checked:

Stripe's Smart Retries default policy is 8 retry attempts within a 2-week window, configurable to 1, 2, or 3 weeks, 1 month, or 2 months; custom schedules cap out at 3 retries. Stripe will not automatically retry a defined list of hard decline codes, including authentication_required, lost_card, stolen_card, and revocation_of_authorization.

Checked:

Adyen's Auto Rescue schedules retries on refused or charged-back shopper-not-present transactions using decline reason, BIN, and country as inputs to pick the optimal day and time to retry, distinct from Auto Retries, which reattempt technical-error declines immediately.

Checked:

Adyen reports a 300% increase in recovered payments since introducing a machine-learning model for auto retries in July 2021, using BIN, country, and decline reason to schedule retries rather than a fixed cadence.

Checked:

Recurly's default dunning retry schedule retries every 2 days for up to 5 attempts unless a merchant configures a custom dunning campaign; Recurly's separately-documented Intelligent Retries product caps at 20 total attempts or 60 days from invoice creation, whichever comes first, and schedules each attempt using decline reason and transaction-history patterns rather than a fixed cadence.

Checked:

Recurly reports a 25% average recovery rate from its dunning process across customers, and cites merchants who adopted its recovery tooling seeing average involuntary churn fall from roughly 6% to roughly 1%.

Checked:

Chargebee's Smart Retry logic sets retry intervals dynamically based on the type of gateway decline error rather than a fixed schedule, retrying up to 12 times; Smart Dunning is gated to Chargebee's Performance plan and above.

Checked:

Visa's compliance framework sorts declines into categories that permit no reattempt versus categories eligible for a capped number of reattempts within a rolling window, and assesses non-compliance fees on reattempts beyond the cap or on any reattempt of a never-retry code.

Checked:

Decline code 51 (Insufficient Funds) is described as retryable, most commonly resolving 24-48 hours after the initial decline; code 54 (Expired Card) is not retryable on the same card data and requires updated card details or an Account Updater query first; code 91 (Issuer or Switch Inoperative) is a technical failure appropriate to retry immediately via an alternate routing path.

Checked:

Source types explained in our Methodology.

Shaun Toh By Shaun Toh · Director, Digital Payments · Razer

More Psp And Infrastructure briefings