One API. Every rail in East Africa.

Get paid on every rail.
Reconcile on one.

Kpay collects from M-Pesa, MTN, Airtel, cards and banks and lands it all in a single ledger. Raise a bill, share a reference, watch it settle.

console.kpay — Payment intents
The Kpay console's Payment intents list: collected, open bills, settlement rate and failed attempts above a table of bills on MTN MoMo, Airtel Money, M-Pesa, card and bank.

Rails live today

M-PesaMTN MoMoAirtel MoneyVisa / MastercardBank transferUSSD

How it works

Three steps.
No new bank account.

  1. 01

    Raise a bill

    Create a payment intent with the amount, currency and payer. Kpay issues one reference that works on every rail.

  2. 02

    Payer pays their way

    Mobile money prompt, USSD, card or bank transfer. Routing rules pick the cheapest path that is up right now.

  3. 03

    It settles. You reconcile once.

    Every attempt, partial payment and payout lands in one ledger in minor units. No floats, no spreadsheets.

For developers

One POST.
Every rail answers.

OpenAPI 3.1 contract, typed client in a command, bearer auth, snake_case everywhere. Money is always an integer.

In safe hands.

Tenant isolationEvery operator sees only their own tenant's data. Enforced server-side on every call.
Role-based accessEngineering, accountant, tenant and auditor roles, each with a permission catalogue.
Audit trailEvery attempt carries a correlation id. Nothing settles without a record.
Sandbox and productionFlip providers between sandbox and live per tenant. Test with real flows first.

Stop chasing receipts.
Start collecting.

Start collecting with Kpay