Stripe decline codes: a cheat sheet with hard vs soft declines

Stripe decline codes in plain English, sorted into hard and soft declines, with the next step for each code and the advice code to check before you retry.

The ChargeBell Team

Updated October 1, 2026. 8 min read.

How we check provider claims

Stripe decline codes tell you why a card payment failed. A declined payment can also carry an advice_code, which tells you whether another attempt makes sense. This cheat sheet lists the common codes, sorts them into hard and soft declines, and gives the next step for each. For subscription renewals, let your Stripe Billing retry settings decide when to retry unless you have a reason to step in.

Read the code before you retry

An expired card or a card reported lost needs a new payment method. An issuer outage or a processing error may clear on the next attempt. For everything in between, check the advice_code, your Billing retry settings, and the payment status in Stripe. Stripe's decline code reference has the full list.

Hard vs soft declines

A hard decline means the same card will not work for this charge, so retrying wastes attempts. A soft decline means the issuer refused this attempt but a later one, or one after the customer acts, can succeed. Stripe's decline code table does not label codes as hard or soft. The closest signal Stripe gives you is the advice_code on the charge outcome.

  • do_not_try_again. Treat this as a hard decline. Do not use the card again for the same transaction, and ask the customer for another payment method.
  • try_again_later. Treat this as a soft decline. Stripe says you can retry, and the customer should contact their issuer if later attempts also fail.
  • confirm_card_data. Some card details were wrong. Ask the customer to check the number, expiry date, CVC, or address before trying again.

Card networks limit how many times you can retry a single charge. Stripe's card decline guide recommends at most eight retries for charges that allow them, because issuers can read extra retries as fraud and decline more of your good payments.

TypeCommon Stripe decline codesWhat to do
Hard declineexpired_card, lost_card, stolen_card, pickup_card, fraudulentAsk for another payment method. Do not retry the same card.
Soft declineinsufficient_funds, processing_error, issuer_not_available, authentication_requiredRetry later, or after the customer authenticates or adds funds.
Fix the detailsincorrect_cvc, incorrect_number, incorrect_zipAsk the customer to re-enter the card details, then try again.
Unknown reasongeneric_decline, do_not_honor, call_issuerCheck the advice code. Ask the customer to call their issuer or use another card.
A practical grouping of card decline codes. Stripe does not publish this grouping, so check the advice_code on each payment.

Stripe decline codes and the next action

The table below is a sample of card decline codes, not a frequency ranking. The next actions follow Stripe's code descriptions and its card decline guide. Open the payment in Stripe when the customer or payment method needs a different path.

CodeWhat it meansNext action
generic_declineThe issuer declined for an unknown reason, or Stripe Radar or Adaptive Acceptance blocked the payment.Check the payment in Stripe for a block and an advice code. If the issuer declined it, ask the customer to call their issuer or use another method.
insufficient_fundsThe card does not have enough funds for this purchase.Stripe's next step is another payment method. For a subscription, check your Billing retry schedule before adding manual attempts.
do_not_honorThe issuer declined for an unknown reason.Ask the customer to call their issuer or use another payment method. Do not promise that a timed retry will work.
expired_cardThe card has expired.Ask the customer for another card.
incorrect_cvcThe CVC is wrong. This is often a typo.Ask the customer to enter the correct CVC and try again.
incorrect_numberThe card number is wrong.Ask the customer to enter the correct card number.
lost_card / stolen_cardThe card was reported lost or stolen.Ask for another payment method. Show the customer the generic_decline message, not the real reason.
fraudulentStripe suspects the payment is fraudulent.Do not retry. Show the customer the same message you would show for generic_decline.
authentication_requiredThe issuer requires authentication such as 3D Secure.Send the customer through authentication. For an off-session payment, ask them to come back and pay on-session.
card_velocity_exceededThe customer went over the balance, credit limit, or transaction amount limit on the card.Ask the customer to call their issuer or use another payment method.
processing_errorAn error occurred while processing the card.Try again. If it fails again, ask the customer to call their issuer.
call_issuerThe issuer declined for an unknown reason.Ask the customer to call their issuer for details.
pickup_cardThe customer cannot use this card for this payment. It may have been reported lost or stolen.Ask the customer to call their issuer or use another card. Do not mention suspected fraud.
Card decline codes and next actions. Checked against Stripe documentation on October 1, 2026.

A safe retry workflow

  1. Open the payment in Stripe. Read the decline code, the advice_code, and the payment method. Check whether Radar blocked the payment or the issuer declined it.
  2. Pick the customer action. Depending on the code, ask the customer to authenticate, fix their card details, call their issuer, or use another payment method. Never show fraudulent, lost_card, or stolen_card to the customer.
  3. Check Billing before you retry. Smart Retries picks retry times for eligible subscription invoices. Follow your dunning settings and Stripe's retry guidance instead of a fixed payday rule.
  4. Confirm the outcome. Wait for a successful payment in Stripe before you mark the account recovered. The first failure alert does not tell you what the retry plan is.

When the same card cannot work

An expired card, or one reported lost or stolen, needs a new payment method. For subscriptions, send the customer to Stripe's hosted page for updating a payment method if you use it. Keep fraud-related decline codes out of customer emails. Check the new card and the next payment status in Stripe before you restore access or close the support ticket.

Get declined payment alerts in Slack

ChargeBell sends a critical Slack alert when it receives payment_intent.payment_failed. The alert shows the amount, the customer name or email when Stripe has one, and Stripe's failure message. It does not show the decline code or a retry date, so open the linked payment in Stripe for those. ChargeBell does not alert on Stripe's separate invoice.payment_failed event today, which also fires when an invoice has no saved payment method. The failed payment alerts guide covers the follow-up, and the Stripe Slack integration page shows every alert type.

# billing-ops

ChargeBellAPP

⚠️ A $49.00 payment didn't go through

Lena at Fernworks · Your card has insufficient funds.

Check Stripe to see if it will be retried. · View in Stripe

Frequently asked questions

What is the difference between hard and soft declines?

A hard decline means the card will not work for this charge, for example an expired, lost, or stolen card. A soft decline means this attempt failed but a later one can succeed, for example after an issuer outage or once the customer authenticates. In Stripe, check the advice_code. do_not_try_again works like a hard decline and try_again_later like a soft one.

What does generic_decline mean in Stripe?

generic_decline means the issuer declined for an unknown reason, or Stripe Radar or Adaptive Acceptance blocked the payment. Check the payment in Stripe for a block and an advice code. If the issuer declined it, ask the customer to call their issuer or use another payment method.

Should I retry an insufficient_funds decline?

A later attempt can work, but Stripe's recommended next step is another payment method. For subscription invoices, check your Billing retry settings and the advice code instead of guessing a payday schedule.

Which Stripe decline codes should never be retried?

Do not retry the same card after lost_card, stolen_card, fraudulent, or expired_card. For pickup_card, ask the customer to call their issuer or use another card. An advice_code of do_not_try_again also means you should stop retrying that card.

How many times can I retry a declined card in Stripe?

Stripe recommends at most eight retries for charges that allow retries. Card networks limit retries on a single charge, and issuers can treat extra attempts as fraud.

Primary sources