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 type | Rule | Example |
|---|---|---|
| Two-decimal currencies | Multiply by 100 | $10.99 → 1099 |
| Zero-decimal currencies | Use 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
| Currency | Description |
|---|---|
| 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:
- Payment method currency — the currency of the customer's card or bank account
- Presentment currency — the currency you charge in (what the customer sees)
- 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
| Currency | Minimum |
|---|---|
| USD | $0.50 |
| AED | 2.00 |
| AUD | $0.50 |
| BRL | R$0.50 |
| CAD | $0.50 |
| CHF | 0.50 Fr |
| COP | $0.50 |
| CZK | 15.00 Kč |
| DKK | 2.50 kr |
| EUR | €0.50 |
| GBP | £0.30 |
| HKD | $4.00 |
| HUF | 175 Ft |
| INR | ₹0.50 |
| JPY | ¥50 |
| MXN | $10.00 |
| MYR | RM2.00 |
| NOK | 3.00 kr |
| NZD | $0.50 |
| PLN | 2.00 zł |
| RON | 2.00 lei |
| SEK | 3.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