---
title: Mobile Money
description: Accept mobile money across Africa on any ZevPay checkout. Customers pay from their mobile wallet and approve on their handset; confirmation, webhooks and settlement work like every other method.
---

# Mobile Money

Customers pay from their mobile wallet. They enter their number, approve the request on their handset, and your checkout confirms automatically.

::: info Rolling out market by market
Mobile money is opened one market at a time. If you do not see it on your checkouts yet, contact support to ask about your market.
:::

## How it works

1. The customer picks **Mobile Money** and enters their phone number.
2. We work out which network the number is on, so they do not have to tell us.
3. They approve on their handset, usually by entering their PIN at a prompt.
4. Your checkout confirms the moment the payment lands.

Some networks work slightly differently. A few send the prompt automatically, a few require the customer to open their provider's menu first, and one or two approve on the provider's own page. Your checkout handles all three without any change on your side.

## Per surface

- **Standard (hosted) checkout**: the customer enters their number on the checkout page and waits there while they approve.
- **Inline**: the same, inside the modal, so your page never navigates away.
- **Invoice**: the same, in place on the invoice page, which then becomes the receipt.

## What this means for your integration

Nothing changes. The method rides the same session machinery as every other:

- `"mobile_money"` appears in `enabled_payment_methods` on the initialize response when it is available for that checkout's currency.
- You can steer it with `payment_methods` like any other method. An explicit list must include `"mobile_money"` to offer it, and `["mobile_money"]` alone makes the checkout mobile money only. See [choosing payment methods](/payment-methods/overview#how-availability-is-decided).
- A successful payment fires the usual [`charge.success`](/webhooks/events#charge-success) webhook with `channel: "mobile_money"`.
- [Verify](/api/verify-session) works unchanged; the session reports `completed` once the payment confirms.

## Currencies

Mobile money is collected in local currency, not naira. A checkout priced in Kenyan shillings is paid in shillings, and your customer sees their own currency throughout.

See [Currencies](/guide/currencies) for how to price a checkout in a currency other than naira, and what you get paid in.

::: warning Whole amounts on some networks
A few networks accept whole units only. M-Pesa, for example, takes whole shillings, so a charge of `KES 100.50` cannot be collected on it. Price in whole units for those markets. If an amount cannot be collected on the chosen network, the checkout says so before the customer enters anything, rather than failing after they have typed their number.
:::

## Amounts and limits

Each network sets its own minimum and maximum, and those change without notice from us. The checkout reads the current limits live and shows them next to the number field, so a customer is never asked to approve something the network will refuse.

## Getting paid

Mobile money collections settle in the currency they were collected in, to a mobile money number you nominate.

1. In your dashboard, go to **Settlement → Mobile money**.
2. Add the number that should receive settlements for that currency.
3. Payouts follow the same T+1 schedule as the rest of your money.

::: warning A new payout destination waits 24 hours
A number you have just added does not receive settlements for 24 hours. That delay is deliberate: changing where money goes is the most valuable thing an attacker can do with a dashboard, and the wait gives you time to notice a change you did not make. Add your destination before you start collecting, and the first payout is unaffected.
:::

If you collect in a currency with no destination configured, the money is held rather than paid out, and your dashboard says so. Nothing is lost; it goes out on the next payout once a destination exists.

## Reliability

Confirmation is webhook-driven with an automatic reconciliation sweep behind it. If a notification is delayed, the payment still confirms within minutes.

Mobile money has one behaviour worth knowing: when a request times out, the payment may still be going through. We never treat an unanswered request as a failure. The collection stays open and resolves to whatever actually happened, so a customer is not asked to pay twice for a payment that was already approved.
