Base URL
Core concepts
STK Push
Prompt a customer’s phone with an M-Pesa payment request and get a transaction back in
milliseconds.
Transaction status
Every transaction has a UUID and moves through a simple lifecycle to a terminal state.
Webhooks
Receive an HMAC-signed POST when a payment succeeds, fails, or expires — then confirm
with a status read.
Wallet balance
Platform fees are prepaid. Check your remaining balance at any time.
Conventions
Amounts are integer minor units (KES cents).
10000 means KES 100.00. M-Pesa moves
whole shillings only, so send multiples of 100 (for example 15000 for KES 150).- Currency is always
KES. - Timestamps are ISO 8601 (for example
2026-09-25T14:03:22+00:00). - Errors for API-level failures use a single envelope:
{ "error": { "code": "...", "message": "..." } }— see Errors. - Versioning happens in the URL (
/v1). Breaking changes will ship under a new version.