Skip to content

Accept mobile money in Kenya

In Kenya, most mobile money payments are M-Pesa. You can integrate Safaricom's Daraja API directly, or take M-Pesa and Airtel Money through Paystack.

Your options

Safaricom Daraja (M-Pesa Express / STK push)

Reaches
M-Pesa
Sign-up
Free sandbox on the Daraja portal; go-live needs your own PayBill or Till number
Best for
The most direct M-Pesa integration, and B2C payouts
Guides
Node.js · Laravel · Django · Callbacks & 1037 · B2C payouts

Paystack (Charge API)

Reaches
M-Pesa and Airtel Money, plus cards
Sign-up
A Paystack business registered in Kenya
Best for
M-Pesa without your own PayBill, plus cards, in one account
Guides
Node.js · Laravel · Django · Payouts

Airtel Money Open API

Reaches
Airtel Money
Sign-up
Application on developers.airtel.africa for Kenya
Best for
Reaching Airtel customers directly
Guides
Node.js (set 254) · Laravel (set 254)

Currency: KES. Fees are set per contract and aren't published, so ask each provider for a quote. Checked November 2026.

Which should you choose?

  • Already have a PayBill or Till? Integrate Daraja directly: it is the most direct route to M-Pesa, and it also gives you B2C payouts.
  • No PayBill yet, or you want cards too? Paystack takes M-Pesa, Airtel Money and cards through one account.
  • Whichever you choose, handle ResultCode 1037 as "not known yet", not "failed".

For a side-by-side look at the payment flow, webhook security and payouts, see MTN MoMo API vs Flutterwave vs Paystack.

Not available here

  • MTN MoMo: MTN does not operate in Kenya.

Which numbers are on which network

Mobile numbers in Kenya start with these prefixes, by wallet. Customers can move numbers between networks, so let them confirm.

WalletNumber starts with
Airtel Money010, 0135, 0136, 0137, 0138, 0139, 073, 075, 076, 078
M-Pesa011, 014, 018, 070, 071, 072, 074, 0757, 0758, 0759, 0768, 0769, 079

From Google libphonenumber's carrier data (2026-10-28). Longest prefix wins. Convert any number with the Phone Number Formatter.

Free tools

Skip the plumbing

The starter kits include M-Pesa STK push (Daraja), Airtel Money and Paystack (M-Pesa and Airtel through one account; set it to KES). The starter kits (Laravel, Django, Next.js) are tested and ready to configure. Or have the integration built for you.

Frequently asked questions

Do I need a PayBill to accept M-Pesa online?

To go live on Daraja, yes: STK push runs against your own PayBill or Till number. Paystack is an alternative: a Paystack business in Kenya can take M-Pesa through Paystack's account.

What does M-Pesa ResultCode 1037 mean?

Safaricom could not reach the customer's phone in time. It is not a confirmed failure: query the payment before telling the customer to pay again.

What phone format does M-Pesa use?

Daraja takes 2547XXXXXXXX or 2541XXXXXXXX: the country code without a plus. Paystack's Kenyan test number is written +254 710 000 000; its Ghana example uses the local format with a leading 0.

Other countries: Uganda · Ghana

Need this built for you?

I integrate MTN MoMo, M-Pesa and Airtel Money into Laravel / PHP, Python / Django, Node.js / Next.js apps: payments, callbacks, payouts and go-live, with tests.