> For the complete documentation index, see [llms.txt](https://docs.flycode.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.flycode.com/docs/read-more/stripe-decline-codes-reference-meaning-soft-or-hard-and-what-to-do.md).

# Stripe decline codes reference: meaning, soft or hard, and what to do

Every Stripe decline code in one table: meaning, soft or hard, whether to retry, and the recovery action to take, with links to full explainers for each code.

{% hint style="info" %}
**Quick answer:** A Stripe decline code is the processor's translation of the issuing bank's response. Soft codes (`insufficient_funds`, `try_again_later`, `issuer_not_available`, `processing_error`, most `generic_decline` and `do_not_honor`) are temporary and recover with well-timed retries. Hard codes (`expired_card`, `lost_card`, `stolen_card`, `pickup_card`, `invalid_account`, `do_not_try_again`, `revocation_of_authorization`) will not clear by retrying and need updated credentials or a new payment method. Retrying hard codes wastes network attempts and risks fines.
{% endhint %}

*Reference maintained by the FlyCode team. Last reviewed September 2026. For strategy and timing by code family, read the* [*Subscription payment decline codes guide*](/docs/subscription-payment-decline-codes-guide-for-stripe.md)*.*

## How to read this table

* **Type**: Soft = temporary, retry is appropriate. Hard = permanent for this credential, do not retry; obtain updated credentials or a new method. Auth = the customer must complete authentication. N/A = does not occur on stored-credential subscription charges.
* **Retry?**: whether an automated retry on the same payment method is worthwhile.
* **FlyCode action**: what the recovery engine does by default for the code.
* **Reference**: the full explainer for the code on flycode.com.

## Stripe decline codes A to Z

| Stripe code                                                                                                  | Meaning                                                                             | Type           | Retry?                 | FlyCode action                                                                                        | Reference                                                                                                              |
| ------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------- | -------------- | ---------------------- | ----------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| `approve_with_id`                                                                                            | Issuer could not authorize this attempt but may on another.                         | Soft           | Yes                    | Timed retry.                                                                                          | [approve\_with\_id](https://www.flycode.com/stripe/decline-codes/approve-with-id)                                      |
| `authentication_required`                                                                                    | 3D Secure or SCA challenge needed.                                                  | Auth           | No (silent)            | Send authentication link by email or SMS.                                                             | [authentication\_required](https://www.flycode.com/stripe/decline-codes/authentication-required)                       |
| `call_issuer`                                                                                                | Issuer declined without a reason; customer should contact bank.                     | Soft (unknown) | Cautious               | One or two timed retries, then outreach.                                                              | [call\_issuer](https://www.flycode.com/stripe/decline-codes/call-issuer)                                               |
| `card_not_supported`                                                                                         | Card cannot be used for this type of purchase.                                      | Hard           | No                     | Request another payment method; try backup method.                                                    | [card\_not\_supported](https://www.flycode.com/stripe/decline-codes/card-not-supported)                                |
| `card_velocity_exceeded`                                                                                     | Card hit a spending or transaction-count limit.                                     | Soft           | Yes, after 24 to 48 h  | Delayed retry outside the limit window.                                                               | [card\_velocity\_exceeded](https://www.flycode.com/stripe/decline-codes/card-velocity-exceeded)                        |
| `currency_not_supported`                                                                                     | Card does not support the charge currency.                                          | Hard           | No                     | Request another method; consider local currency billing.                                              | [currency\_not\_supported](https://www.flycode.com/stripe/decline-codes/currency-not-supported)                        |
| `do_not_honor`                                                                                               | Generic issuer refusal, no reason given.                                            | Soft (generic) | Yes                    | Classify underlying cause from patterns; retry at predicted best time.                                | [do\_not\_honor](https://www.flycode.com/stripe/decline-codes/decline-code-do-not-honor)                               |
| `do_not_try_again`                                                                                           | Issuer instructs merchant to stop.                                                  | Hard           | Never                  | Backup method, then outreach for a new method.                                                        | [do\_not\_try\_again](https://www.flycode.com/stripe/decline-codes/do-not-try-again)                                   |
| `duplicate_transaction`                                                                                      | Same amount and card submitted very recently.                                       | Soft           | Check first            | Verify whether the earlier attempt succeeded before any retry.                                        | [duplicate\_transaction](https://www.flycode.com/stripe/decline-codes/duplicate-transaction)                           |
| `expired_card`                                                                                               | Card credentials are no longer valid; the issuer has replaced them.                 | Hard           | No                     | Rely on Card Account Updater and network tokens; then backup method; then update request.             | [expired\_card](https://www.flycode.com/stripe/decline-codes/expired-card)                                             |
| `fraudulent`                                                                                                 | Stripe Radar or the issuer suspects fraud.                                          | Hard           | Never                  | No retry; review in Radar if legitimate; outreach with generic wording.                               | [fraudulent](https://www.flycode.com/stripe/decline-codes/fraudulent)                                                  |
| `generic_decline`                                                                                            | Unknown reason, or a Radar rule blocked it.                                         | Soft (generic) | Yes                    | Classify from patterns; retry at predicted best time.                                                 | [generic\_decline](https://www.flycode.com/stripe/decline-codes/generic-decline)                                       |
| `incorrect_cvc`                                                                                              | CVC check failed.                                                                   | Hard           | No                     | Outreach: re-enter card details.                                                                      | [incorrect\_cvc](https://www.flycode.com/stripe/decline-codes/incorrect-cvc)                                           |
| `incorrect_number`                                                                                           | Card number is wrong.                                                               | Hard           | No                     | Outreach: re-enter card.                                                                              | [incorrect\_number](https://www.flycode.com/stripe/decline-codes/incorrect-number)                                     |
| `incorrect_pin`, `invalid_pin`, `offline_pin_required`, `online_or_offline_pin_required`, `pin_try_exceeded` | PIN problems on card-present transactions.                                          | N/A            | N/A                    | Not applicable to subscriptions.                                                                      | [incorrect\_pin](https://www.flycode.com/stripe/decline-codes/incorrect-pin)                                           |
| `incorrect_zip`                                                                                              | Postal code did not match.                                                          | Hard           | No                     | Outreach: update billing address.                                                                     | [incorrect\_zip](https://www.flycode.com/stripe/decline-codes/incorrect-zip)                                           |
| `insufficient_funds`                                                                                         | Not enough balance at this moment. Often 50 to 70 percent of subscription failures. | Soft           | Yes                    | Retry around likely pay cycles at local morning hours; escalate to outreach only after timed retries. | [insufficient\_funds](https://www.flycode.com/stripe/decline-codes/insufficient-funds)                                 |
| `invalid_account`                                                                                            | Card or linked account is invalid or closed.                                        | Hard           | No                     | Backup method, then outreach.                                                                         | [invalid\_account](https://www.flycode.com/stripe/decline-codes/invalid-account)                                       |
| `invalid_amount`                                                                                             | Amount invalid or over the allowed limit.                                           | Soft           | After check            | Verify amount; split or retry after limit resets.                                                     | [invalid\_amount](https://www.flycode.com/stripe/decline-codes/invalid-amount)                                         |
| `invalid_cvc`                                                                                                | CVC value invalid.                                                                  | Hard           | No                     | Outreach: re-enter card.                                                                              | [invalid\_cvc](https://www.flycode.com/stripe/decline-codes/invalid-cvc)                                               |
| `invalid_expiry_month`, `invalid_expiry_year`                                                                | Expiry values invalid.                                                              | Hard           | No                     | Outreach: re-enter card.                                                                              | [invalid\_expiry\_year](https://www.flycode.com/stripe/decline-codes/invalid-expiry-year)                              |
| `invalid_number`                                                                                             | Card number invalid.                                                                | Hard           | No                     | Outreach: re-enter card.                                                                              | [invalid\_number](https://www.flycode.com/stripe/decline-codes/invalid-number)                                         |
| `issuer_not_available`                                                                                       | Issuer systems unreachable.                                                         | Soft           | Yes, within hours      | Short-delay retry; usually succeeds on the next attempt.                                              | [issuer\_not\_available](https://www.flycode.com/stripe/decline-codes/issuer-not-available)                            |
| `lost_card`                                                                                                  | Card reported lost.                                                                 | Hard           | Never                  | Network tokens may update; else backup method, then outreach with generic wording.                    | [lost\_card](https://www.flycode.com/stripe/decline-codes/lost-card)                                                   |
| `merchant_blacklist`                                                                                         | Card matches a block list on your Radar settings.                                   | Hard           | Never                  | Review your Radar lists; generic outreach.                                                            | [merchant\_blacklist](https://www.flycode.com/stripe/decline-codes/merchant-blacklist)                                 |
| `new_account_information_available`                                                                          | Credentials have changed; new details exist at the issuer.                          | Hard           | No                     | Card Account Updater or network token refresh, then retry with updated credentials.                   | [new\_account\_information\_available](https://www.flycode.com/stripe/decline-codes/new-account-information-available) |
| `no_action_taken`                                                                                            | Issuer declined without detail.                                                     | Soft (unknown) | Cautious               | Limited timed retries, then outreach.                                                                 | [no\_action\_taken](https://www.flycode.com/stripe/decline-codes/no-action-taken)                                      |
| `not_permitted`                                                                                              | Payment not permitted for this card.                                                | Hard           | No                     | Backup method, then outreach.                                                                         | [not\_permitted](https://www.flycode.com/stripe/decline-codes/not-permitted)                                           |
| `pickup_card`                                                                                                | Issuer wants the card retained (lost, stolen or fraud).                             | Hard           | Never                  | No retry; backup method; generic outreach.                                                            | [pickup\_card](https://www.flycode.com/stripe/decline-codes/pickup-card)                                               |
| `processing_error`                                                                                           | Error while processing.                                                             | Soft           | Yes, within 24 to 48 h | Timed retry; investigate if it repeats.                                                               | [processing\_error](https://www.flycode.com/stripe/decline-codes/processing-error)                                     |
| `reenter_transaction`                                                                                        | Issuer rejected; resubmitting may work.                                             | Soft           | Yes                    | Timed retry.                                                                                          | [reenter\_transaction](https://www.flycode.com/stripe/decline-codes/reenter-transaction)                               |
| `restricted_card`                                                                                            | Card restricted (often lost or stolen).                                             | Hard           | No                     | Backup method; generic outreach.                                                                      | [restricted\_card](https://www.flycode.com/stripe/decline-codes/restricted-card)                                       |
| `revocation_of_all_authorizations`, `revocation_of_authorization`                                            | Cardholder revoked authorization for recurring charges.                             | Hard           | Never                  | Stop charging; outreach to confirm intent and collect a new method if wanted.                         | [revocation\_of\_authorization](https://www.flycode.com/stripe/decline-codes/revocation-of-authorization)              |
| `security_violation`                                                                                         | Security rule at the issuer.                                                        | Hard           | No                     | Backup method; outreach.                                                                              | [security\_violation](https://www.flycode.com/stripe/decline-codes/security-violation)                                 |
| `service_not_allowed`                                                                                        | Service not allowed for this card.                                                  | Hard           | No                     | Backup method; outreach.                                                                              | [service\_not\_allowed](https://www.flycode.com/stripe/decline-codes/service-not-allowed)                              |
| `stolen_card`                                                                                                | Card reported stolen.                                                               | Hard           | Never                  | No retry; backup method; generic outreach.                                                            | [stolen\_card](https://www.flycode.com/stripe/decline-codes/stolen-card)                                               |
| `stop_payment_order`                                                                                         | Cardholder placed a stop order.                                                     | Hard           | Never                  | Stop charging; outreach to confirm intent.                                                            | [stop\_payment\_order](https://www.flycode.com/stripe/decline-codes/stop-payment-order)                                |
| `testmode_decline`                                                                                           | Test card used in live mode.                                                        | N/A            | No                     | Not applicable.                                                                                       | [testmode\_decline](https://www.flycode.com/stripe/decline-codes/testmode-decline)                                     |
| `transaction_not_allowed`                                                                                    | Card cannot make this kind of transaction.                                          | Hard           | No                     | Backup method; outreach.                                                                              | [transaction\_not\_allowed](https://www.flycode.com/stripe/decline-codes/transaction-not-allowed)                      |
| `try_again_later`                                                                                            | Temporary issuer condition.                                                         | Soft           | Yes, within hours      | Short-delay retry.                                                                                    | [try\_again\_later](https://www.flycode.com/stripe/decline-codes/try-again-later)                                      |
| `withdrawal_count_limit_exceeded`                                                                            | Card hit its transaction-count limit.                                               | Soft           | Yes, after 24 h        | Delayed retry.                                                                                        | [withdrawal\_count\_limit\_exceeded](https://www.flycode.com/stripe/decline-codes/withdrawal-count-limit-exceeded)     |

## Network response codes you will see alongside Stripe codes

Stripe also exposes the card network's response code on the charge outcome. The ones that matter most for subscriptions:

| Network code | Name                                         | Usual Stripe code                                   | Type           |
| ------------ | -------------------------------------------- | --------------------------------------------------- | -------------- |
| 05           | Do not honor                                 | `do_not_honor`, `generic_decline`                   | Soft (generic) |
| 14           | Invalid card number                          | `invalid_number`, `incorrect_number`                | Hard           |
| 41           | Lost card                                    | `lost_card`                                         | Hard           |
| 43           | Stolen card                                  | `stolen_card`                                       | Hard           |
| 51           | Insufficient funds                           | `insufficient_funds`                                | Soft           |
| 54           | Card credentials no longer valid             | `expired_card`                                      | Hard           |
| 57           | Transaction not permitted to cardholder      | `transaction_not_allowed`                           | Hard           |
| 59           | Suspected fraud                              | `fraudulent`                                        | Hard           |
| 61           | Exceeds withdrawal amount limit              | `card_velocity_exceeded`                            | Soft           |
| 65           | Exceeds withdrawal frequency                 | `withdrawal_count_limit_exceeded`                   | Soft           |
| 91           | Issuer or switch inoperative                 | `issuer_not_available`                              | Soft           |
| 96           | System malfunction                           | `processing_error`                                  | Soft           |
| R0, R1, R3   | Stop payment, revocation of authorization(s) | `stop_payment_order`, `revocation_of_authorization` | Hard           |

Mastercard additionally returns Merchant Advice Codes (01 updated information needed, 02 try again later, 03 do not try again, 21 recurring payment cancelled) that override the retry decision. See [card network retry rules](/docs/read-more/card-network-retry-rules-for-failed-payments-visa-and-mastercard.md).

## FAQ

### Which Stripe decline codes should never be retried?

`do_not_try_again`, `fraudulent`, `lost_card`, `stolen_card`, `pickup_card`, `stop_payment_order`, `revocation_of_authorization` and `revocation_of_all_authorizations`, plus anything carrying Mastercard advice code 03 or 21. Retrying them can trigger network fines and harms your authorization rate.

### Is `generic_decline` soft or hard?

Usually soft: it is a catch-all that most often hides insufficient funds, a temporary hold or a risk threshold. Pattern analysis (time of day, day of month, BIN, history) tells the two apart; FlyCode's classifiers do this per merchant.

### Where do I see the network code in Stripe?

On the charge or payment intent, under `outcome.network_decline_code` (API) or the payment details view in the dashboard.

## Related

* [Subscription payment decline codes guide for Stripe](/docs/subscription-payment-decline-codes-guide-for-stripe.md) (strategy and timing by code family)
* [Decline Codes Explained](https://help.flycode.com/decline-codes-explained) in the Help Center
* [Full Stripe and Adyen decline code library](https://www.flycode.com/stripe/decline-codes) on flycode.com
* [Failed payment recovery glossary](/docs/read-more/failed-payment-recovery-glossary.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.flycode.com/docs/read-more/stripe-decline-codes-reference-meaning-soft-or-hard-and-what-to-do.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
