Gateway API
Transaction Status
Query transaction status by RukaPay ID, partnerReference, reference, or externalReference.
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
Use callbacks (callbackUrl) for real-time updates. Poll status when you need to reconcile or recover from missed webhooks.
Status values
SUCCESSTransaction completed successfully.
PENDINGAwaiting customer approval or provider processing.
FAILEDTransaction failed. See failureReason or callback errorMessage.
PROCESSINGTransaction is being processed by the payment network.
Example response
{
"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"
}
}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.
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": "256700000000",
"mnoProvider": "MTN",
"recipientName": "John 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
Transfer accepted (may be PENDING for async flows).
Bad Request
Validation error, insufficient balance, or duplicate partnerReference.
Unauthorized
Invalid or missing x-api-key.
Too Many Requests
Rate limit exceeded.