Decline code
Withdrawal Count Limit Exceeded
`withdrawal_count_limit_exceeded` is a decline Stripe returns when, per its official definition, the customer has exceeded the balance or credit limit available on their card. The name is a holdover from debit and prepaid card terminology, where issuers track a count or limit on withdrawal-style transactions, but functionally it lands the charge in the same place as a plain limit-exceeded decline: the customer's card can't cover the charge right now. It's a soft decline.
Why it happens
The naming is a common source of confusion. It sounds like it's about how many times a card has been used, but Stripe's stated definition ties it to balance and credit limit, not a literal transaction count. For subscription billing, this shows up in the same situations that produce other limit-related declines: a prepaid or debit card with a preset balance that a recurring charge exceeds, or a credit card sitting close to its limit when a monthly renewal comes due. Because the code is more common on prepaid and debit cards than traditional credit cards, subscription businesses with a customer base skewing toward those card types see it somewhat more often than businesses whose customers pay mostly with standard credit cards.
How to fix it
Yes. Since the underlying issue is a balance or limit constraint, the same logic that applies to `insufficient_funds` applies here: a retry timed after a likely balance replenishment (a payday, a prepaid card reload, a statement cycle reset) has real odds of succeeding, while an immediate retry right after the decline usually just hits the same limit again. Retry on a delay rather than immediately, and where possible bias the retry timing toward common income or reload cycles the same way you would for a straightforward insufficient-funds decline. If retries keep failing over multiple cycles, that's a signal the card's limit may be permanently too low for the subscription amount, at which point a direct message asking the customer to add a different card is more useful than continuing to retry indefinitely.
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