Gateway API
Payout API
Send money to MTN and Airtel wallets using PARTNER_SEND_MNO. Routed via ABC integration.
Development / sandbox: use -sandbox endpoints
On https://dev-api.rukapay.net (dev), do not call the production paths. Use the full sandbox URLs below — same request body, simulated responses, no real money movement.
- Validate beneficiary:
https://dev-api.rukapay.net/api/v1/gateway/validate-beneficiary-sandbox - Process transfer:
https://dev-api.rukapay.net/api/v1/gateway/process-transfer-sandbox
Overview
Payouts debit your partner ESCROW or COMMISSION wallet and credit the recipient's mobile money account. Minimum amount: 100 UGX.
Validate the recipient first with POST validate-beneficiary using the same transactionMode.
Example request
Authenticate with your secret API key. All requests are made over HTTPS to the RukaPay API base URL.
curl -X POST https://api.rukapay.net/api/v1/gateway/process-transfer \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"transactionMode": "PARTNER_SEND_MNO",
"amount": 25000,
"currency": "UGX",
"phoneNumber": "256700000001",
"mnoProvider": "AIRTEL",
"recipientName": "Jane Doe",
"narration": "Salary payout",
"partnerReference": "PAYROLL-042"
}'https://api.rukapay.net/api/v1/gateway/process-transferRequest body
transactionModeRequiredMode code e.g. PARTNER_SEND_MNO, PARTNER_COLLECT_MNO.
amountRequiredAmount in UGX (minimum 100).
currencyRequiredCurrency code. Default UGX.
narrationRequiredTransfer description shown in records.
partnerReferenceRequiredUnique partner reference for idempotency and tracking.
walletTypeESCROW or COMMISSION. Default ESCROW.
phoneNumberUganda MSISDN 256XXXXXXXXX (MNO send/collect/airtime).
mnoProviderMTN or AIRTEL. Aliases: network.
accountNumberBank or bill account number.
bankCodeBank code e.g. STANBIC (bank send).
accountNameAccount holder name (bank send).
recipientNameRecipient name (MNO send).
billerCodeBiller code e.g. NWSC, UMEME (bill payment).
callbackUrlWebhook URL. Required for PARTNER_COLLECT_MNO.
metadataCustom data returned in partner callback.
Request example
{
"transactionMode": "PARTNER_SEND_MNO",
"amount": 50000,
"currency": "UGX",
"narration": "Payment description",
"partnerReference": "PARTNER-REF-123456",
"phoneNumber": "256700000001",
"mnoProvider": "AIRTEL",
"recipientName": "Jane Doe"
}Response example
{
"success": true,
"message": "Transfer processed successfully",
"transaction": {
"transactionId": "cm5abc123xyz",
"reference": "RKP-20260521-001",
"amount": 50000,
"fee": 1000,
"totalCharged": 51000,
"status": "SUCCESS",
"recipient": {
"name": "John Doe",
"account": "256700000000",
"provider": "MTN"
},
"createdAt": "2026-05-21T10:30:00.000Z"
},
"walletBalance": {
"walletId": "wal_partner_escrow",
"walletType": "ESCROW",
"balanceBefore": 1000000,
"balanceAfter": 949000,
"currency": "UGX"
}
}Status codes
OK
Payout submitted.
Bad Request
INSUFFICIENT_BALANCE or validation error.
https://api.rukapay.net/api/v1/gateway/validate-beneficiaryRequest body
transactionModeRequiredPARTNER_SEND_MNO, PARTNER_SEND_BANK, PARTNER_PAY_BILL_PAYMENT, or PARTNER_PAY_AIRTIME.
phoneNumber256XXXXXXXXX for MNO or airtime modes.
mnoProviderMTN or AIRTEL.
accountNumberBank or bill account number.
bankCodeRequired for PARTNER_SEND_BANK.
billerCodeRequired for PARTNER_PAY_BILL_PAYMENT (e.g. NWSC).
Request example
{
"transactionMode": "PARTNER_SEND_MNO",
"phoneNumber": "256700000000",
"mnoProvider": "MTN"
}Response example
{
"success": true,
"message": "Beneficiary validated",
"beneficiary": {
"name": "John Doe",
"phoneNumber": "256700000000",
"provider": "MTN",
"isValid": true
}
}Status codes
OK
Validation result returned.
https://api.rukapay.net/api/v1/gateway/transactions/{transactionIdOrReference}/statusPath parameters
transactionIdOrReferenceRequiredTransaction ID or your partnerReference.
Response example
{
"success": true,
"message": "Transaction found",
"transaction": {
"id": "cm5abc123xyz",
"partnerReference": "PARTNER-REF-123456",
"mnoId": "MTN-FIN-987654",
"mnoTransactionId": "MTN-FIN-987654",
"amount": 50000,
"fee": 1000,
"totalAmount": 51000,
"currency": "UGX",
"status": "SUCCESS",
"destinationType": "MNO",
"destination": { "phoneNumber": "256700000000", "provider": "MTN" },
"createdAt": "2026-05-21T10:30:00.000Z",
"completedAt": "2026-05-21T10:30:45.000Z"
}
}Status codes
OK
Transaction found.
Not Found
TRANSACTION_NOT_FOUND.