Getting Started

Integrate the RukaPay Gateway API — use -sandbox endpoints in development.

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

Production: https://api.rukapay.net/api/v1/gateway/validate-beneficiary · https://api.rukapay.net/api/v1/gateway/process-transfer

Environments — full examples →

Prerequisites

  • Active RukaPay gateway partner account
  • Sandbox API key for dev; live key for production
  • HTTPS endpoint for callbackUrl (required for collections)

Which endpoint should I use?

EnvironmentProcess transferValidate beneficiary
Developmenthttps://dev-api.rukapay.net/api/v1/gateway/process-transfer-sandboxhttps://dev-api.rukapay.net/api/v1/gateway/validate-beneficiary-sandbox
Productionhttps://api.rukapay.net/api/v1/gateway/process-transferhttps://api.rukapay.net/api/v1/gateway/validate-beneficiary

Dev base URL: https://dev-api.rukapay.net · Production: https://api.rukapay.net

Transaction modes

Same transactionMode values for sandbox and production — only the URL path changes in dev.

transactionModeProductDescription
PARTNER_SEND_MNOMobile Money PayoutSend money to MTN or Airtel mobile money wallets.
PARTNER_COLLECT_MNOMobile Money CollectionCollect payment from customer MTN/Airtel. Credits partner wallet. callbackUrl required.
PARTNER_SEND_BANKBank TransferSend money to a Ugandan bank account.
PARTNER_PAY_BILL_PAYMENTBill PaymentPay utility and subscription bills (NWSC, UMEME, DSTV, etc.).
PARTNER_PAY_AIRTIMEAirtime PurchasePurchase airtime on MTN or Airtel.

Integration steps

  1. Get sandbox API keys API Keys
  2. Validate beneficiary (dev) https://dev-api.rukapay.net/api/v1/gateway/validate-beneficiary-sandbox
  3. Process transfer (dev) https://dev-api.rukapay.net/api/v1/gateway/process-transfer-sandbox
  4. Handle callback — POST to your callbackUrl on SUCCESS / FAILED
  5. Go live — swap to production paths on api.rukapay.net

First request (development)

Example collection against https://dev-api.rukapay.net/api/v1/gateway/process-transfer-sandbox. Include callbackUrl for PARTNER_COLLECT_MNO.

curl -X POST https://dev-api.rukapay.net/api/v1/gateway/process-transfer-sandbox \
  -H "x-api-key: YOUR_SANDBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "transactionMode": "PARTNER_COLLECT_MNO",
  "amount": 50000,
  "currency": "UGX",
  "phoneNumber": "256700000000",
  "mnoProvider": "MTN",
  "narration": "Invoice payment #1001",
  "partnerReference": "PARTNER-REF-123456",
  "callbackUrl": "https://your-app.com/webhooks/rukapay"
}'

Production example

After testing, use the same body against /api/v1/gateway/process-transfer:

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_COLLECT_MNO",
  "amount": 50000,
  "currency": "UGX",
  "phoneNumber": "256700000000",
  "mnoProvider": "MTN",
  "narration": "Invoice payment #1001",
  "partnerReference": "PARTNER-REF-123456",
  "callbackUrl": "https://your-app.com/webhooks/rukapay"
}'

Explore