Visa's excessive reattempts rule on Stripe | RecoverFlow

Guide

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

Last updated 16 August 2026 · written by Bruce McGinley, who builds RecoverFlow

Short answer

Visa's rules broadly prohibit more than 15 retries of a single payment over 30 calendar days. Because a subscription's retries all land on the same card for the same invoice, that is usually described as a budget of 15 reattempts per card per rolling 30 days.

Stripe enforces it. After the 15th retry attempt on a Visa transaction, Stripe automatically blocks subsequent retry attempts where it determines there is a low chance of a successful authorization.

For one group of declines the budget is not 15. It is zero, and the first reattempt is already one too many.

The rule, in the fewest words possible

The limitWhat it isWhere it comes from
Reattempts of one failed paymentNo more than 15 in 30 calendar daysVisa's rules, quoted directly by Stripe
Reattempts after a Category 1 responseNone, using the same account informationVisa's authorization response code categories
What Stripe does at the limitBlocks subsequent retry attempts after the 15th on a Visa transaction, where it judges a low chance of authorizationStripe support documentation
How a blocked attempt looks in the APIoutcome.type of blocked, outcome.reason of previously_declined_do_not_retry, surfaced to you as card_declined with generic_declineStripe support documentation
Stripe Smart Retries recommended default8 tries within 2 weeksStripe Billing documentation

Two things in that table are worth reading twice. The budget is counted over a rolling window, not a calendar month, so it does not reset on the 1st. And the last row is the interesting one: Stripe's own recommended default sits at roughly half the network ceiling, which is not an accident.

When it started, since the date is reported wrong constantly

The rule takes effect 17 April 2021. That date is in Visa's own bulletin, article AI10325, which says in its overview: "Effective 17 April 2021, Visa will update its rules for declined transaction resubmission and the use of authorization response codes." The same document is where the 15-in-30 figure comes from, in the passage moving four response codes into Category 2 "to allow merchants to reattempt up to 15 times in 30 days".

April 2022 is widely repeated as the start date and it refers to something else: a later phase of the associated fee schedule, not the reattempt cap. If you are reconciling a statement line, the fee timeline and the rule timeline are two different things.

What Stripe does when you cross it

You do not get a warning email. The attempt simply stops being an attempt.

Stripe's own description is that after the 15th retry attempt on a Visa transaction, it will automatically block subsequent retry attempts if it determines there is a low chance of a successful authorization for the given charge. The charge that comes back is not an issuer decline. It never reached the issuer. In the API it carries an outcome.type of blocked and an outcome.reason of previously_declined_do_not_retry, while the error your code sees is the ordinary card_declined with a decline_code of generic_decline.

Why this matters for your reporting: a blocked attempt shows up in your failed payments as generic_decline, which is the least informative code Stripe has. If you are counting decline codes to decide what to do next, budget exhaustion hides inside your generic_decline bucket wearing a disguise. Check outcome.reason on the charge, not just the decline code.

Stripe describes a related behaviour on its declines page for accounts on interchange plus pricing, where Adaptive Acceptance blocks certain payments to help avoid unnecessary network costs, giving an outcome.reason of low_probability_of_authorization and an advice_code of do_not_try_again. Different mechanism, same lesson: an attempt that the network would rather you did not send can be stopped before it is sent.

The declines where the budget is zero, not fifteen

Visa sorts its authorization response codes into categories. Category 1 is defined as the issuer will never approve, and a transaction that receives one should not be resubmitted using the same account information. Categories 2 and 3 are the ones the 15 in 30 days allowance applies to.

Category 1 is where the account is gone rather than temporarily unable to pay: a card reported lost, a card reported stolen, a closed account, an account that does not exist. In Stripe's vocabulary those arrive as codes like lost_card, stolen_card, pickup_card, incorrect_number and invalid_account.

So the arithmetic changes shape. On an ordinary soft decline you have a budget of 15 and Stripe's default spends 8 of it. On a Category 1 response you have a budget of zero, and the very first reattempt is already excessive. Nothing about the retry configuration in your Dashboard knows the difference.

This is the same population as the nine codes Stripe will not execute a retry for, but the two lists are not identical and they exist for different reasons, which is the next section.

Why Stripe's default is 8 and not 15

Smart Retries recommends 8 tries within 2 weeks. The network allows 15 over 30 days. Stripe is deliberately leaving room.

