Skip to main content
Sandbox never contacts a real payment provider, so a transaction needs something to tell it how to end. Send money to one of the reserved values below and it resolves that way, every time. These behave like production, not like a mock. The transaction is accepted, sits pending for a few seconds, then settles — firing the same webhook, moving the same balances and writing the same timeline as a real one. A failed payout reverses the wallet debit, because a real failed payout does.

Mobile money

Use as the customer phone number on a deposit, a payout, or an onramp. Any format works — +254700000001, 254700000001 and 0700000001 are the same number.

Bank payouts and card deposits

These aren’t simulated. Bank and card providers run their own sandbox environments, so those transactions dispatch for real outside production and are tested against the provider’s own test credentials and test cards — reserved values here would take that away.

Anything else succeeds

A number that isn’t reserved settles successfully after the usual delay. That keeps casual testing simple — you only need a reserved value when you want a particular outcome.

The cases worth testing

+254700000010 on a mobile money deposit or payout. Confirm you handle the FAILED webhook, surface the reason, and notice that the wallet debit is reversed — the balance returns to what it was.
+254700000020 stays pending forever. This is the one most integrations get wrong: money is committed but no terminal webhook ever arrives. Make sure something on your side eventually reconciles or escalates it rather than waiting indefinitely.
+254700000021 takes about a minute. Useful for checking you aren’t assuming a transaction is final just because the create call returned, and that your polling backs off sensibly.
+254700000002 succeeds but is registered to a different name than +254700000001. Pair it with account validation to test catching a mismatched recipient before you pay.
Deposits credit your wallet on the same reconciliation pass production uses, so the balance moves within about a minute of the deposit settling rather than instantly.
Reserved values mean nothing in production — they are ordinary numbers there. Make sure they don’t survive into your production configuration.