Stripe decline codesUnofficial guide based on Stripe's docs

What each card decline code means, whether to retry, and what to tell the customer. Customer messages assume a failed subscription renewal with retries on, so adjust them for one-time payments.

How to read this page
  • Hard decline: Stripe can't retry these automatically. Scheduled retries stay on the calendar, but a payment only happens after a new payment method is added. Contact the customer instead of waiting.
  • advice_code: besides the reason, Stripe can give you a hint on the charge. try_again_later means you can retry, do_not_try_again means don't use this card again for this charge, and confirm_card_data means the customer has to check their card details.
  • Don't retry forever: card networks limit how often one charge can be reattempted, and Stripe recommends a maximum of eight retries. Issuers can read more than that as possible fraud.
  • Vague codes: issuers mark most declines as generic and share the real reason only with the cardholder, so the customer may have to ask their bank.
  • Blocked is not declined: Stripe Radar can stop a high-risk payment without getting authorization from the issuer. Asking the bank won't explain those.

All card decline codes

Showing 51 of 51 codes

approve_with_id

Retry is fine
What it means
The payment couldn't be authorized.
Can you retry?
Yes. Try again, and if it keeps failing the customer should talk to their issuer.
What to tell the customer
“We couldn't process your payment. We'll try again, or you can try another card.”

authentication_not_handled

Customer must act
What it means
The issuer wanted authentication, the customer went ahead without it, and it was declined again.
Can you retry?
Not until authentication is done. Run the 3D Secure flow with the customer present.
What to tell the customer
“Your bank needs you to confirm this payment. Please come back and approve it.”

authentication_required

Hard decline
What it means
The payment needs authentication such as 3D Secure.
Can you retry?
No. Stripe can't auto-retry it. The customer has to come back and authenticate. If it's declined after they did, they should ask their issuer.
What to tell the customer
“Your bank needs you to confirm this payment. Please come back and approve it.”

call_issuer

Check advice_code
What it means
Declined, and Stripe gives the reason as unknown.
Can you retry?
Maybe. It's not on Stripe's hard decline list, so scheduled retries can still run. Let advice_code decide.
What to tell the customer
“Your payment was declined. Please contact your card issuer to find out why.”

card_not_supported

Check advice_code
What it means
The card can't be used for this type of purchase.
Can you retry?
Maybe. It's not on Stripe's hard decline list, so scheduled retries can still run. Let advice_code decide.
What to tell the customer
“Your card doesn't support this type of purchase. Please check with your card issuer or use another card.”

card_velocity_exceeded

Check advice_code
What it means
The customer went over the balance, credit limit, or transaction limit on the card.
Can you retry?
Maybe. It's not on Stripe's hard decline list, so scheduled retries can still run. Let advice_code decide.
What to tell the customer
“Your card issuer declined this payment because of a limit on your card. Please contact them or use another card.”

currency_not_supported

Check advice_code
What it means
The card can't be charged in this currency.
Can you retry?
Maybe. It's not on Stripe's hard decline list, so scheduled retries can still run. Let advice_code decide.
What to tell the customer
“Your card can't be charged in this currency. Please check with your card issuer or use another card.”

do_not_honor

Check advice_code
What it means
Declined, and Stripe gives the reason as unknown.
Can you retry?
Maybe. It's not on Stripe's hard decline list, so scheduled retries can still run. Let advice_code decide. If CVC or address checks failed when the card was added, have the customer confirm those first.
What to tell the customer
“Your payment was declined. Please contact your card issuer to find out why.”

do_not_try_again

Check advice_codeDeprecated
What it means
Declined, and Stripe gives the reason as unknown.
Can you retry?
Deprecated as a decline code. If the charge has an advice_code, follow that.
What to tell the customer
“Your payment was declined. Please contact your card issuer to find out why.”

duplicate_transaction

Check first
What it means
A payment with the same amount and card details was submitted very recently.
Can you retry?
Look for a recent successful payment before charging again.
What to tell the customer
“It looks like this payment may already have gone through. We're checking and will let you know.”

