Disbursement
Tip
Payout API is used to initiate transfer requests to e-wallets or bank accounts.
- All requests are
Post requests, and the data format is json
Disbursement Methods
| wayCode |
Description |
| MPESA |
M-Pesa mobile wallet |
| AIRTEL |
Airtel Money mobile wallet |
| TKASH |
T-Kash mobile wallet |
| BANK_TRANSFER |
Bank transfer |
Request URL
Request Method
- Method: POST
- Content-Type: application/json
| header |
Required |
Type |
Description |
| merchantNo |
Yes |
String |
None |
Request Body Parameters
| Parameter |
Required |
Type |
Description |
| sign |
Yes |
String |
Except for the sign field, all remaining fields should be sorted alphabetically by their first letter, combined into key1=value1key2=value2, and encrypted using the app secret as salt via MD5. The final sign value should be in lowercase. |
| timestamp |
Yes |
integer |
Timestamp |
| amount |
Yes |
String |
Payment amount (KSH 50 or above is recommended; integers only) |
| wayCode |
No |
String |
Disbursement method. If omitted, MPESA is used by default. See the disbursement methods list above for supported values. |
| bankCode |
No |
String |
Bank code. Required when wayCode is BANK_TRANSFER. Refer to the BankCode appendix. |
| accountNo |
No |
String |
Bank account number. Required when wayCode is BANK_TRANSFER. |
| remark |
No |
String |
Request remark |
| tradeNo |
Yes |
String |
Unique transaction number (recommended format: year, month, day, hour, minute, second + random number) |
| mobile |
Yes |
String |
12-digit mobile number prefixed with 2541 or 2547. When wayCode is MPESA, AIRTEL, or TKASH, this field is the wallet account number. |
| notifyUrl |
No |
String |
Asynchronous callback URL |
Request Parameter Example
{
"sign": "000000",
"timestamp": "1715941383720",
"amount": "50",
"remark": "000000",
"tradeNo": "1000023",
"mobile": "254115555088",
"wayCode": "MPESA"
}
Response Result
| Parameter |
Required |
Type |
Description |
| msg |
Yes |
String |
Request result (when returning success, it only indicates that the request was successful and cannot be used for merchant-side logic judgment) |
| code |
Yes |
String |
Request response code (when returning 0000, it only indicates that the request was successful and cannot be used for merchant-side logic judgment). For specific error codes, please refer to the business error code enumeration. |
| timestamp |
Yes |
Integer |
Transaction time in milliseconds |
| success |
Yes |
Boolean |
Transaction result |
| data |
Yes |
Object |
Return object |
| data.serialNumber |
Yes |
String |
Result ID returned by vexora, unique |
| data.status |
Yes |
String |
Transaction results,Merchants can process subsequent workflows based on the returned status in the transaction result. For details, please refer to the status code reference table. |
| data.desc |
Yes |
String |
Error description |
| data.remark |
Yes |
String |
Request return content (returned as-is) |
Successful Response Example
{
"msg": "success",
"code": "0000",
"timestamp": 1719829933893,
"success": true,
"data": {
"serialNumber": "32e936de44164512abe419a9d1b2449a",
"status": "0015",
"desc": "CREDIT_INPROGRESS",
"remark": "000000"
}
}