Money and currencies
Amounts are integers in the currency's minor unit. Learn the exponent of each supported currency.
Every amount in the API (amount, amount_refunded, commission, net…) is an integer in the currency's minor unit, sent together with an ISO 4217 currency code. There are no decimals and no floats anywhere in the API.
{ "amount": 1500, "currency": "KWD" }means 1.500 KWD (one dinar and 500 fils), because the Kuwaiti dinar has three decimal places.
Supported currencies
| Currency | Code | Exponent (decimal places) | Minor unit | Example: amount → value |
|---|---|---|---|---|
| Kuwaiti dinar | KWD | 3 | fils | 1500 → 1.500 KWD |
| Bahraini dinar | BHD | 3 | fils | 2750 → 2.750 BHD |
| Omani rial | OMR | 3 | baisa | 10000 → 10.000 OMR |
| Jordanian dinar | JOD | 3 | fils | 500 → 0.500 JOD |
| Saudi riyal | SAR | 2 | halala | 9999 → 99.99 SAR |
| UAE dirham | AED | 2 | fils | 25000 → 250.00 AED |
| Qatari riyal | QAR | 2 | dirham | 1050 → 10.50 QAR |
| Egyptian pound | EGP | 2 | piastre | 100000 → 1,000.00 EGP |
Watch the three-decimal currencies
100 is 1.00 SAR but only 0.100 KWD. Always convert with the currency's exponent, never with a fixed factor of 100.
Three-decimal amounts ending in 0
On some accounts, including UAE accounts, KWD, BHD, OMR and JOD amounts must end in 0: 1250 is accepted, 1255 returns 422 validation_error with details.fields.amount = "unsupported". Rounding three-decimal prices to the nearest 10 works on every account. See Three-decimal amounts.
Converting
To minor units: minor = round(major × 10^exponent). To display: major = minor / 10^exponent, formatted with exactly exponent decimals.
Avoid floating-point arithmetic for money: parse decimal strings or use a decimal library, and keep integers in your database.
const EXPONENTS = { KWD: 3, BHD: 3, OMR: 3, JOD: 3, SAR: 2, AED: 2, QAR: 2, EGP: 2 };
// "12.5" KWD -> 12500
function toMinor(value, currency) {
const exp = EXPONENTS[currency];
const [whole, frac = ''] = String(value).split('.');
if (frac.length > exp) throw new Error(`Too many decimals for ${currency}`);
return Number(whole) * 10 ** exp + Number(frac.padEnd(exp, '0') || 0);
}
// 12500 KWD -> "KWD 12.500" (pass locale "ar-KW" for Arabic digits)
function format(minor, currency, locale = 'en') {
const exp = EXPONENTS[currency];
return new Intl.NumberFormat(locale, {
style: 'currency',
currency,
minimumFractionDigits: exp,
maximumFractionDigits: exp,
}).format(minor / 10 ** exp);
}Currency and payment methods
The currency you choose affects which payment methods appear at checkout. On accounts that support local methods, KNET is offered for KWD, mada for SAR and Benefit for BHD. Cards, Apple Pay and Google Pay work across currencies on every account. Which methods you get depends on your account: see Payment methods and your account. Your account's enabled currencies are shown in the dashboard settings.