Payment Methods
ZevPay Checkout supports these methods. They work the same across inline, standard, and invoice checkout.
| Method | Identifier | Status |
|---|---|---|
| Bank Transfer | bank_transfer | Available |
| ZevPay ID | payid | Available |
| Crypto | crypto | Available (gradual rollout) |
| PalmPay | palmpay | Customer pays from their PalmPay account, approved on PalmPay's page. Rolling out gradually. |
| Card | card | Coming soon |
How availability is decided
The methods a customer sees on a session come from, in order:
- The
payment_methodsyou pass when you create the session (or set on an invoice). - If you pass nothing, the methods configured on your API key in the dashboard.
- If neither is set, the default of
["bank_transfer", "payid"].
Then platform rules are applied on top. A method you ask for is offered, not guaranteed:
- A method that is disabled platform-wide is removed from the session unless your account has been allow-listed for it. Card is the only method disabled today; bank transfer and ZevPay ID are always on.
- Crypto appears only when your key has crypto enabled and the checkout qualifies (see below) — and it is added automatically only when you pass no
payment_methodsat all. An explicit list is honoured exactly: name"crypto"(or passcrypto_assets) to include it, and a list without either never shows crypto, no matter what the key has enabled. - If nothing survives, the initialize call fails with
400and a message naming the problem, instead of showing the customer an empty picker.
The response tells you exactly what was offered in enabled_payment_methods (and crypto_assets), so you never have to guess.
{
"payment_methods": ["bank_transfer", "payid"]
}In the inline SDK, the same choice is made with the paymentMethods option using the short names bank, payid, card, and crypto. See Inline Checkout. Invoices accept the same payment_methods field when you create or update them. See Invoice Checkout.
Crypto
Crypto is added automatically: when your key has crypto enabled and the checkout qualifies, "crypto" is appended to whatever fiat methods were resolved above. You do not have to list it. You can, however, steer it:
| You pass | Customer sees |
|---|---|
| nothing | Your key's methods, plus crypto when eligible |
["bank_transfer", "payid"] | Those two, plus crypto when eligible (unchanged for existing integrations) |
["bank_transfer", "crypto"] | Bank transfer, plus crypto when eligible |
["crypto"] | Crypto only. If crypto is not eligible on this checkout the call fails with 400 |
crypto_assets: ["USDT:TRON"] | Only that asset, on that network, among the crypto options |
["crypto"] + crypto_assets: ["USDT"] | Crypto only, USDT on every network your key accepts |
crypto_assets narrows; it never widens. An asset you have not enabled on the key cannot be surfaced this way. See Crypto for the eligibility conditions.
To remove crypto from a key entirely, turn it off on the key in the dashboard.
Identifiers
Use these exact values in payment_methods:
bank_transferpayidcardcrypto
For crypto_assets, use ASSET:NETWORK (for example USDT:TRON, USDC:BASE) or the bare ASSET for every network of that asset. The full list of identifiers is on the Crypto page; your key's accepted pairs are shown in the dashboard under the key's crypto settings, and the initialize response echoes the offered ones in crypto_assets with assetCode and network as separate fields.
Minimum amounts
| Method | Minimum |
|---|---|
| Bank Transfer | ₦1 (100 kobo), the session minimum |
| ZevPay ID | ₦1 (100 kobo), the session minimum |
| Card | ₦1,000 (100000 kobo) |
Amount matching
Bank Transfer and ZevPay ID both require the customer to pay the exact session amount, except on invoices that allow partial payments, where a bank transfer may be any amount up to the remaining balance. See each method page for detail.