Currencies
ZevPay checkouts are priced in naira by default. You can price in other currencies where we have a way to collect them.
Pricing in another currency
Pass currency when you create the session or invoice:
{
"amount": 150000,
"currency": "KES",
"customer": { "email": "customer@example.com" }
}The response tells you what can actually be used to pay it, in enabled_payment_methods. A currency with no live rail returns a clear error rather than minting a checkout nobody can pay.
Amounts are always in minor units
amount is an integer in the currency's smallest unit. This is the part that most often goes wrong, because the number of decimal places is not the same everywhere:
| Currency | Minor unit | amount: 150000 means |
|---|---|---|
| NGN | kobo (2 dp) | ₦1,500.00 |
| KES | cents (2 dp) | KSh 1,500.00 |
| GHS | pesewas (2 dp) | GH₵ 1,500.00 |
| XOF | none (0 dp) | CFA 150,000 |
| XAF | none (0 dp) | FCFA 150,000 |
| UGX | none (0 dp) | USh 150,000 |
| RWF | none (0 dp) | FRw 150,000 |
The West and Central African CFA francs, the Ugandan shilling and the Rwandan franc have no minor unit at all. For those, amount is the whole number of francs or shillings. Sending 150000 for XOF means 150,000 francs, not 1,500.
Every amount we send you follows the same rule, including webhook payloads and fees, so a single conversion in your code works in both directions.
What you can collect, by currency
| Currency | How customers pay |
|---|---|
| NGN | Bank transfer, ZevPay ID, card, PalmPay |
| KES, GHS, UGX, TZS, RWF, ZMW, MWK, MZN, CDF, SLE, XOF, XAF | Mobile money |
| USD | Crypto, and mobile money in some markets |
Markets open one at a time. A currency in this table is not necessarily live for your account yet; the initialize response is the authority, and support can tell you what is open.
What you get paid in
You are paid in the currency you collected.
- Naira goes to your bank account or ZevPay balance, as it always has.
- Mobile money currencies go to a mobile money number you nominate per currency, under Settlement → Mobile money in your dashboard. See getting paid.
We do not convert your money between currencies without being asked. A shilling collection stays shillings all the way to your payout, so no exchange rate is applied behind your back.
Fees
Fees are configured per currency, not converted from a naira rate. Your statement and your charge.success webhook both report the fee in the currency of the payment.
Checking what is live
The initialize response is always the source of truth:
{
"currency": "KES",
"enabled_payment_methods": ["mobile_money"]
}If a currency is not open for your account, the call fails with a clear message rather than returning a checkout that cannot be paid.