← Decline Codes
Hard Decline

Stripe Decline Code · Glossary

currency_not_supported

currency_not_supported fires when the customer's card issuer does not support the currency in which your Stripe charge was denominated — the card is active, the account may be funded, but the bank has blocked the transaction because the currency doesn't match what the card is permitted to process.

Non-recoverable·30–50%·Updated May 2026

What It Means

What currency_not_supported actually means.

currency_not_supported fires when the customer's card issuer does not support the currency in which your Stripe charge was denominated — the card is active, the account may be funded, but the bank has blocked the transaction because the currency doesn't match what the card is permitted to process. This is a hard decline at the transaction level — not a timing issue, not a funds issue — and it will repeat on every retry until either the billing currency changes or the customer switches to a payment method that supports your transaction currency.

Not sure if this code is recoverable for your specific situation? Use the Stripe Failure Lookup →

Why It Happens

The root causes.

  • 1Domestic-only card charged in foreign currencyThe most common cause: a customer's bank has restricted their card to domestic currency transactions only — an Indian RuPay debit card charged in USD, or a Brazilian card charged in EUR, returns currency_not_supported at the issuer level
  • 2Card issuer doesn't support the transaction currencySome card products, particularly in emerging markets, are technically limited to a narrow set of approved currencies — charging in GBP, AUD, or SGD against a card that only supports INR or BRL triggers the block
  • 3Stripe account currency mismatchYour Stripe account is configured to bill in a currency that doesn't match what the customer's card network allows for your merchant country — a configuration-level issue on your end, not the customer's card
  • 4Regional card network currency restrictionCards issued on regional networks (RuPay, UnionPay, Elo, Verve) have programmatic currency restrictions baked into the network protocol — even if the cardholder wants to pay in your billing currency, the network itself blocks the authorization
  • 5Prepaid or virtual card currency lockPrepaid and virtual cards are often issued in a single fixed currency — a USD-denominated virtual card attempting to pay a EUR-billed merchant triggers currency_not_supported at the card product level

What NOT to Do

Common mistakes that make it worse.

Don't retry in the same currency against the same card

currency_not_supported is a structural card-currency incompatibility — no retry interval, timing adjustment, or bank contact resolves it. Retrying an identical charge in the same currency against the same card produces the same failure permanently. Every retry wastes an API call and contributes zero to recovery.

Don't ask the customer to "contact their bank to authorize the charge"

Unlike security_violation or do_not_honor, a bank call cannot override a currency restriction that is baked into the card product or network protocol. Sending customers on a futile bank call erodes trust and delays the actual fix: either a currency change on your billing side or a different payment method on the customer side.

Don't assume it's always the customer's problem

A meaningful percentage of currency_not_supported failures originate from a Stripe account configuration issue — your checkout is billing in a currency that your merchant account or the customer's card network doesn't support for your region. Always audit your Stripe currency settings before building a customer-facing outreach sequence.

Retry Timing

Optimal retry schedule.

Zero retries in the same currency. The recovery path splits into two parallel tracks — a merchant-side fix and a customer-side payment method switch.

Recovery Benchmark

What good looks like.

MetricResult
Overall recovery rate30–50%
Recovery via merchant currency config fix85–95% of the config-issue subset
Recovery via alternate payment method (customer side)30–45% of card-incompatibility cases
Recovery via local payment method offer (UPI, Boleto, etc.)40–55% in relevant markets
Recovery with blind retry in same currency~0%
Prevention via dynamic currency presentationEliminates 60–75% of occurrences for international customers

A 45%+ overall recovery rate is achievable — but only if you separate the merchant-config sub-type from the customer-card sub-type and handle each independently. The single highest-ROI action for this code is enabling dynamic currency billing or local payment methods at checkout — teams that do this reduce currency_not_supported failures by 60–75% structurally, making post-failure recovery largely a secondary concern.

At Scale

How to handle it at scale.

