Stripe decline codes

Failure-aware emailsRetry timing by reason

Turn Stripe decline codes into the right recovery action.

A failed payment is not one problem. Each decline code tells you whether to ask for a new card, wait for a better retry window, send an authentication link, or escalate a valuable customer.

Code-by-code guides

Match each failure reason to a customer-safe recovery path.

insufficient_funds

Stripe insufficient_funds decline code

The customer does not have enough available funds for the payment at that moment.

Send a plain email that explains the payment did not clear because of available funds and gives the customer a secure way to update or change the payment method.

expired_card

Stripe expired_card decline code

The card attached to the subscription has expired and needs to be replaced.

Send an update-card email immediately with a secure Stripe-hosted billing link and a short explanation that the saved card has expired.

authentication_required

Stripe authentication_required decline code

The payment needs customer authentication before it can be completed.

Send a customer-safe authentication email that explains the bank needs one more confirmation step and links to the hosted payment flow.

do_not_honor

Stripe do_not_honor decline code

The issuer declined the payment for an unknown reason and usually wants the customer to contact the card issuer.

Tell the customer the bank did not approve the charge and give them two paths: try another payment method or contact the card issuer.

incorrect_cvc

Stripe incorrect_cvc decline code

The card security code did not match the issuer's records.

Send a short email asking the customer to re-enter or update their payment details through a secure billing link.

generic_decline

Stripe generic_decline decline code

The payment was declined for a broad or unknown reason, including some cases blocked by Stripe Radar or Adaptive Acceptance.

Send a neutral failed-payment email with a secure update-payment link and a simple note that the card could not be approved.

transaction_not_allowed

Stripe transaction_not_allowed decline code

The issuer did not permit this transaction type, and the customer usually needs issuer help or another payment method.

Ask the customer to use a different payment method or contact the issuer to allow the transaction.

card_velocity_exceeded

Stripe card_velocity_exceeded: what it means and how to recover the payment

The issuer applied a balance, credit, transaction, or velocity limit to the card.

Use generic decline language and give the customer a secure path to use another payment method or contact the card issuer.

Read the Stripe reason

Use the decline code as the first clue before deciding whether the payment needs a retry, a new method, or authentication.

Send the precise email

Tell the customer the useful part: what happened, what action fixes it, and where to update payment safely.

Escalate valuable accounts

High-MRR failures deserve human review before automation makes the relationship feel disposable.

Built from Stripe failure context.

Stripe documents decline codes for why a card payment failed and also notes that some Billing retries need customer action or a new payment method. Dunlo turns that signal into the recovery email, retry window, and escalation path.

Stripe decline code docs

Stripe decline code FAQ

What are Stripe decline codes?

Stripe decline codes are reason signals that explain why a card issuer or payment provider declined a payment. SaaS teams can use them to decide whether the customer needs a new card, authentication, issuer approval, or a later retry.

Should every Stripe decline code get the same dunning email?

No. An expired card needs a card-update message, insufficient funds needs timing-sensitive follow-up, and authentication_required needs a customer authentication path. The decline reason should shape the recovery copy.

Can Stripe automatically retry every failed payment?

No. Some Stripe Billing failures are hard declines where collection needs customer action or a new payment method. Retry-only dunning can waste time when the actual fix is a card update or bank approval.

How does Dunlo use Stripe decline codes?

Dunlo reads the failure context, sends failure-code-specific recovery emails, routes customers to Stripe-hosted payment update flows, and flags valuable accounts for founder review.