Payout methods
The request body is the same shape for every method — onlypayout_type and payout_method_data change.
MTN MoMo payouts use
currency: "EUR". The other five methods use currency: "KES".phone and phone_country_code. The three bank methods need their own payout_method_data:
PesaLink — payout_type: "bank"
bank_code values, see the PesaPay bank codes page.
Paybill — payout_type: "bank"
payout_type: "bank"
1
Create and confirm the payout
Send a A successful call returns a The payout has been accepted for processing, but it has not necessarily reached the recipient yet.
POST request to /payouts/create with confirm: true. Along with amount, currency, profile_id, phone, and phone_country_code, you choose a payout_type and fill in the matching payout_method_data.Here is a full example for M-Pesa Express:200 with a payout object. The fields that matter right now:2
Poll for the final status
Poll the payout with
force_sync=true until the status settles:Status reference
These are the only valuesstatus can take on a payout (PayoutStatus):
Common errors
Missing account_id on a bank payout
Missing account_id on a bank payout
PesaLink, Paybill, and Paytill all require
account_id in payout_method_data.bank. Omitting it fails validation before the payout is even created.Wallet payout to an unregistered number
Wallet payout to an unregistered number
If
phone is not registered for the wallet named in payout_type (for example, a number with no M-Pesa account), the payout fails at the connector even though the request itself is valid.Checking for succeeded instead of success
Checking for succeeded instead of success
Payout completion is
success. Code copied from a payments integration that checks for succeeded will never match and will poll forever.Next steps
Refunds
Send money back to a payer instead.
Quickstart
The full create-and-poll payment loop.
Wallet payments
M-Pesa, Airtel, and MTN MoMo payments.