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

  1. Complete KYC and ensure your account is approved for transactions.
  2. Whitelist your server IP addresses. See this guide for more information.
  3. Enable Transfers via API. See this guide for more information.
  4. Ensure you have sufficient funds in the NGN wallet. For cross-currency transfers, the transfer amount is debited from the debit_currency wallet, 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.

  1. Collect the beneficiary details
    Gather the beneficiary's bank and account number.

See the table below for the required and optional parameters.

ParameterDescriptionFormatExampleIsrequired
account_bankThe beneficiary's bank code. Use the Get Banks endpoint to retrieve the bank code.String"100004"Yes
account_numberThe beneficiary's account number.String"8130615700"Yes
amountThe amount to send.Integer350Yes
currencyThe transfer currency. Must be NGN.String"NGN"Yes
debit_currencyThe wallet currency to debit for the transfer.String"XAF"No
narrationA description for the transfer.String"Erik Withdrawal"No
referenceUnique reference to identify the transfer.String"Your-Unique-Reference"No
  1. Initiate the transfer
    Send a POST request 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"
    }
}
  1. Verify the transfer status
    There are two ways to verify the transfer status:
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.


Did this page help you?