Test Mobile Money Numbers
In Sandbox, use these predefined phone numbers to simulate different Mobile Money payment scenarios with no real charge. No USSD push is sent — confirmation is simulated automatically based on the number used.
Airtel Money — Test numbers
| Number | Simulated behavior | Error code |
|---|---|---|
+24177000001 | ✅ Payment succeeds immediately | — |
+24177000002 | ❌ Insufficient funds | INSUFFICIENT_FUNDS |
+24177000003 | ⏱ Timeout (buyer does not confirm) | MOBILE_MONEY_TIMEOUT |
+24177000004 | ❌ Number not registered | MOBILE_MONEY_NUMBER_INVALID |
+24177000005 | ⏳ Slow processing (30 seconds) | — |
+24177000006 | ⏳ Slow processing (60 seconds) | — |
Moov Money — Test numbers
| Number | Simulated behavior | Error code |
|---|---|---|
+24166000001 | ✅ Payment succeeds immediately | — |
+24166000002 | ❌ Insufficient funds | INSUFFICIENT_FUNDS |
+24166000003 | ❌ Moov Money number not registered | MOBILE_MONEY_NUMBER_INVALID |
+24166000004 | ⏱ Timeout | MOBILE_MONEY_TIMEOUT |
These codes are documented in detail on the Error Codes page.
Webhooks are indeed triggered in Sandbox. A successful payment with +24177000001 will emit a payment_intent.succeeded event to your test endpoint,
exactly as in production.
Example — Successful Airtel Payment
meth_xxxx below is the ID of the Mobile Money PaymentMethod created for the customer during checkout (hosted checkout) — it is the payment page that collects the number and creates this PaymentMethod. In Sandbox, enter one of the test numbers above on that page to trigger the corresponding scenario.
Reset the Sandbox
The reset endpoint deletes all test data associated with your sandbox key — PaymentIntents, transactions, customers, test webhooks, etc. Useful for starting from a clean state before a demo or a testing cycle.
Resetting the Sandbox permanently deletes all test data. This operation is irreversible — no restoration is possible.