South Africa

Transfer funds to South African bank accounts.

Send ZAR directly to bank accounts in South Africa. 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 ZAR wallet. For cross-currency transfers, the transfer amount is debited from the debit_currency wallet, while the transfer fee is debited from the ZAR 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 South Africa.

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

See the table below for the required and optional parameters.

ParameterDescriptionFormatExampleIs required
account_bankThe beneficiary's bank code. Use the Get Banks endpoint to retrieve the bank code.String"Nedbank"Yes
account_numberThe beneficiary's account number.String"1080621210"Yes
beneficiary_nameThe beneficiary's full name.String"Thabo Dlamini"Yes
amountThe amount to send.Integer1000Yes
currencyThe transfer currency. Must be ZAR.String"ZAR"Yes
debit_currencyThe wallet currency to debit for the transfer.String"XAF"No
narrationA description for the transfer.String"South Africa Withdrawal"No
referenceUnique reference to identify the transfer.String"Your-Unique-Reference"No
meta[0].first_nameThe beneficiary’s first name. If passed, must match the first name value provided for the beneficiary_name.String"Thabo"No
meta[0].last_nameThe beneficiary’s last name. If passed, must match the last name value provided for the beneficiary_name.String"Dlamini"No
meta[0].emailThe beneficiary’s email address.String“[email protected]”Yes
meta[0].recipient_addressThe beneficiary’s address.String"Cape Town South Africa"Yes
meta[0].mobile_numberThe beneficiary’s mobile number.String"+27830000000"Yes
  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": 1000,
        "account_bank": "Nedbank",
        "account_number": "1080621210",
        "currency": "ZAR",
        "debit_currency": "XAF",
        "beneficiary_name":"Nelson Nelson",
        "narration": "South Africa withdrawal",      
        "reference": "STk_kfndl_PMCKDU_1",
        "meta":[
      {
        "first_name": "Nelson",
        "last_name": "Nelson",
        "email": "[email protected]",
        "mobile_number": "+27830000000",
        "recipient_address": "Johannesburg South Africa"     
      }
        ]	
  }'
{
    "status": "success",
    "message": "Transfer Queued Successfully",
    "data": {
        "id": 2242314,
        "account_number": "1080621210",
        "bank_code": "Nedbank",
        "full_name": "Nelson Nelson",
        "created_at": "2026-09-22T13:22:14.000Z",
        "currency": "ZAR",
        "debit_currency": "XAF",
        "amount": 1000,
        "fee": 45,
        "status": "NEW",
        "reference": "STk_kfndl_PMCKDU_1",
        "meta": [
            {
                "FirstName": "Nelson",
                "LastName": "Nelson",
                "EmailAddress": "[email protected]",
                "MobileNumber": "+27830000000",
                "Address": "Johannesburg South Africa",
                "MerchantName": "Dotuns Fashion Limited",
                "SenderCountry": "ZA",
                "SenderAddress": "138 West Street, Sandown, Sandton, JHB",
                "AccountNumber": "1080621210",
                "RoutingNumber": "Nedbank",
                "Sender": "Dotuns Fashion Limited"
            }
        ],
        "narration": "South Africa withdrawal",
        "complete_message": "",
        "requires_approval": 0,
        "is_approved": 1,
        "bank_name": "Nedbank Limited"
    }
}
  1. Verify the transfer status
    There are two ways to verify the transfer status:
curl --request GET \
  --location 'https://api.flutterwave.com/v3/transfers/2242314' \
  --header 'Authorization: Bearer {{YOUR_SECRET_KEY}}'
{
    "status": "success",
    "message": "Transfer fetched",
    "data": {
        "id": 2242314,
        "account_number": "1080621210",
        "bank_code": "Nedbank",
        "full_name": "Nelson Nelson",
        "created_at": "2026-09-22T13:22:14.000Z",
        "currency": "ZAR",
        "debit_currency": "XAF",
        "amount": 1000,
        "fee": 45,
        "status": "SUCCESSFUL",
        "reference": "STk_kfndl_PMCKDU_1",
        "meta": [
            {
                "first_name": "Nelson",
                "last_name": "Nelson",
                "email": "[email protected]",
                "mobile_number": "+27830000000",
                "account_number": "1080621210",
                "routing_number": "Nedbank",
                "sender": "Dotuns Fashion Limited"
            }
        ],
        "narration": "South Africa withdrawal",
        "approver": null,
        "complete_message": "Successful",
        "requires_approval": 0,
        "is_approved": 1,
        "bank_name": "Nedbank Limited"
    }
}
  • 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": 2242314,
    "account_number": "1080621210",
    "bank_name": "Nedbank Limited",
    "bank_code": "Nedbank",
    "fullname": "Nelson Nelson",
    "created_at": "2026-09-22T13:22:14.000Z",
    "currency": "ZAR",
    "debit_currency": "XAF",
    "amount": 1000,
    "fee": 45,
    "status": "SUCCESSFUL",
    "reference": "STk_kfndl_PMCKDU_1",
    "meta": [
      {
        "first_name": "Nelson",
        "last_name": "Nelson",
        "email": "[email protected]",
        "mobile_number": "+27830000000",
        "sender": "Dotuns Fashion Limited"
      }
    ],
    "narration": "South Africa withdrawal",
    "approver": null,
    "complete_message": "Successful",
    "requires_approval": 0,
    "is_approved": 1
  }
}

Testing Transfers

Check the testing guide for mocking transfers in the test environment.


Did this page help you?