M-Pesa merchant setup for POS in Kenya (Daraja API, Lipa Na M-Pesa, STK Push)
Last reviewed 2026-05-27 · by the RetailPOS team
M-Pesa is the world's most successful mobile-money rail — over 50+ million active Kenyan users, processing trillions of KES annually, with 95%+ digital retail share in many segments. For a Kenyan retailer, M-Pesa is not a tender option — it's the default tender. Customers expect to pay via M-Pesa; cashiers expect to default to M-Pesa; the POS workflow assumes M-Pesa unless explicitly overridden. Card and cash are the exceptions, not the rule.
This guide walks through the practical setup: understanding M-Pesa architecture (Lipa Na M-Pesa Till Number vs Paybill, STK Push, C2B, B2C), opening a merchant account via Safaricom, integrating M-Pesa as POS tender via the Daraja API, fee structures, settlement timing, reconciliation, and the secondary mobile-money providers (Airtel Money, Equitel) for non-Safaricom-network customers.
M-Pesa architecture in 60 seconds
M-Pesa is built and operated by Safaricom (with M-Pesa Holdings in Kenya). Architecture relevant to merchant retail:
- Lipa Na M-Pesa Till Number — a 5-7 digit till number assigned to your merchant account. Customer enters the till number + amount in their M-Pesa app or via USSD (*334#); payment settles to your linked till account.
- Paybill — alternative merchant account type with a 6-digit paybill number + per-customer account reference. Used for utility-style billing (rent, school fees, subscription); customer enters paybill + their reference + amount.
- STK Push (SIM Toolkit Push) — API-initiated payment flow. Merchant's POS triggers a payment prompt to the customer's phone; customer enters M-Pesa PIN on the prompt; payment settles. The cashier-friendly flow because the merchant initiates rather than waiting for the customer to type the till number.
- C2B (Customer to Business) — the customer-initiated flow; customer dials the till number themselves. Reconciliation matches inbound payments to open sales by reference.
- B2C (Business to Customer) — outbound flow for refunds + supplier payments + payroll.
- Daraja API — Safaricom's developer API providing programmatic access to all the above flows. Modern POS systems integrate via Daraja.
For a Kenyan POS, the standard setup: Lipa Na M-Pesa Till Number for the merchant account + Daraja API integration to trigger STK Push from the till. Customers without app access can fallback to manual C2B (typing the till number) or scanning the till's dynamic QR.
Opening a Lipa Na M-Pesa Till Number
Lipa Na M-Pesa merchant account registration via Safaricom:
- Visit any Safaricom shop (or apply via the M-Pesa Business portal at m-pesaforbusiness.co.ke)
- Submit application: business name + KRA PIN + business registration documents + linked bank account (in business name) + owner ID copies
- Safaricom assigns a Till Number — typically 5-7 digits
- Provisioning typically 3-10 working days
- Initial setup includes the M-Pesa till device (small Bluetooth-enabled receipt printer / display device) for receiving payment notifications
For POS integration, you also need Daraja API credentials:
- Register on Safaricom Developer portal (developer.safaricom.co.ke)
- Create an app linked to your Lipa Na M-Pesa Till Number
- Generate Consumer Key + Consumer Secret + Passkey for the production environment
- Configure into the POS during onboarding
M-Pesa fee schedule (verify current rates): merchant fees apply per transaction with tiered pricing based on transaction size; consumer-side fees vary based on whether the customer is on Safaricom or other networks. Subscription-style monthly fee minimal or nil.
The POS checkout flow — STK Push
With M-Pesa configured as POS tender on RetailPOS:
- Cashier rings the sale; the till defaults to M-Pesa tender
- POS triggers STK Push via Daraja API — Safaricom sends payment-prompt to the customer's phone with the till's amount + reference
- Customer's phone displays the M-Pesa STK Push prompt; customer enters their M-Pesa PIN
- Payment posts to your till account; webhook confirms to the POS in 3-15 seconds
- Receipt prints (with KRA eTIMS CUIN + QR for VAT-applicable sales)
Total elapsed time from M-Pesa-tender tap to printed receipt: typically 5-20 seconds (gated mostly by customer PIN entry speed). Comparable to card-tap; faster than waiting for the customer to manually type the till number.
If STK Push fails (customer's phone offline, M-Pesa PIN entry timeout, insufficient balance), the POS shows the failure within the checkout flow; cashier offers alternative tender (different STK Push attempt, manual C2B fallback, card, cash).
Static QR + manual C2B fallback
For customers whose phones don't support STK Push (older phones, network issues) or who prefer to initiate the payment themselves:
- Display a static QR with the till number on the customer-facing display
- Customer opens M-Pesa app → Scan → enters amount → confirms
- Or customer dials *334# → Buy goods → enters till number + amount + PIN
- Payment settles to your till account; webhook confirms; receipt prints
The POS' manual-C2B reconciliation matches the inbound payment to the open sale by reference. RetailPOS supports both flows (STK Push as primary, manual C2B as fallback); cashier UX is consistent.
Airtel Money + Equitel secondary integration
For customers on Airtel Kenya or Equity Bank Equitel networks, secondary mobile-money providers handle payment:
- Airtel Money — separate merchant relationship with Airtel; per-transaction fee structure varies; lower customer base than M-Pesa but meaningful in some regions
- Equitel — Equity Bank's mobile-money service; integrated with Equity Bank account; useful for Equity Bank customer base
RetailPOS supports both as alternative tenders alongside M-Pesa. For most retailers, M-Pesa volume far exceeds the secondary providers; the secondary tenders matter for the customer-convenience use case (not refusing customers on those networks).
Settlement timing + reconciliation
M-Pesa till settlements typically:
- T+1 standard — payments to your till today settle to your linked bank account next business day
- T+0 / instant — available at higher merchant tiers or via Pochi La Biashara (an enhanced M-Pesa-merchant product)
- Settlement amount — gross transaction net of M-Pesa merchant fees + applicable KRA VAT on the fees
Reconciliation:
- Safaricom sends daily settlement report (via M-Pesa portal + SMS + email)
- RetailPOS' reporting tools export the same period's M-Pesa tenders as CSV
- Matching the two sources confirms every customer payment landed in your bank account net of fees
- Mismatches (rare; provider-side reversal or retry-duplicate) surface in the manager dashboard for review
Month-end close: M-Pesa settlements appear in your bank statement as net deposits; M-Pesa portal supplies the gross- fee breakdown for accounting. Three-way match (POS sales register, M-Pesa portal, bank statement) is the standard control.
Refunds + dispute handling
M-Pesa refunds via B2C flow:
- Cashier rings the refund in the POS; selects M-Pesa as the original tender
- POS triggers B2C transaction via Daraja API to the original customer's phone number
- Customer receives the refund in their M-Pesa wallet (or notification of refund being processed)
- Settlement processes from your till; reconciliation tracks the refund in the daily report
Disputes are handled via Safaricom's merchant-dispute channel; maintain the per-transaction audit trail (eTIMS CUIN + RetailPOS receipt + M-Pesa transaction reference) for defensibility.
Integration with KRA eTIMS
For VAT-registered retailers, M-Pesa sales flow through eTIMS on the same path as cash or card sales — the tender type doesn't change eTIMS requirements. The CUIN + QR apply equally; the customer receives the CUIN-numbered receipt regardless of payment method.
RetailPOS' eTIMS connector handles all tender types uniformly; the integration is invisible to the cashier and to the customer (beyond the CUIN on the printed receipt).
Frequently asked
- How long does Lipa Na M-Pesa merchant account approval take?
- Typically 3-10 working days for the till number; additional 1-3 days for Daraja API credential provisioning. The till device (M-Pesa Bluetooth printer) ships with the account.
- Does the POS need extra hardware for M-Pesa?
- STK Push requires no additional hardware — the customer's phone is the input device. The standard M-Pesa Bluetooth till-device (provided by Safaricom on account opening) is useful for audio confirmation but not required if the POS handles confirmation natively. Static QR display on customer-facing iPad is sufficient.
- When do M-Pesa payments settle to my bank?
- T+1 next business day for standard tier; T+0 same-day available at higher merchant tiers or via Pochi La Biashara enhanced product. Net of M-Pesa merchant fees + KRA VAT on fees.
- What happens if STK Push fails mid-checkout?
- POS shows failure within 3-15 seconds; cashier offers retry, manual C2B fallback (customer types the till number), or alternative tender (card, cash). Sale never marked paid without confirmation.
- Do I need separate Airtel Money + Equitel setups?
- Optional — many retailers operate M-Pesa-only given 95%+ market share. For customer convenience (not refusing Airtel + Equitel customers), the secondary integrations are useful but not essential. RetailPOS supports both as alternative tenders.
- How do M-Pesa refunds work?
- RetailPOS' refund flow triggers B2C via Daraja API to the original customer's phone number. Customer receives refund in M-Pesa wallet; reconciliation tracks in daily report. Disputes via Safaricom merchant-dispute channel with audit trail support.
Open your shop in 30 seconds.
No card. Free until your first 100 sales. Bring your own Stripe; keep your hardware.