Skip to content

Currencies Fresh

Stripe supports payments in 135+ currencies. This page covers currency formatting, minimums, and settlement rules.

Amount formatting

All API amounts are in the currency's smallest unit (no decimal point).

Currency typeRuleExample
Two-decimal currenciesMultiply by 100$10.99 → 1099
Zero-decimal currenciesUse the amount as-is¥500 → 500

Always use lowercase three-letter ISO codes: usd, eur, gbp, jpy.

Zero-decimal currencies

For zero-decimal currencies, the amount value equals the charge amount directly (no multiplication needed):

BIF, CLP, DJF, GNF, JPY, KMF, KRW, MGA, PYG, RWF, UGX, VND, VUV, XAF, XOF, XPF

To charge 500 JPY: "amount": 500

Special cases

CurrencyDescription
ISK (Icelandic Króna)Transitioned to zero-decimal, but API requires two-decimal format. To charge 5 ISK: amount=500. Decimal portion must always be 00.
HUF (Hungarian Forint)Two-decimal for charges, zero-decimal for payouts. Manual payouts must be divisible by 100.
TWD (New Taiwan Dollar)Two-decimal for charges, zero-decimal for payouts. Manual payouts must be divisible by 100.

Presentment vs settlement currency

Three currencies are involved in every payment:

  1. Payment method currency — the currency of the customer's card or bank account
  2. Presentment currency — the currency you charge in (what the customer sees)
  3. Settlement currency — the currency deposited into your bank account

If presentment currency differs from customer's card currency → customer's bank may charge them a foreign exchange fee.

If presentment currency differs from your settlement currency → Stripe converts at current exchange rate (conversion fee applies).

Minimum charge amounts by currency

CurrencyMinimum
USD$0.50
AED2.00
AUD$0.50
BRLR$0.50
CAD$0.50
CHF0.50 Fr
COP$0.50
CZK15.00 Kč
DKK2.50 kr
EUR€0.50
GBP£0.30
HKD$4.00
HUF175 Ft
INR₹0.50
JPY¥50
MXN$10.00
MYRRM2.00
NOK3.00 kr
NZD$0.50
PLN2.00 zł
RON2.00 lei
SEK3.00 kr
SGD$0.50
THB฿10.00

Subscription charges support zero-amount charges for free trials and 100% coupons. Any non-zero amount is subject to the minimum.

Multi-currency payouts

You can maintain bank accounts in multiple currencies and receive payouts in each. Configure in Dashboard → Settings → Payouts → Add bank account.

When you have multiple bank accounts:

  • Charges in the same currency as a bank account settle to that account
  • All other charges convert to your default settlement currency

Connect and multi-currency

For Connect platforms, currency conversion happens at the point of charge creation. Connected accounts inherit the platform's settlement currency unless you configure separate payout currencies per connected account.

See the Connect section for transfer_data[currency] and currency_conversion options on transfers.

American Express currency support

American Express cards do not support currencies marked with an asterisk (*) in Stripe's full currency list. When processing Amex payments, validate currency support before creating the charge.

Specifying currency in API requests

bash
# Two-decimal currency: charge $10.99 USD
curl https://api.stripe.com/v1/payment_intents \
  -u "sk_test_YOUR_KEY:" \
  -d amount=1099 \
  -d currency=usd \
  -d "payment_method_types[]=card"

# Zero-decimal currency: charge 500 JPY
curl https://api.stripe.com/v1/payment_intents \
  -u "sk_test_YOUR_KEY:" \
  -d amount=500 \
  -d currency=jpy \
  -d "payment_method_types[]=card"

Currency validation in Node.js

javascript
const ZERO_DECIMAL_CURRENCIES = [
  'bif', 'clp', 'djf', 'gnf', 'jpy', 'kmf', 'krw',
  'mga', 'pyg', 'rwf', 'ugx', 'vnd', 'vuv', 'xaf', 'xof', 'xpf'
];

function formatAmount(amount, currency) {
  if (ZERO_DECIMAL_CURRENCIES.includes(currency.toLowerCase())) {
    return Math.round(amount); // No multiplication needed
  }
  return Math.round(amount * 100); // Convert to smallest unit
}

// Usage
formatAmount(10.99, 'usd') // 1099
formatAmount(500, 'jpy')   // 500

Stripe API Reference - Self-contained docs reference, refreshed 2026-05-18