Reference
Every Stripe decline code, what it means, whether the payment is recoverable, and the exact retry strategy for each. Use this reference when building or tuning a dunning flow.
Temporary. The card is still valid. Retry with the right timing and most will recover. Examples: insufficient_funds, processing_error, try_again_later.
Permanent. The card cannot be charged. Skip retries and contact the customer. Examples: expired_card, incorrect_number, stolen_card.
| Code | Meaning |
|---|---|
| insufficient_funds | The card does not have enough available balance or credit to cover the charge at the moment the transaction was attempted. |
| generic_decline | The card issuer declined the charge but did not provide a specific reason. This is a catch-all soft decline used when the bank will not say why. |
| card_declined | A generic decline from the card issuer. Very similar to generic_decline: the bank said no without giving a specific reason. |
| do_not_honor | The issuing bank has flagged the charge, usually for a fraud or risk reason, and will not approve it right now. |
| expired_card | The card has passed its expiration date. This is a hard decline: retrying will never succeed until the card is replaced. |
| incorrect_number | The card number is not valid. It likely failed the Luhn checksum or does not exist. |
| invalid_number | The card number is not a valid card number according to the issuer. |
| incorrect_cvc | The card verification code (CVC) provided does not match what the bank has on file. |
| invalid_cvc | The CVC provided is not formatted correctly (wrong length or contains non-digits). |
| invalid_expiry_month | The expiration month submitted is not a valid value (not between 1 and 12). |
| invalid_expiry_year | The expiration year is invalid, typically because it is in the past or is not a valid 4-digit year. |
| incorrect_zip | The ZIP or postal code entered does not match the billing address the bank has on file for this card. |
| authentication_required | The card issuer requires Strong Customer Authentication (3D Secure) before the charge can proceed. |
| fraudulent | The card issuer has flagged this specific card as fraudulent. The card is compromised and cannot be charged. |
| stolen_card | The card has been reported stolen to the issuing bank. It cannot be charged. |
| lost_card | The card was reported lost to the issuer and has been blocked. |
| pickup_card | The card issuer has instructed the merchant to retain the card. The card is blocked. |
| card_not_supported | The card does not support this type of transaction. |
| currency_not_supported | The card cannot accept charges in the currency you tried to use. |
| processing_error | A temporary error occurred at Stripe or the card network while processing the charge. |
| try_again_later | A temporary issue at the issuer side. The charge should succeed if retried soon. |
| issuer_not_available | The card issuer could not be reached by the card network. A temporary issue. |
| reenter_transaction | The issuer returned a generic "try again" response, indicating a transient problem. |
| call_issuer | The card issuer requires the customer to contact them before approving the charge. |
| card_velocity_exceeded | The card has exceeded a velocity limit (too many transactions or too much amount in a short window). |
| withdrawal_count_limit_exceeded | The card has reached its daily transaction count limit. |
| transaction_not_allowed | The card issuer has blocked this type of transaction for this card. |
| not_permitted | The payment type is not allowed by the card issuer. |
| service_not_allowed | The card issuer does not allow charges for your merchant category or service type. |
| restricted_card | The card has been restricted by the issuer for specific use cases or amounts. |
| invalid_account | The account associated with the card is not valid or has been closed. |
| new_account_information_available | The issuer has newer card information available (new number, new expiration). |
| pin_try_exceeded | The customer has entered an incorrect PIN too many times; the card is temporarily locked. |
| invalid_amount | The charge amount is invalid (too small, too large, or malformed). |
| duplicate_transaction | The issuer detected what appears to be a duplicate of a recent transaction. |
| merchant_blacklist | The card issuer has blocked your merchant account specifically. |
| approve_with_id | The issuer requests manual verification before approving the charge. |
Temporary issue. The card is still valid. High recovery rate with proper retry timing.
insufficient_fundsThe card does not have enough available balance or credit to cover the charge at the moment the transaction was attempted.
generic_declineThe card issuer declined the charge but did not provide a specific reason. This is a catch-all soft decline used when the bank will not say why.
card_declinedA generic decline from the card issuer. Very similar to generic_decline: the bank said no without giving a specific reason.
do_not_honorThe issuing bank has flagged the charge, usually for a fraud or risk reason, and will not approve it right now.
processing_errorA temporary error occurred at Stripe or the card network while processing the charge.
try_again_laterA temporary issue at the issuer side. The charge should succeed if retried soon.
issuer_not_availableThe card issuer could not be reached by the card network. A temporary issue.
reenter_transactionThe issuer returned a generic "try again" response, indicating a transient problem.
call_issuerThe card issuer requires the customer to contact them before approving the charge.
card_velocity_exceededThe card has exceeded a velocity limit (too many transactions or too much amount in a short window).
withdrawal_count_limit_exceededThe card has reached its daily transaction count limit.
duplicate_transactionThe issuer detected what appears to be a duplicate of a recent transaction.
approve_with_idThe issuer requests manual verification before approving the charge.
Permanent issue. The card cannot be charged. Customer must provide a new payment method.
expired_cardThe card has passed its expiration date. This is a hard decline: retrying will never succeed until the card is replaced.
incorrect_numberThe card number is not valid. It likely failed the Luhn checksum or does not exist.
invalid_numberThe card number is not a valid card number according to the issuer.
incorrect_cvcThe card verification code (CVC) provided does not match what the bank has on file.
invalid_cvcThe CVC provided is not formatted correctly (wrong length or contains non-digits).
invalid_expiry_monthThe expiration month submitted is not a valid value (not between 1 and 12).
invalid_expiry_yearThe expiration year is invalid, typically because it is in the past or is not a valid 4-digit year.
incorrect_zipThe ZIP or postal code entered does not match the billing address the bank has on file for this card.
card_not_supportedThe card does not support this type of transaction.
currency_not_supportedThe card cannot accept charges in the currency you tried to use.
transaction_not_allowedThe card issuer has blocked this type of transaction for this card.
not_permittedThe payment type is not allowed by the card issuer.
service_not_allowedThe card issuer does not allow charges for your merchant category or service type.
restricted_cardThe card has been restricted by the issuer for specific use cases or amounts.
invalid_accountThe account associated with the card is not valid or has been closed.
new_account_information_availableThe issuer has newer card information available (new number, new expiration).
pin_try_exceededThe customer has entered an incorrect PIN too many times; the card is temporarily locked.
invalid_amountThe charge amount is invalid (too small, too large, or malformed).
merchant_blacklistThe card issuer has blocked your merchant account specifically.
Bank requires extra verification (like 3D Secure). Recoverable once the customer authenticates.
Card is compromised or flagged for fraud. Do not retry. Detach the payment method.
fraudulentThe card issuer has flagged this specific card as fraudulent. The card is compromised and cannot be charged.
stolen_cardThe card has been reported stolen to the issuing bank. It cannot be charged.
lost_cardThe card was reported lost to the issuer and has been blocked.
pickup_cardThe card issuer has instructed the merchant to retain the card. The card is blocked.
Automate decline handling
Smart retries for soft declines, immediate customer outreach for hard declines, multi-channel follow-up via email, SMS, WhatsApp, and in-app banners. From $3.50/mo.
Start free trial