Nigeria
Make local and international transfers to Nigerian bank accounts.
Send NGN directly to bank accounts in Nigeria. This guide walks you through the steps required to initiate and verify a transfer.
Prerequisites
- Complete KYC and ensure your account is approved for transactions.
- Whitelist your server IP addresses. See this guide for more information.
- Enable Transfers via API. See this guide for more information.
- Ensure you have sufficient funds in the NGN wallet. For cross-currency transfers, the transfer amount is debited from the
debit_currencywallet, while the transfer fee is debited from the NGN wallet. See the supported currencies and transfer fees page for more information.
Payout Flow
Follow these steps to send money to a bank account in Nigeria.
- Collect the beneficiary details
Gather the beneficiary's bank and account number.
See the table below for the required and optional parameters.
| Parameter | Description | Format | Example | Isrequired |
|---|---|---|---|---|
account_bank | The beneficiary's bank code. Use the Get Banks endpoint to retrieve the bank code. | String | "100004" | Yes |
account_number | The beneficiary's account number. | String | "8130615700" | Yes |
amount | The amount to send. | Integer | 350 | Yes |
currency | The transfer currency. Must be NGN. | String | "NGN" | Yes |
debit_currency | The wallet currency to debit for the transfer. | String | "XAF" | No |
narration | A description for the transfer. | String | "Erik Withdrawal" | No |
reference | Unique reference to identify the transfer. | String | "Your-Unique-Reference" | No |
- Initiate the transfer
Send aPOSTrequest to the transfer endpoint with the beneficiary and transfer details.
curl --request POST \
--url https://api.flutterwave.com/v3/transfers \
--header 'Authorization: Bearer {{YOUR_SECRET_KEY}}' \
--header 'Content-Type: application/json' \
--data '{
"amount": 2000,
"account_bank": "100004",
"account_number": "8130615700",
"currency": "NGN",
"narration": "Erik's withdrawal",
"reference": "STkKkjrMRF_k5kdHkkY3_PMCKDU_1"
}'
{
"status": "success",
"message": "Transfer Queued Successfully",
"data": {
"id": 117369760,
"account_number": "8130615700",
"bank_code": "100004",
"full_name": "DOTUN TOMI",
"created_at": "2026-09-21T12:51:48.000Z",
"currency": "NGN",
"amount": 2000,
"fee": 0,
"status": "NEW",
"reference": "STkKkjrMRF_k5kdHkkY3_PMCKDU_1",
"meta": null,
"narration": "Erik's withdrawal",
"complete_message": "",
"requires_approval": 0,
"is_approved": 1,
"bank_name": "Opay"
}
}
- Verify the transfer status
There are two ways to verify the transfer status:
- Call the transfer status endpoint using the transfer ID (
data.id) returned in the transfer response.
curl --request GET \
--location 'https://api.flutterwave.com/v3/transfers/117369760' \
--header 'Authorization: Bearer {{YOUR_SECRET_KEY}}'
{
"status": "success",
"message": "Transfer fetched",
"data": {
"id": 117369760,
"account_number": "8130615700",
"bank_code": "100004",
"full_name": "DOTUN TOMI",
"created_at": "2026-09-21T12:51:48.000Z",
"currency": "NGN",
"debit_currency": null,
"amount": 2000,
"fee": 0,
"status": "SUCCESSFUL",
"reference": "STkKkjrMRF_k5kdHkkY3_PMCKDU_1",
"meta": null,
"narration": "Erik's withdrawal",
"approver": null,
"complete_message": "Transaction was successful",
"requires_approval": 0,
"is_approved": 1,
"bank_name": "Opay"
}
}
- Listen for webhooks. Configure your webhook URL on the Flutterwave Dashboard to receive real-time transfer updates. See the webhooks guide for more information.
{
"event": "transfer.completed",
"event.type": "Transfer",
"data": {
"id": 117369760,
"account_number": "8130615700",
"bank_name": "Opay",
"bank_code": "100004",
"fullname": "DOTUN TOMI",
"created_at": "2026-09-21T12:51:48.000Z",
"currency": "NGN",
"debit_currency": null,
"amount": 2000,
"fee": 0,
"status": "SUCCESSFUL",
"reference": "STkKkjrMRF_k5kdHkkY3_PMCKDU_1",
"meta": null,
"narration": "Erik's withdrawal",
"approver": null,
"complete_message": "Transaction was successful",
"requires_approval": 0,
"is_approved": 1
}
}
Transfer to USD Domiciliary Accounts in Nigeria
Flutterwave supports transfers to USD accounts (Domiciliary Accounts) in Nigeria.
Feature Availability
IMTO transfers to USD domiciliary accounts are currently unavailable. Any transfer attempt will automatically fail.
To send USD to domiciliary accounts in Nigeria, provide the bank code (retrievable via the bank endpoint), account number, and specify USD as the currency. Depending on the bank, you may also need to include additional details like the routing number in the meta parameter.
{
"account_number": "5090280719",
"account_bank": "144",
"amount": 2000,
"currency": "USD",
"narration": "Example FCMB DOM Payout",
"reference": "SAMPLE-REF",
"beneficiary_name": "Tobi Jones",
"meta": [
{
"sender": "Flutterwave Developers",
"sender_address": "35a, Ladi Alakija Avenue, Lekki",
"sender_country": "NG",
"sender_id_number": "00000000000",
"sender_id_type": "drivers license",
"sender_id_expiry": "05-2023",
"sender_mobile_number": "2348000000000",
"sender_occupation": "Consultant",
"sender_beneficiary_relationship": "Customer",
"recipient_address": "19, Olubunmi Rotimi street, Lekki",
"beneficiary_country": "NG",
"mobile_number": "2348000000000",
"email": "[email protected]",
"beneficiary_occupation": "Student",
"transfer_purpose": "Wallet withdrawal"
}
]
}
{
"account_bank": "044",
"account_number": "1234567840",
"amount": 3000,
"currency": "USD",
"narration": "Example Fidelity Bank DOM Payout",
"reference": "SAMPLE-REF",
"meta": [
{
"sender": "Another User",
"sender_city": "Abuja",
"first_name": "Example",
"last_name": "User",
"email": "[email protected]",
"beneficiary_country": "NG",
"mobile_number": "+2348010901234",
"merchant_name": "Spotify"
}
]
}
{
"account_number": "5090280719",
"account_bank": "101",
"amount": 1000,
"currency": "USD",
"narration": "Example Providus DOM Payout",
"beneficiary_name": "Example User",
"meta": [
{
"sender": "Test User",
"sender_address": "35a Ladi Alakija Avenue lekki1",
"sender_city": "Lekki",
"sender_country": "NG",
"sender_id_number": "22244857954",
"sender_mobile_number": "+2348022913114",
"sender_email_address": "[email protected]",
"first_name": "Example",
"last_name": "User",
"recipient_address": "TinCan VI",
"beneficiary_state": "Lagos",
"beneficiary_country": "NG",
"beneficiary_mobile_number": "2348022913114",
"routing_number": "101",
"account_number": "5090280719"
}
]
}
{
"account_bank": "032",
"account_number": "1234567840",
"amount": 2400,
"currency": "USD",
"narration": "Example Union Bank DOM Payout",
"reference": "SAMPLE-REF",
"meta": [
{
"sender": "Another User",
"sender_city": "Abuja",
"first_name": "Example",
"last_name": "User",
"email": "[email protected]",
"beneficiary_country": "NG",
"mobile_number": "2348010901234",
"merchant_name": "Spotify"
}
]
}
{
"account_bank": "044",
"account_number": "1234567840",
"amount": 2000,
"currency": "USD",
"narration": "Example DOM Payout",
"reference": "SAMPLE-REF",
"meta": [
{
"sender": "Another User",
"first_name": "Example",
"last_name": "User",
"email": "[email protected]",
"beneficiary_country": "NG",
"mobile_number": "+2348131133933",
"merchant_name": "Spotify"
}
]
}
You'll get a response similar to this:
{
"status": "success",
"message": "Transfer Queued Successfully",
"data": {
"id": 161265,
"account_number": "1234567836",
"bank_code": "044",
"full_name": "Flutterwave Developers",
"created_at": "2021-01-13T09:23:04.000Z",
"currency": "USD",
"debit_currency": "USD",
"amount": 65,
"fee": 40.325,
"status": "NEW",
"reference": "khlm-dom-5245",
"meta": [
{
"FirstName": "Flutterwave",
"LastName": "Developers",
"EmailAddress": "[email protected]",
"beneficiary_country": "NG",
"MobileNumber": "+2348000000000",
"Sender": "Iphie",
"account_number": "1234567836",
"routing_number": "044",
"MerchantName": "Flutterwave"
}
],
"narration": "Test Payout",
"complete_message": "",
"requires_approval": 0,
"is_approved": 1,
"bank_name": "ACCESS BANK NIGERIA"
}
}
{}
As always, the data.status of the transfer is "NEW". Be sure to set up a webhook or call the get transfer endpoint to track when the transfer is completed. For more details, see transfer overview.
Testing Transfers
Check the testing guide for mocking transfers in the test environment.
Updated 12 days ago