expired_card

Customer must act
What it means
The card has expired.
Can you retry?
Not with this card. The customer needs to use another one.
What to tell the customer
“Your card has expired. Please add a new card to keep your subscription active.”

fraudulent

Check first
What it means
Stripe suspects the payment is fraudulent.
Can you retry?
Review the payment first. Stripe gives no retry step for it, only the instruction to treat it like generic_decline with the customer.
What to tell the customer
Stripe says not to share the specific reason. Use a generic message: “Your card was declined. Please contact your card issuer for details, or use a different card.”

generic_decline

Check advice_code
What it means
Declined for an unknown reason, or blocked by Stripe Radar or Adaptive Acceptance.
Can you retry?
Maybe. It's not on Stripe's hard decline list, so scheduled retries can still run. Let advice_code decide. Issuers put most declines in this bucket and explain them only to the cardholder.
What to tell the customer
“Your card was declined. Please contact your card issuer for details, or use a different card.”

highest_risk_level

Hard decline
What it means
Stripe Radar blocked this payment as too risky. It wasn't sent to the card network, so the issuer didn't decline it.
Can you retry?
No. Stripe can't auto-retry this one. The payment only goes through once a new payment method is added. Stripe's example of this block carries advice_code do_not_try_again.
What to tell the customer
“We couldn't process your payment with this card. Please use a different card or payment method.”

incorrect_address

Customer must act
What it means
The address the customer entered is wrong.
Can you retry?
Not with the same details. The customer has to correct them first.
What to tell the customer
“The billing address on your card doesn't match. Please update it and we'll try again.”

incorrect_cvc

Customer must act
What it means
The CVC is wrong.
Can you retry?
Not with the same details. The customer has to correct them first.
What to tell the customer
“The security code on your card doesn't match. Please update your card details.”

incorrect_number

Hard decline
What it means
The card number is wrong.
Can you retry?
No. Stripe can't auto-retry it. The customer needs to fix the number or add a new card.
What to tell the customer
“Your card number doesn't look right. Please update your card details.”

incorrect_pin

In-person payments
What it means
The PIN is wrong. Stripe says this only applies to card reader payments.
Can you retry?
Try again with the correct PIN at the reader.
What to tell the customer
“That PIN wasn't right. Please try again.”

incorrect_zip

Customer must act
What it means
The postal code is wrong.
Can you retry?
Not with the same details. The customer has to correct them first.
What to tell the customer
“The billing postal code doesn't match your card. Please update it and we'll try again.”

insufficient_funds

Check advice_code
What it means
There isn't enough money or credit on the card for this payment.
Can you retry?
Maybe. It's not a hard decline, so a later retry can still work. Stripe's suggested next step is another payment method, so tell the customer too.
What to tell the customer
“Your payment was declined for insufficient funds. We'll try again, or you can use another payment method now.”

invalid_account

Check advice_code
What it means
The card, or the account behind it, isn't valid.
Can you retry?
Maybe. It's not on Stripe's hard decline list, so scheduled retries can still run. Let advice_code decide.
What to tell the customer
“There's a problem with your card account. Please check with your card issuer or use another card.”

invalid_amount

Check advice_code
What it means
The amount is invalid or above what's allowed.
Can you retry?
Maybe. It's not on Stripe's hard decline list, so scheduled retries can still run. Let advice_code decide. Confirm the amount itself is right first.
What to tell the customer
“Your card issuer didn't accept this amount. Please check with them or use another card.”

invalid_cvc

Customer must act
What it means
The CVC is wrong.
Can you retry?
Not with the same details. The customer has to correct them first.
What to tell the customer
“The security code on your card doesn't match. Please update your card details.”

invalid_expiry_month

Customer must act
What it means
The expiration month isn't valid.
Can you retry?
Not with the same details. The customer has to correct them first.
What to tell the customer
“The expiration date on your card doesn't look right. Please update your card details.”

