---
title: Crypto
description: Accept stablecoin payments (USDT, USDC) on any ZevPay checkout, settled to you in Naira or in the same asset.
---

# Crypto

Customers can pay with stablecoins on any of our checkouts. Each supported asset is offered on a specific network (for example USDT on Tron, USDC on Base), the customer sends the exact quoted amount to a deposit address we generate, and the payment confirms once it lands on-chain. It works the same across [inline](/checkout/inline), [standard](/checkout/standard), and [invoice](/checkout/invoice) checkout.

::: info Rolling out gradually
Crypto is being enabled account by account. If you do not see the Pay with Crypto option on your API keys in the dashboard, contact support to request access.
:::

## Enabling crypto

Crypto is configured per API key, in the dashboard under the key's payment methods:

1. Toggle **Crypto (USDC / USDT)** on for the key.
2. Choose how you want to be settled:
   - **Settle in Naira**: we convert the crypto and pay you through your existing settlement (bank or ZevPay balance). No wallet needed.
   - **Settle in crypto**: we pay out the same asset to your verified crypto wallet. You need a verified wallet for each asset you accept; add them under Settlement, then Crypto wallets. New and changed wallets pass a short security review before payouts flow to them.

Both modes settle on our standard T+1 schedule, like every other method.

## How it appears to customers

When crypto is available on a session, each asset shows as its own option in the method list with its logo and an explicit network label, for example "USDT · Tron (TRC20)". After picking an asset the customer sees:

- The exact amount of the asset to send, locked to a quote.
- A deposit address with a QR code, plus a memo when the network requires one.
- A clear warning that funds must be sent as that asset on that network only.

The page then waits for the on-chain confirmation and completes automatically. If the quote window lapses before payment, the session expires the same way other methods do.

## When crypto is offered

An asset appears on a checkout only when all of these hold:

- The API key has crypto enabled with a settlement mode set.
- Your account has crypto access.
- The checkout's value meets the minimum for that asset. Each asset has a platform minimum in its own units; a checkout worth less than the minimum (at the live rate) will not offer that asset.
- For settle-in-crypto keys: you have a verified, payout-eligible wallet for the asset.

The decision is made when the session is created, and the offered assets are fixed for that session's lifetime.

## Integration

No extra integration is needed beyond what you already have. Crypto rides the same session and webhook machinery:

- The initialize response includes `"crypto"` in `enabled_payment_methods` and lists the offered assets in `crypto_assets`, each as `{ assetCode, network, displayName, decimals }`.
- A successful payment fires the same [`charge.success`](/webhooks/events#charge-success) webhook with `channel: "crypto"` and a `crypto` object carrying the asset, network, and asset amount. The `amount` field stays the NGN presentment value in kobo.
- [Verify](/api/verify-session) works unchanged; the session reports `completed` once the deposit confirms.
- Invoices record crypto payments like any other method, so `invoice.paid` and `invoice.payment_received` fire as usual.

Amounts you price stay in your presentment currency; we handle the conversion quote for the customer.

## Fees

Crypto payments use the same pricing configured for your account as our other methods, including the fee cap. With crypto settlement the fee is taken in the asset itself, and the naira cap is converted at that payment's own exchange rate, so a large payment never pays more than the cap's worth regardless of settlement mode.

## Reliability

Payment confirmation is webhook-driven with an automatic reconciliation sweep behind it, so a confirmed on-chain deposit completes the checkout even if a webhook delivery is delayed. If a customer reports paying without the page confirming, the payment resolves automatically once the deposit confirms; the transaction also appears in your dashboard like any other.

## Related

- [Payment Methods overview](/payment-methods/overview)
- [Webhook events](/webhooks/events)
- [Standard Checkout](/checkout/standard) · [Inline Checkout](/checkout/inline) · [Invoice Checkout](/checkout/invoice)
