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
/api/v1/transactions/payoutAuthenticates with your API keys.
Body parameters
| Parameter | Description | |
|---|---|---|
amount | required | integerAmount in minor units (pesewas), whole cedis only. Minimum GHS 10 (1000). |
currencydefault: GHS | required | stringISO currency code. |
channel | required | stringDestination rail, e.g. bank_transfer or the momo channel. |
recipientAccount | required | stringDestination account number or momo number. |
recipientBank | required | stringDestination bank or network code. Use Verification → Banks to list valid codes. |
recipientName | required | stringRegistered name of the recipient account. |
reference | required | stringYour unique idempotency reference, e.g. PAYOUT-123. |
narration | optional | stringNarration shown on the recipient's statement. |
confirmRecipientName | optional | booleanResolve the recipient's registered name and block the payout if it doesn't match recipientName. |
Fees are always merchant-borne on payouts
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
}'{
"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.