Skip to the tool
MoveAheadPayments Toolbox

Stripe decline code: insufficient_funds

Stripe's wording: "The card has insufficient funds to complete the purchase." The card is valid and the account is in good standing — there is simply not enough available balance or credit.

insufficient_fundsRetryable

The same request can succeed later. Retry with backoff.

What it means

The issuer checked the available balance or credit line and it did not cover the amount. Stripe's documented next step is that the customer needs to use an alternative payment method, which is the right advice for a one-off checkout. For recurring billing it is not the whole story: the condition is genuinely temporary, so a well-spaced retry is one of the few that converts. Note that `insufficient_funds` also exists as an error code with slightly different wording ("The customer's account has insufficient funds to cover this payment") and for bank-debit methods.

Common causes

  • The available balance or credit line does not cover the amount.
  • Pending authorisations from other merchants are holding funds, so the available balance is below the posted one.
  • A subscription renewal landing before the customer's pay date.
  • A prepaid or debit card with a small balance being used for a larger purchase.

How to fix it

  1. At checkout, follow Stripe's guidance and offer an alternative payment method — there is nothing to retry in the moment.
  2. For subscriptions, use Smart Retries or your own schedule spread over days. Retrying within minutes fails again and burns the card's velocity allowance.
  3. Cap your retry attempts. Card schemes limit reattempts on a declined recurring transaction, and exceeding them can get the card blocked entirely.
  4. Consider dunning email at the same time as the retry. The customer can top up or change card, which is what actually resolves it.

Tools that help

Frequently asked questions

Is insufficient_funds worth retrying?
For a subscription, yes — it is among the most recoverable declines there is, because the underlying condition changes on its own. For a checkout in progress, no: the customer is waiting, and Stripe's own next step is to ask for another payment method. The difference is whether anyone is watching the screen.