Short answer
Tell the customer the card can’t pay in this currency and ask for another card or payment method. A bad currency code gives an API error, not this decline. If many customers in one country hit it, offer their local currency, if your account supports it, or another payment method.
Rather not fix it yourself? Stripe Billing Fix and Setup handles it at a fixed price, agreed before work starts.
Why the card refuses the currency, and the fix
01
The card issuer doesn’t allow the currency
“The customer needs to check with the issuer whether the card can be used for the type of currency specified.” Stripe, Decline codes (currency_not_supported)
Some cards, often local debit cards, only pay in their home currency. Stripe can’t change this, so ask the customer to use another card or a different payment method.
02
American Express can’t take that currency
“American Express doesn’t support currencies marked with an asterisk (*) in any Stripe account country.” Stripe, Supported currencies
American Express doesn’t support some currencies in any Stripe country. If Amex customers fail in one currency, check the asterisk list on Stripe’s currency page and offer another currency or method. Currencies without an asterisk can still fail for Amex in some countries.
03
The app sends the wrong currency
“Make sure to use all lowercase letters when entering the three-letter ISO code in any payment request.” Stripe, Supported currencies
A currency picked from the browser locale, or a typo in a config file, can charge a currency you didn’t plan for. Send the three-letter ISO code in lowercase, from one list your app controls.
const PRICES = { usd: 1999, eur: 1899, gbp: 1599 }; // server-side, minor units if (!(requested in PRICES)) throw new Error('Unsupported currency'); await stripe.paymentIntents.create({ amount: PRICES[requested], currency: requested });04
The message hides the next step
A generic “card declined” leaves the customer guessing. For this code it is fine to say the card can’t pay in this currency and suggest another card.
Checked against the vendor’s docs on : Stripe docs: Decline codes; Stripe docs: Supported currencies.
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_not_supported · Stripe amount_too_small · Stripe generic_decline · Stripe Checkout Session expired