Short answer
Don’t retry the same card. Show a message that asks the customer to use another card or payment method, or to contact their bank, and keep checkout open for a second try. For a renewal, ask the customer to update the saved card. If many customers hit it, look for a pattern in the declined payments in the Dashboard.
Rather not fix it yourself? Stripe Billing Fix and Setup handles it at a fixed price, agreed before work starts.
What the code means, and what to do
01
The issuer won’t allow this kind of purchase
“The card doesn’t support this type of purchase.” Stripe, Decline codes (card_not_supported)
Declines like this come from the bank that issued the card, not from your code. The decline code doesn’t say which limit applied; the customer’s bank can tell them.
02
Tell the customer what to do next
“The customer needs to contact their card issuer to make sure their card can be used to make this type of purchase.” Stripe, Decline codes (card_not_supported)
A generic "payment failed" leaves people stuck. Check the decline code and show a message that names the fix: another card, another payment method you accept, or a call to their bank.
const { error } = await stripe.confirmPayment({ elements, confirmParams: { return_url: 'https://example.com/done' }, redirect: 'if_required' }); if (error?.decline_code === 'card_not_supported') { showMessage('This card can’t be used for this purchase. Try another card or contact your bank.'); }03
A renewal or a saved card
When a subscription renewal fails with this code, retrying the same saved card is unlikely to help until the customer has talked to their bank. Email them a link to update the payment method, for example through the customer portal, before the next retry.
04
currency_not_supported is a different code
“The card doesn’t support the specified currency.” Stripe, Decline codes (currency_not_supported)
If the code is currency_not_supported instead, the card can’t pay in the currency you charged. Charging in a currency the card supports, or another card, fixes that one.
Checked against the vendor’s docs on : Stripe docs: Decline codes.
Rather hand it over?
Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.
- $950Stripe Billing Fix and SetupSubscriptions, webhooks, customer portal and failed payments set up or fixed, tested in Stripe test mode.See scope and start
- from $450App Fix TicketOne reproducible bug in an existing mobile or web app, diagnosed and fixed.See scope and start
- from $450AI-Built App RescueA Lovable, Bolt or Cursor app checked end to end in 3 days, then its worst problems fixed at a fixed price.No issues worth fixing, no charge. If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.See scope and start
“Working with Simon makes everything run so smoothly and better than I could ask for it. Amazingly communicative, extremely knowledgeable of coding and the backend processes. I strongly recommend.”
Related: Stripe card declined (generic_decline) · Stripe insufficient funds · Stripe subscription incomplete · Stripe currency_not_supported