NamibraPay

Payouts

Move money out of your NamibraPay balance to any Ghanaian bank account or mobile money wallet — with the recipient's name checked before funds leave.

Create a payout

POST/api/v1/transactions/payout
Send money from your balance to a bank account or momo wallet.

Authenticates with your API keys.

Body parameters

ParameterDescription
amountrequiredintegerAmount in minor units (pesewas), whole cedis only. Minimum GHS 10 (1000).
currencydefault: GHSrequiredstringISO currency code.
channelrequiredstringDestination rail, e.g. bank_transfer or the momo channel.
recipientAccountrequiredstringDestination account number or momo number.
recipientBankrequiredstringDestination bank or network code. Use Verification → Banks to list valid codes.
recipientNamerequiredstringRegistered name of the recipient account.
referencerequiredstringYour unique idempotency reference, e.g. PAYOUT-123.
narrationoptionalstringNarration shown on the recipient's statement.
confirmRecipientNameoptionalbooleanResolve the recipient's registered name and block the payout if it doesn't match recipientName.

Fees are always merchant-borne on payouts

The feeBearer option doesn't apply to payouts — the merchant is always the party being charged, and fees are deducted from the settlement.
curl -X POST "https://api.namibrapay.com/api/v1/transactions/payout" \
  -H "X-API-Key: pk_live_xxxxxxxxxxxxxxxx" \
  -H "X-API-Secret: sk_live_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 50000,
    "currency": "GHS",
    "channel": "bank_transfer",
    "recipientAccount": "1234567890123",
    "recipientBank": "UMB",
    "recipientName": "Ama Mensah",
    "reference": "PAYOUT-2031",
    "narration": "October seller settlement",
    "confirmRecipientName": true
  }'
200
{
  "success": true,
  "data": {
    "reference": "NPR-payout-71k2",
    "merchantReference": "PAYOUT-2031",
    "status": "pending",
    "amount": 50000,
    "fee": 500,
    "currency": "GHS"
  }
}

Confirmation of payee

Set confirmRecipientName: true and we resolve the registered name on the destination account before submitting the payout. If it doesn't match recipientName, the request is rejected with a 400 and no money moves. This protects you against typos and mis-directed transfers.

Payout lifecycle

A payout starts as pending, moves to processing once the rail accepts it, and completes as completed or failed. You are notified at each transition through the payout.initiated, payout.processing, payout.completed and payout.failed webhook events.

Resolving destination details

Before sending, use the Verification endpoints to list banks, resolve an account number to its registered name, or confirm a payee — so the payout succeeds the first time.