Overview
Payaza Transfers lets you send money to any bank account or mobile wallet in Nigeria, Ghana, Kenya, and other supported countries. This guide walks through the full flow — from confirming the recipient’s account name to initiating the payout and verifying the outcome. The transfer flow has four steps:Before you begin
You need the following before making your first transfer:- A funded Payaza account for the currency you want to send from
- Your public API key encoded in Base64 — see the Authentication guide
- A webhook URL saved on the dashboard — see the Webhooks guide
- Your transaction PIN set up on the dashboard — required to authorise every payout
- Your server IP address whitelisted on the dashboard — required before live payouts are processed
Switch
X-TenantID from test to live when you are ready to process real
payouts.Step 1 — Verify account name
This step applies to Nigeria (NGN) and Ghana (GHS) only. Skip to Step
2 if you are sending to other countries.
cURL
Step 2 — Get your account reference
Retrieve thepayazaAccountReference for the currency you want to send from. You will pass this as account_reference in your transfer request.
cURL
The response contains one object per currency. Use the
payazaAccountReference from the object whose currency matches your
intended payout.Step 3 — Initiate the transfer
One-time live setup
Two steps are required before your first live payout. They only need to be done once.1. Whitelist your server IP address
1. Whitelist your server IP address
2. Set your transaction PIN
2. Set your transaction PIN
A 6-digit PIN is required to authorise every transfer. Set it once on the dashboard.
Your PIN must not include:
- Repeated digits — e.g.
111111 - Sequential digits — e.g.
123456or654321 - Repeating patterns — e.g.
121212or123123
Sample email
Sample email
Request
cURL
Request parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
transaction_type | string | Yes | Payment rail — use "nuban" for Nigerian bank accounts |
service_payload.payout_amount | double | Yes | Total amount to send. Must equal the sum of all credit_amount values |
service_payload.transaction_pin | integer | Yes | Your 6-digit transaction PIN |
service_payload.account_reference | string | Yes | Your Payaza account reference from Step 2 |
service_payload.currency | string | Yes | ISO currency code — e.g. "NGN", "GHS" |
service_payload.country | string | Yes | ISO country code — e.g. "NGA", "GHA" |
payout_beneficiaries[].credit_amount | double | Yes | Amount to send to this recipient |
payout_beneficiaries[].account_number | string | Yes | Recipient’s bank account number |
payout_beneficiaries[].account_name | string | Yes | Recipient’s account name (from Step 1) |
payout_beneficiaries[].bank_code | string | Yes | Recipient’s bank code |
payout_beneficiaries[].transaction_reference | string | Yes | Your unique reference for this transfer |
payout_beneficiaries[].narration | string | Yes | Transfer description shown on the recipient’s statement |
payout_beneficiaries[].sender | object | No | Sender information block |
payout_beneficiaries[].sender.sender_name | string | Yes | Full name of the sender |
payout_beneficiaries[].sender.sender_id | string | No | Sender’s identification number (optional) |
payout_beneficiaries[].sender.sender_phone_number | string | Yes | Sender’s phone number |
payout_beneficiaries[].sender.sender_address | string | Yes | Sender’s physical address |
transaction_type values
The transaction_type field controls which payment rail is used for the payout. Pass the value that matches the recipient’s currency and intended transfer method.
| Currency | transaction_type | Description |
|---|---|---|
| NGN | nuban | Nigerian bank account (NUBAN standard) |
| GHS | mobile_money | Ghana mobile money wallet |
| GHS | ghipps | Ghana bank transfer |
| UGX | mobile_money | Uganda mobile money wallet |
| TZS | mobile_money | Tanzania mobile money wallet |
| TZS | tiss | Tanzania bank transfer |
| KES | mobile_money | Kenya mobile money wallet |
| KES | kepss | Kenya bank transfer |
| XOF | mobile_money | XOF mobile money wallet |
| XOF | wave | XOF Wave payouts |
| XAF | mobile_money | Cameroon mobile money wallet |
| SLE | mobile_money | Sierra Leone mobile money wallet |
| ZAR | RTC | South Africa Real-Time Clearing |
Response
Step 4 — Verify the transfer
Use this endpoint to confirm the outcome of a transfer. Call it after initiating, or as a fallback if a webhook is not received.cURL
Transaction statuses
| Status | Meaning |
|---|---|
TRANSACTION_INITIATED | Received and queued for processing |
NIP_SUCCESS | Transfer successful — funds delivered |
NIP_PENDING | Still in progress |
NIP_FAILURE | Transfer failed |
ESCROW_SUCCESS | Amount deducted but awaiting bank processing — can be reversed |
Webhook events
Payaza sends a webhook for every completed or failed transfer. Use webhooks as your primary notification mechanism and the status query endpoint only as a fallback.| Event | When it fires |
|---|---|
| Successful transfer | Transfer processed and funds delivered |
| Failed transfer | Transfer attempt failed |
Always verify the webhook signature before processing the payload. See the
Webhooks guide for signature verification steps.
Key reminders
- Your Payaza account must be funded before initiating a transfer
- Generate a unique
transaction_referencefor every transfer attempt - Transfers are not retried automatically — your application must handle retry logic
- IP whitelisting is required for live payouts only — not enforced in test
- If
postNoDebitistrueon your account, transfers will be blocked — contact support@payaza.africa
What’s next
Webhooks
Set up signature verification and handle transfer event payloads.
Errors
A reference for all transfer error responses and how to fix them.
Virtual accounts
Collect inbound payments via dynamic or reserved virtual account numbers.
Payaza account
View your account balance and reference across all currencies.