KES
Partner payouts settle to a registered bank account. Mobile money is not a partner payout destination.
Kenyan shillings reach you, or leave you, through a bank account registered against your partner account.
Payouts (sell flow)
A KES payout settles to one of your registered payout accounts. Read them with
GET /v1/payout-accounts and pass the one you want as payoutAccountId when
you create a sell order.
M-PESA and PesaLink are not partner payout destinations
Whatever a general list of Kenyan rails might suggest, a partner payout cannot land in an M-PESA wallet or be sent over PesaLink today. The destination is a registered bank account.
If your product assumes a payout can reach a mobile money wallet, that assumption needs revisiting before you build — it is the single most common mismatch between what teams expect here and what the rail does.
Payout accounts are registered with us rather than created over the API; there is
no POST /v1/payout-accounts. An account that cannot receive is refused at
order creation with PAYOUT_ACCOUNT_NOT_PAYABLE.
Collections (buy flow)
Your payers send KES to a collection account issued to you. The create response
carries paymentInstructions, and GET /v1/funding is the source of truth for
them.
Two rails reach that account, and they differ in one way that matters:
| Rail | Attribution |
|---|---|
| M-PESA paybill | By the Account Number, which is your dedicated collection account. M-PESA carries no narration field, so paymentReference cannot travel on it. |
| Bank transfer (PesaLink, RTGS, EFT) | By paymentReference in the narration, which is delivered on these rails and gives exact attribution. |
Pay the exact amount, before the order's deadline. See References and attribution for what happens when a payment cannot be attributed.
Precision
KES carries at most 2 decimal places, always as a string. See Money.