Part of that is the budget itself. Attempts are not free actions, and a schedule that spends the whole allowance leaves nothing for a manual retry, a customer-triggered payment from the hosted invoice page, or the attempt that follows once a new card is finally added. Part of it is that issuers watch attempt frequency: a card being hammered looks less like a subscription renewal and more like someone testing a stolen number, and the sensible issuer response to that is to decline more.

The practical read: 8 within 2 weeks is not a timid default you should raise to look thorough. It is a schedule that finishes with headroom, on purpose.

Two separate limits people keep merging into one

This is the point almost every article on failed payments gets wrong, and it is worth being pedantic about because the two limits behave completely differently.

The nine code suppressionThe reattempt budget
Who imposes itStripeVisa
What it limitsWhether a scheduled retry is executed at allHow many executed attempts one payment may have
Does the attempt reach the issuerNo, and no Charge is createdYes, until the budget runs out
What clears itAttaching a new payment methodTime, as the rolling 30 day window moves
What you seeattempt_count climbing with nothing happeningA blocked charge reported as generic_decline

They are independent. An invoice can sit well inside its 15 and still be going nowhere because it is on one of the nine. Another can be clear of all nine and still be blocked because the budget is spent. Fixing one tells you nothing about the other.

The reason this gets expensive is that the two systems retrying your invoices cannot see each other's counters. Stripe's Smart Retries draw down the budget. A third-party recovery tool retrying on top of Stripe draws down the same budget. Your own manual retry from the Dashboard draws down the same budget. Nobody is keeping a running total on your behalf unless something is built to do it.

How to see where you stand

There is no dashboard number for this, which is the whole problem. You can get close from the API.

Count attempts per card rather than per invoice. A customer whose renewal failed in June and again in July is one card carrying two invoices worth of attempts inside the same rolling window, and the window does not care which invoice they belonged to.

If you want the money version of this rather than the count version, the retry waste calculator takes your decline code counts and returns what share of your failed revenue is sitting on cards that no attempt can collect from. It runs in the browser and uploads nothing.

Questions people actually ask

How many times can you retry a failed Visa payment?

Visa's rules broadly prohibit more than 15 retries of a single payment over 30 calendar days, and Stripe quotes that figure directly. In a subscription those retries all land on the same card for the same invoice, which is why the rule is usually described as 15 per card per 30 days. The window is rolling, so it does not reset at the start of a month.

What happens after the 15th retry?

Stripe automatically blocks subsequent retry attempts on a Visa transaction where it determines there is a low chance of a successful authorization. The attempt never reaches the issuer. In the API the charge carries an outcome type of blocked with a reason of previously_declined_do_not_retry, and it surfaces to your code as card_declined with a decline_code of generic_decline.

Do Stripe's own Smart Retries count towards the 15?

Every executed attempt on the card counts, whoever sent it. Stripe's scheduled retries, a manual retry you click in the Dashboard, and a third-party recovery tool's retries all draw on the same budget, and none of those systems can see the others' counters. That is why Stripe's recommended default of 8 tries in 2 weeks leaves room rather than filling the allowance.

Are there declines where even one retry is too many?

Yes. Visa's Category 1 responses mean the issuer will never approve, and the transaction should not be resubmitted using the same account information. A card reported lost, a card reported stolen, a closed account and an account that never existed all sit in that group. The permitted number of reattempts there is zero, not 15.

Is this the same thing as the nine codes Stripe will not retry?

No, and conflating them is the most common mistake in this area. The nine codes are a Stripe-side suppression: Stripe keeps the schedule running but does not send the charge until a new payment method exists. The reattempt rule is a network-side budget on attempts that do get sent. A payment can be well inside its 15 and still blocked by the nine, or clear of the nine and out of budget.

Where this came from

Checked against primary sources on 4 August 2026. If Stripe changes something and this page has not caught up, tell us and it gets fixed.

If you would rather not build this yourself

RecoverFlow watches your Stripe account for failed subscription payments, stops retrying the ones that cannot succeed, and emails the customers whose card simply needs replacing. It charges 25% of what it can attribute to a specific action it took, with a $29 monthly floor and a $299 monthly ceiling, and the floor is waived for the first 30 days.

Before any of that, you can find out whether it is worth doing at all. Answer three questions in a reply and I will send back what your failed payments are probably costing you, how much of it is genuinely recoverable, and whether Stripe's own free features already handle it. No Stripe connection, no account, no card.

It is early. It is run by one person. If Stripe's own free retry settings are enough for you, use those instead, and the pricing page says exactly when that is the right call.

Get the free audit