Stripe Decline Codes
We use payment optimzation engines to recover more revenue. Card payments can fail for a variety of reasons. Some of the most common are:
Download our app
Decline Code
Description
Next steps
Status
Frequently Asked Questions
Frequently Asked Questions
What are decline codes in the context of failed payments?
Decline codes are short strings returned by the card-issuing bank (and surfaced by Stripe and other payment processors) that explain why a transaction was refused—for example insufficient_funds or do_not_honor. They guide merchants on whether to retry, request a new card, or tell the customer to contact their bank.
What are decline codes in the context of failed payments?
Decline codes are short strings returned by the card-issuing bank (and surfaced by Stripe and other payment processors) that explain why a transaction was refused—for example insufficient_funds or do_not_honor. They guide merchants on whether to retry, request a new card, or tell the customer to contact their bank.
What are decline codes in the context of failed payments?
Decline codes are short strings returned by the card-issuing bank (and surfaced by Stripe and other payment processors) that explain why a transaction was refused—for example insufficient_funds or do_not_honor. They guide merchants on whether to retry, request a new card, or tell the customer to contact their bank.
What are decline codes in the context of failed payments?
Decline codes are short strings returned by the card-issuing bank (and surfaced by Stripe and other payment processors) that explain why a transaction was refused—for example insufficient_funds or do_not_honor. They guide merchants on whether to retry, request a new card, or tell the customer to contact their bank.
Why do decline codes matter for my subscription business?
Knowing whether a decline is soft or hard lets you automate the right next step—smart retries for soft declines or prompting for new details for hard declines—so you save revenue and reduce involuntary churn.
Why do decline codes matter for my subscription business?
Knowing whether a decline is soft or hard lets you automate the right next step—smart retries for soft declines or prompting for new details for hard declines—so you save revenue and reduce involuntary churn.
Why do decline codes matter for my subscription business?
Knowing whether a decline is soft or hard lets you automate the right next step—smart retries for soft declines or prompting for new details for hard declines—so you save revenue and reduce involuntary churn.
Why do decline codes matter for my subscription business?
Knowing whether a decline is soft or hard lets you automate the right next step—smart retries for soft declines or prompting for new details for hard declines—so you save revenue and reduce involuntary churn.
Where can I see decline codes in Stripe and FlyCode?
Every failed PaymentIntent and Invoice shows a decline_code inside the last payment error. The same code comes through webhooks, so tools like FlyCode can act on it in real time.
Where can I see decline codes in Stripe and FlyCode?
Every failed PaymentIntent and Invoice shows a decline_code inside the last payment error. The same code comes through webhooks, so tools like FlyCode can act on it in real time.
Where can I see decline codes in Stripe and FlyCode?
Every failed PaymentIntent and Invoice shows a decline_code inside the last payment error. The same code comes through webhooks, so tools like FlyCode can act on it in real time.
Where can I see decline codes in Stripe and FlyCode?
Every failed PaymentIntent and Invoice shows a decline_code inside the last payment error. The same code comes through webhooks, so tools like FlyCode can act on it in real time.
Are decline codes the same across all payment processors?
No. Some processors pass through the same issuer responses, but each may add gateway-specific aliases. Stripe maps any aliases back to a canonical list, which FlyCode also uses.
Are decline codes the same across all payment processors?
No. Some processors pass through the same issuer responses, but each may add gateway-specific aliases. Stripe maps any aliases back to a canonical list, which FlyCode also uses.
Are decline codes the same across all payment processors?
No. Some processors pass through the same issuer responses, but each may add gateway-specific aliases. Stripe maps any aliases back to a canonical list, which FlyCode also uses.
Are decline codes the same across all payment processors?
No. Some processors pass through the same issuer responses, but each may add gateway-specific aliases. Stripe maps any aliases back to a canonical list, which FlyCode also uses.
What does the insufficient_funds decline code mean?
The cardholder didn’t have enough balance at the moment of the charge; Stripe classes it as a soft decline.
What does the insufficient_funds decline code mean?
The cardholder didn’t have enough balance at the moment of the charge; Stripe classes it as a soft decline.
What does the insufficient_funds decline code mean?
The cardholder didn’t have enough balance at the moment of the charge; Stripe classes it as a soft decline.
What does the insufficient_funds decline code mean?
The cardholder didn’t have enough balance at the moment of the charge; Stripe classes it as a soft decline.
How should I handle an insufficient_funds decline?
Retry when the customer is likely to have funds. FlyCode’s AI schedules the optimal moment instead of using a fixed retries.
How should I handle an insufficient_funds decline?
Retry when the customer is likely to have funds. FlyCode’s AI schedules the optimal moment instead of using a fixed retries.
How should I handle an insufficient_funds decline?
Retry when the customer is likely to have funds. FlyCode’s AI schedules the optimal moment instead of using a fixed retries.
How should I handle an insufficient_funds decline?
Retry when the customer is likely to have funds. FlyCode’s AI schedules the optimal moment instead of using a fixed retries.
Why is insufficient_funds the most common decline code?
Yes. FlyCode’s Subscription Anomaly Agent monitors invoices, proration events, refunds and “uncollectible” states to stop revenue leakage that occurs when Stripe still shows a subscription as active. Read more here
Why is insufficient_funds the most common decline code?
Yes. FlyCode’s Subscription Anomaly Agent monitors invoices, proration events, refunds and “uncollectible” states to stop revenue leakage that occurs when Stripe still shows a subscription as active. Read more here
Why is insufficient_funds the most common decline code?
Yes. FlyCode’s Subscription Anomaly Agent monitors invoices, proration events, refunds and “uncollectible” states to stop revenue leakage that occurs when Stripe still shows a subscription as active. Read more here
Why is insufficient_funds the most common decline code?
Yes. FlyCode’s Subscription Anomaly Agent monitors invoices, proration events, refunds and “uncollectible” states to stop revenue leakage that occurs when Stripe still shows a subscription as active. Read more here
How much better does FlyCode recover insufficient_funds declines?
Across USD 1 billion in volume (March 2024 – June 2025), FlyCode lifted recovery on these declines by 17.6 %–26.2 % over Stripe and Profitwell baselines.
How much better does FlyCode recover insufficient_funds declines?
Across USD 1 billion in volume (March 2024 – June 2025), FlyCode lifted recovery on these declines by 17.6 %–26.2 % over Stripe and Profitwell baselines.
How much better does FlyCode recover insufficient_funds declines?
Across USD 1 billion in volume (March 2024 – June 2025), FlyCode lifted recovery on these declines by 17.6 %–26.2 % over Stripe and Profitwell baselines.
How much better does FlyCode recover insufficient_funds declines?
Across USD 1 billion in volume (March 2024 – June 2025), FlyCode lifted recovery on these declines by 17.6 %–26.2 % over Stripe and Profitwell baselines.
What dataset backs those recovery numbers?
The figures come from a June 2025 banking and issuers data cohort study covering 14 months of live data from more than 500 SaaS and eCommerce merchants.
What dataset backs those recovery numbers?
The figures come from a June 2025 banking and issuers data cohort study covering 14 months of live data from more than 500 SaaS and eCommerce merchants.
What dataset backs those recovery numbers?
The figures come from a June 2025 banking and issuers data cohort study covering 14 months of live data from more than 500 SaaS and eCommerce merchants.
What dataset backs those recovery numbers?
The figures come from a June 2025 banking and issuers data cohort study covering 14 months of live data from more than 500 SaaS and eCommerce merchants.
What is a generic_decline?
It’s a catch-all when the issuer gives no detail or Stripe Radar blocks the payment. Treat it as a soft decline: retry once, then suggest the customer contact their bank.
What is a generic_decline?
It’s a catch-all when the issuer gives no detail or Stripe Radar blocks the payment. Treat it as a soft decline: retry once, then suggest the customer contact their bank.
What is a generic_decline?
It’s a catch-all when the issuer gives no detail or Stripe Radar blocks the payment. Treat it as a soft decline: retry once, then suggest the customer contact their bank.
What is a generic_decline?
It’s a catch-all when the issuer gives no detail or Stripe Radar blocks the payment. Treat it as a soft decline: retry once, then suggest the customer contact their bank.
What does the transaction_not_allowed code indicate?
The issuer blocked the charge for policy reasons—often a restricted merchant category or cross-border rule. Ask the customer to request approval from their bank, then retry.
What does the transaction_not_allowed code indicate?
The issuer blocked the charge for policy reasons—often a restricted merchant category or cross-border rule. Ask the customer to request approval from their bank, then retry.
What does the transaction_not_allowed code indicate?
The issuer blocked the charge for policy reasons—often a restricted merchant category or cross-border rule. Ask the customer to request approval from their bank, then retry.
What does the transaction_not_allowed code indicate?
The issuer blocked the charge for policy reasons—often a restricted merchant category or cross-border rule. Ask the customer to request approval from their bank, then retry.
Why would Stripe return invalid_account?
The card or linked bank account has been closed or entered incorrectly. Stop automatic retries and collect a new payment method or use FlyCode recovery.
Why would Stripe return invalid_account?
The card or linked bank account has been closed or entered incorrectly. Stop automatic retries and collect a new payment method or use FlyCode recovery.
Why would Stripe return invalid_account?
The card or linked bank account has been closed or entered incorrectly. Stop automatic retries and collect a new payment method or use FlyCode recovery.
Why would Stripe return invalid_account?
The card or linked bank account has been closed or entered incorrectly. Stop automatic retries and collect a new payment method or use FlyCode recovery.
What does do_not_honor mean and should I retry?
It’s a blanket refusal, sometimes fraud-related. Use AI recovery to find the best time to retry; if it fails again, request a different card.
What does do_not_honor mean and should I retry?
It’s a blanket refusal, sometimes fraud-related. Use AI recovery to find the best time to retry; if it fails again, request a different card.
What does do_not_honor mean and should I retry?
It’s a blanket refusal, sometimes fraud-related. Use AI recovery to find the best time to retry; if it fails again, request a different card.
What does do_not_honor mean and should I retry?
It’s a blanket refusal, sometimes fraud-related. Use AI recovery to find the best time to retry; if it fails again, request a different card.
What’s the difference between a soft and a hard decline?
Soft declines (e.g., insufficient_funds, generic_decline) can succeed on a later retry; hard declines (e.g., lost_card, invalid_cvc) require new card details.
What’s the difference between a soft and a hard decline?
Soft declines (e.g., insufficient_funds, generic_decline) can succeed on a later retry; hard declines (e.g., lost_card, invalid_cvc) require new card details.
What’s the difference between a soft and a hard decline?
Soft declines (e.g., insufficient_funds, generic_decline) can succeed on a later retry; hard declines (e.g., lost_card, invalid_cvc) require new card details.
What’s the difference between a soft and a hard decline?
Soft declines (e.g., insufficient_funds, generic_decline) can succeed on a later retry; hard declines (e.g., lost_card, invalid_cvc) require new card details.
Can I simulate decline codes in Stripe Test Mode?
Yes. Stripe provides test card numbers that trigger specific codes (e.g., 4000 0000 0000 9995 for insufficient_funds, 4000 0000 0000 0002 for generic_decline).
Can I simulate decline codes in Stripe Test Mode?
Yes. Stripe provides test card numbers that trigger specific codes (e.g., 4000 0000 0000 9995 for insufficient_funds, 4000 0000 0000 0002 for generic_decline).
Can I simulate decline codes in Stripe Test Mode?
Yes. Stripe provides test card numbers that trigger specific codes (e.g., 4000 0000 0000 9995 for insufficient_funds, 4000 0000 0000 0002 for generic_decline).
Can I simulate decline codes in Stripe Test Mode?
Yes. Stripe provides test card numbers that trigger specific codes (e.g., 4000 0000 0000 9995 for insufficient_funds, 4000 0000 0000 0002 for generic_decline).
How does FlyCode use decline codes to improve recovery?
FlyCode ingests each decline via banks, Visa and Stripe webhooks, auto-classifies soft vs. hard, applies issuer-specific retry cadences, and coordinates emails—raising revenue without extra engineering.
How does FlyCode use decline codes to improve recovery?
FlyCode ingests each decline via banks, Visa and Stripe webhooks, auto-classifies soft vs. hard, applies issuer-specific retry cadences, and coordinates emails—raising revenue without extra engineering.
How does FlyCode use decline codes to improve recovery?
FlyCode ingests each decline via banks, Visa and Stripe webhooks, auto-classifies soft vs. hard, applies issuer-specific retry cadences, and coordinates emails—raising revenue without extra engineering.
How does FlyCode use decline codes to improve recovery?
FlyCode ingests each decline via banks, Visa and Stripe webhooks, auto-classifies soft vs. hard, applies issuer-specific retry cadences, and coordinates emails—raising revenue without extra engineering.
Does FlyCode interfere with my existing Stripe webhooks or apps?
No. It listens passively, then calls Stripe APIs for retries or invoice updates; it never overwrites other webhook endpoints.
Does FlyCode interfere with my existing Stripe webhooks or apps?
No. It listens passively, then calls Stripe APIs for retries or invoice updates; it never overwrites other webhook endpoints.
Does FlyCode interfere with my existing Stripe webhooks or apps?
No. It listens passively, then calls Stripe APIs for retries or invoice updates; it never overwrites other webhook endpoints.
Does FlyCode interfere with my existing Stripe webhooks or apps?
No. It listens passively, then calls Stripe APIs for retries or invoice updates; it never overwrites other webhook endpoints.
Are decline-code patterns useful for fraud detection?
Yes—clusters of hard declines like stolen_card or pickup_card can trigger extra verification, while rapid repeats of soft declines can indicate card-testing bots. FlyCode surfaces these anomalies in its dashboard.
Are decline-code patterns useful for fraud detection?
Yes—clusters of hard declines like stolen_card or pickup_card can trigger extra verification, while rapid repeats of soft declines can indicate card-testing bots. FlyCode surfaces these anomalies in its dashboard.
Are decline-code patterns useful for fraud detection?
Yes—clusters of hard declines like stolen_card or pickup_card can trigger extra verification, while rapid repeats of soft declines can indicate card-testing bots. FlyCode surfaces these anomalies in its dashboard.
Are decline-code patterns useful for fraud detection?
Yes—clusters of hard declines like stolen_card or pickup_card can trigger extra verification, while rapid repeats of soft declines can indicate card-testing bots. FlyCode surfaces these anomalies in its dashboard.
Where can I find the full, up-to-date list of Stripe decline codes?
FlyCode hosts an annotated reference—complete with soft/hard labels and suggested actions—at flycode.com/stripe/decline-codes; each Stripe error object also links to Stripe’s official docs.
Where can I find the full, up-to-date list of Stripe decline codes?
FlyCode hosts an annotated reference—complete with soft/hard labels and suggested actions—at flycode.com/stripe/decline-codes; each Stripe error object also links to Stripe’s official docs.
Where can I find the full, up-to-date list of Stripe decline codes?
FlyCode hosts an annotated reference—complete with soft/hard labels and suggested actions—at flycode.com/stripe/decline-codes; each Stripe error object also links to Stripe’s official docs.
Where can I find the full, up-to-date list of Stripe decline codes?
FlyCode hosts an annotated reference—complete with soft/hard labels and suggested actions—at flycode.com/stripe/decline-codes; each Stripe error object also links to Stripe’s official docs.
Giving Back
Partnering with organizations that promote women in technology and families in need is something we are proud to do.


2025 FlyCode © All Right Reserved.
Giving Back
Partnering with organizations that promote women in technology and families in need is something we are proud to do.


2025 FlyCode © All Right Reserved.
Giving Back
Partnering with organizations that promote women in technology and families in need is something we are proud to do.


2025 FlyCode © All Right Reserved.