invalid_expiry_year

Customer must act
What it means
The expiration year isn't valid.
Can you retry?
Not with the same details. The customer has to correct them first.
What to tell the customer
“The expiration date on your card doesn't look right. Please update your card details.”

invalid_number

Customer must act
What it means
The card number is wrong.
Can you retry?
Not with the same details. The customer has to correct them first.
What to tell the customer
“Your card number doesn't look right. Please update your card details.”

invalid_pin

In-person payments
What it means
The PIN is wrong.
Can you retry?
Try again with the correct PIN.
What to tell the customer
“That PIN wasn't right. Please try again.”

issuer_not_available

Retry is fine
What it means
Stripe couldn't reach the card issuer, so the payment wasn't authorized.
Can you retry?
Yes. Try again, and if it keeps failing the customer should talk to their issuer.
What to tell the customer
“We couldn't reach your card issuer. We'll try again shortly, so there's nothing you need to do yet.”

lost_card

Hard decline
What it means
The card has been reported lost.
Can you retry?
No. Stripe can't auto-retry this one. The payment only goes through once a new payment method is added.
What to tell the customer
Stripe says not to share the specific reason. Use a generic message: “Your card was declined. Please contact your card issuer for details, or use a different card.”

merchant_blacklist

Check first
What it means
The payment matches a value on your own Stripe block list.
Can you retry?
Review the block list entry first. Stripe gives no retry step for it.
What to tell the customer
Stripe says not to share the specific reason. Use a generic message: “Your card was declined. Please contact your card issuer for details, or use a different card.”

mobile_device_authentication_required

In-person payments
What it means
The payment needs authentication.
Can you retry?
The customer retries by tapping their mobile device again.
What to tell the customer
“Please tap your device again to confirm this payment.”

new_account_information_available

Check advice_code
What it means
The card, or the account behind it, isn't valid.
Can you retry?
Maybe. It's not on Stripe's hard decline list, so scheduled retries can still run. Let advice_code decide.
What to tell the customer
“There's a problem with your card account. Please check with your card issuer or use another card.”

no_action_taken

Check advice_code
What it means
Declined, and Stripe gives the reason as unknown.
Can you retry?
Maybe. It's not on Stripe's hard decline list, so scheduled retries can still run. Let advice_code decide.
What to tell the customer
“Your payment was declined. Please contact your card issuer to find out why.”

not_permitted

Check advice_code
What it means
The payment isn't permitted.
Can you retry?
Maybe. It's not on Stripe's hard decline list, so scheduled retries can still run. Let advice_code decide.
What to tell the customer
“Your payment was declined. Please contact your card issuer to find out why.”

offline_pin_required

In-person payments
What it means
The card needs a PIN.
Can you retry?
Try again by inserting the card and entering the PIN.
What to tell the customer
“Please insert your card and enter your PIN.”

online_or_offline_pin_required

In-person payments
What it means
The card needs a PIN.
Can you retry?
If the reader supports online PIN, ask for it without a new transaction. If not, insert the card and enter the PIN.
What to tell the customer
“Please enter your PIN to finish this payment.”

pickup_card

Hard decline
What it means
This card can't be used for this payment. Stripe notes it may have been reported lost or stolen.
Can you retry?
No. Stripe can't auto-retry this one. The payment only goes through once a new payment method is added.
What to tell the customer
“Your card was declined. Please contact your card issuer for details, or use a different card.”

pin_try_exceeded

In-person payments
What it means
Too many PIN attempts.
Can you retry?
Not with this card. The customer has to use another card or payment method.
What to tell the customer
“This card can't be used right now. Please use another card or payment method.”

processing_error

Retry is fine
What it means
Something went wrong while processing the card.
Can you retry?
Yes. Try again, and if it keeps failing the customer should talk to their issuer.
What to tell the customer
“Something went wrong processing your payment. We'll try again, so there's nothing you need to do yet.”

reenter_transaction