Automated

  • Webhook trigger: invoice.payment_failed → check failure_code === 'currency_not_supported' → immediately run two checks: (1) is this a Stripe account config issue — multiple failures from same region in same window? (2) BIN lookup on the failed card to identify network type and home currency
  • Internal audit gate: Before any customer outreach, check whether the failure is merchant-side (Stripe currency config) or customer-side (card incompatibility) — a cluster of currency_not_supported failures from customers in the same country in a short window almost always means your billing currency is misconfigured for that market
  • Zero retries in original currency: Add currency_not_supported to your no-retry-same-currency list — if a currency fix is made on your end, trigger a fresh charge in the corrected currency rather than a retry
  • Local currency retry (if multi-currency enabled): If your Stripe account supports the customer's local currency, automatically re-attempt the charge in their home currency immediately after the failure — this requires no customer action and recovers the payment silently
  • Email Day 0 — payment method switch for card-incompatibility cases: Subject: "Your card doesn't support our billing currency — here's how to continue" — body explains the card restriction clearly, offers local payment methods prominently (UPI for India, Boleto for Brazil, GrabPay for SEA, PayPal as universal fallback)
  • Dynamic currency presentation (preventive — highest priority): Implement Stripe's multi-currency support or a currency detection layer at checkout — use the customer's card BIN or IP to present charges in their local currency at signup; this eliminates the failure before it ever reaches your billing system

Manual Escalation

  • Regional failure cluster: If you see 5+ currency_not_supported failures from the same country within a billing cycle, treat it as a product issue — assign to engineering to add local currency billing or a local payment method for that market; one infrastructure change recovers the entire cohort permanently
  • High-ACV international accounts: Personal outreach Day 1 — walk them through adding PayPal or a bank transfer account as an alternate method; high-value international customers are worth a 15-minute guided onboarding to a new payment method
  • B2B accounts with regional card restrictions: Offer Stripe Invoices in their local currency as a permanent billing solution — invoice-based billing sidesteps card currency restrictions entirely and is often preferred by international business customers
  • Annual plan customers: currency_not_supported on an annual plan is especially worth manual intervention — a customer willing to pay 12 months upfront is not one you want to lose to a currency config issue; personal outreach with a local currency payment link resolves this in one touchpoint

FAQs

Frequently asked questions.

What does the Stripe currency_not_supported decline code mean?

currency_not_supported means the customer's card issuer has blocked the transaction because the charge currency is not supported by their card. The card may be active and funded, but the bank or card network restricts it from processing transactions in the billing currency. It is a structural decline that will repeat on every retry until either the billing currency changes or the customer uses a different payment method.

What are the most common causes of a currency_not_supported error in Stripe?

Common causes include a domestic-only debit card being charged in a foreign currency, a card issued on a regional network like RuPay or Elo with programmatic currency restrictions, a Stripe account billing in a currency incompatible with the customer's card, a prepaid or virtual card locked to a single currency, or a regional card product that only supports a narrow set of approved currencies.

Can currency_not_supported be caused by a Stripe configuration issue?

Yes. If multiple customers from the same country or region are hitting currency_not_supported within the same billing cycle, your Stripe account may be configured to bill in a currency that is incompatible with the card networks dominant in that market. Always audit your billing currency settings before sending customer-facing outreach — a merchant-side currency fix recovers the entire affected cohort immediately.

Should I retry a payment after a currency_not_supported decline?

Never in the same currency. If your Stripe account supports the customer's local currency, immediately re-attempt the charge in their home currency — this requires no customer action. If you do not support local currency billing, route the customer to an alternate payment method such as PayPal, bank transfer, or a local payment option like UPI for India or Boleto for Brazil.

What is the recovery rate for Stripe currency_not_supported failures?

Overall recovery rates are 30–50%. Merchant-side currency configuration fixes recover 85–95% of the affected cohort immediately. For customer-side card incompatibility cases, alternate payment method offers achieve 30–45% recovery. Local payment method options like UPI or Boleto achieve 40–55% in relevant markets. Blind retries in the same currency produce zero recovery.

Before you retry

Most currency_not_supported failures are retried on the wrong schedule — which recovers the payment about 30% of the time. The other 70% leaves permanently. See what this code is actually costing at your MRR before deciding how to handle it.

See what currency_not_supported costs me →

Stop leaving revenue on the table

currency_not_supported can't be retried — but it can be caught earlier.

Recurflux handles code-specific retry scheduling, adaptive dunning, and dispute intelligence across all 30 Stripe decline codes. Connect in under 5 minutes.