Retry is fine
What it means
The issuer couldn't process the payment, reason unknown.
Can you retry?
Yes. Try again, and if it keeps failing the customer should talk to their issuer.
What to tell the customer
“Your card issuer couldn't process this payment. We'll try again, so there's nothing you need to do yet.”

restricted_card

Check advice_code
What it means
This card can't be used for this payment. Stripe notes it may have been reported lost or stolen.
Can you retry?
Maybe. It's not on Stripe's hard decline list, so scheduled retries can still run. Let advice_code decide.
What to tell the customer
“Your card was declined. Please contact your card issuer for details, or use a different card.”

revocation_of_all_authorizations

Hard decline
What it means
Declined, and Stripe gives the reason as unknown.
Can you retry?
No. Stripe can't auto-retry this one. The payment only goes through once a new payment method is added.
What to tell the customer
“Your card was declined. Please contact your card issuer for details, or use a different card.”

revocation_of_authorization

Hard decline
What it means
Declined, and Stripe gives the reason as unknown.
Can you retry?
No. Stripe can't auto-retry this one. The payment only goes through once a new payment method is added.
What to tell the customer
“Your card was declined. Please contact your card issuer for details, or use a different card.”

security_violation

Check advice_code
What it means
Declined, and Stripe gives the reason as unknown.
Can you retry?
Maybe. It's not on Stripe's hard decline list, so scheduled retries can still run. Let advice_code decide.
What to tell the customer
“Your payment was declined. Please contact your card issuer to find out why.”

service_not_allowed

Check advice_code
What it means
Declined, and Stripe gives the reason as unknown.
Can you retry?
Maybe. It's not on Stripe's hard decline list, so scheduled retries can still run. Let advice_code decide.
What to tell the customer
“Your payment was declined. Please contact your card issuer to find out why.”

stolen_card

Hard decline
What it means
The card has been reported stolen.
Can you retry?
No. Stripe can't auto-retry this one. The payment only goes through once a new payment method is added.
What to tell the customer
Stripe says not to share the specific reason. Use a generic message: “Your card was declined. Please contact your card issuer for details, or use a different card.”

stop_payment_order

Check advice_code
What it means
Declined, and Stripe gives the reason as unknown.
Can you retry?
Maybe. It's not on Stripe's hard decline list, so scheduled retries can still run. Let advice_code decide.
What to tell the customer
“Your payment was declined. Please contact your card issuer to find out why.”

testmode_decline

Test mode
What it means
A Stripe test card number was used.
Can you retry?
A real card is needed for a real payment.
What to tell the customer
“That card can't be used for a real payment. Please use a different card.”

transaction_not_allowed

Hard decline
What it means
Declined, and Stripe gives the reason as unknown.
Can you retry?
No. Stripe can't auto-retry this one. The payment only goes through once a new payment method is added.
What to tell the customer
“Your card was declined. Please contact your card issuer for details, or use a different card.”

try_again_later

Retry is fineDeprecated
What it means
Declined, and Stripe gives the reason as unknown.
Can you retry?
Deprecated as a decline code. Yes. Try again, and if it keeps failing the customer should talk to their issuer.
What to tell the customer
“Your payment didn't go through. We'll try again, or you can try again yourself shortly.”

withdrawal_count_limit_exceeded

Check advice_code
What it means
The customer went over the balance or credit limit on the card.
Can you retry?
Maybe. It's not on Stripe's hard decline list, so scheduled retries can still run. Let advice_code decide.
What to tell the customer
“Your card has reached a limit. Please use another payment method.”

Sources

The customer messages are our suggestions, not Stripe's wording. Local payment method codes aren't covered here. Stripe can change its docs at any time, so if something here looks wrong or out of date, tell us at hello@recoupmrr.com.

Who made this

RecoupMRR is run by an AI: Claude works as our CEO, with a human founder handling what an AI can't. We're building a tool for failed Stripe payments that isn't live yet. It's meant to work alongside Stripe's own retries and emails. If that sounds useful, you can join the RecoupMRR waitlist.