Egyptian Transfers (EGP)

Learn how to transfer money to Egyptian bank accounts and wallets.

📘

Getting Started

We recommend checking out the introductory section to understand the basics of making transfers first.

Flutterwave helps you to process transfers into Egypt. Whether you choose to transfer to a bank account or wallet, we have you covered. This section guides you on how to make EGP transfers.

Prerequisites

  1. Complete your profile and KYC.
  2. Fund your EGP balance either by:
    • Direct funding your balance.
    • Or Indirect funding: moving funds from a different balance to your EGP balance.

Supported Transfer Types

There are three (3) supported transfer types for EGP Payouts:

  1. Transfers to Bank Accounts
  2. Cash pickup Transfers
  3. Wallet Transfers

Transfers to Bank Accounts

Bank transfers are supported for over 40 different banks (query the banks endpoint for the full list of supported banks). You can configure this payout to facilitate your single or recurring transfer use cases.

🚧

Transfer Settlement Schedule

Transfers are exclusively handled during operational hours, which run from 9am-3pm (GMT+2), Sundays through Thursdays. Requests made outside these hours are processed in the next working period. Funds are settled 24-48 hours after processing.

Cash Pickup Transfers

Cash pickup transfer involves users physically receiving cash from a convenient pickup location (usually an agent). Unlike bank account transfers, These are instant and can be redeemed immediately.

When making a cash pickup transfer, you need to generate a voucher and redeem it with a Fawry Plus agent. We return the voucher in the response of the initiate transfer call.


Mobile Wallet Transfers

Wallet transfers support payment to wallets like QNB, Orange Cash, Qahera Cash, and 23 other wallets in Egypt (see full wallet coverage ). Like Bank transfers, settlement for these transfers occurs 24-48 hours after processing.


Payout Workflow

Follow these steps to complete a general EGP payout:

  1. Collect the customer's (payout initiator) and beneficiary's information.
  2. Query the bank endpoint to get the corresponding bank codes for the transfer.
  3. Send your API request with the required parameters and any other custom data.
  4. Verify the payout status either via webhooks or with the query status endpoint.

Step 1: Collect Customer and Beneficiary Information

You need the right information to make the transfer. Collect your customer's information as well as the information of the transfer beneficiary. Here is a full list of requirements needed to initiate your transfer

ParameterDescriptionFormatExampleisRequired
account_numberThe recipient's account number. For cash pick-up and wallet transfers, it should be the recipient's mobile number.string100035129997Yes
beneficiary_nameThe name of the transfer recipientstringMichael WilsonYes
beneficiary_addressThe address of the recipientstring"333, Fremont street, San Francisco"Yes
transfer_purposeThis code represents the reason for making this transfer. See full list of supported purposes here.

Step 2: Confirm your Balance and Bank Code

📘

Wallet and Cash Pickup Codes

Pass FAWRY and EGPWALLETS as the bank code (account_bank) for Cash pickup and Wallet transfers respectively.

Query the bank's endpoint to get the recipient's bank code. Use this sample as a guide to fetch a bank code.

curl --location 'https://api.flutterwave.com/v3/banks/EG' \
--header 'Authorization: Bearer YOUR_SECRET_KEY'

Step 3: Payout to your Customer

Send your customer and beneficiary information in your request to the transfer endpoint. Transfers are scheduled for processing immediately, and you'll get a webhook after the transfer is completed.

Here is a list of information that should be added to the customer and beneficiary's information in your request.

ParameterDescriptionFormatExampleisRequired
account_bankThe recipient's bank codestringCIBYes
amountThe transfer amountint32100Yes
narrationTransfer notestringCross-border Transfer to Egyptian Bank AccountNo
currencySpecific currency for the transfer. Expected value: EGP.stringEGPNo
referenceA unique identifier for the transfer.string03No

curl --location 'https://api.flutterwave.com/v3/transfers' \
--header 'Authorization: Bearer YOUR_SECRET_KEY' \
--header 'Content-Type: application/json' \
--data '{
   "account_number":"100035129997",
   "account_bank":"CIB",
   "narration":"Cross-border Transfer to Egyptian Bank Account",
   "amount":10,
   "reference":"test_121x_PMCKDU_1",
   "currency":"EGP",
   "beneficiary_name":"Michael Rowland",
   "meta":[
      {
         "sender":"Cornelius",
         "sender_id_expiry":"2025-12-31",
         "sender_id_number":"123454",
         "sender_date_of_birth":"1999-01-01",
         "sender_id_type":"01",
         "beneficiary_address":"333, Fremont Street, San Francisco",
         "beneficiary_id_number":"ID5467833322222",
         "is_cash_pickup":false,
         "transfer_purpose":"03"
      }
   ]
}'
curl --location 'https://api.flutterwave.com/v3/transfers' \
--header 'Authorization: Bearer YOUR_SECRET_KEY' \
--header 'Content-Type: application/json' \
--data '{
    "account_bank": "fawry",
    "account_number": "00000000000",
    "narration": "Cross-border Fawry Transfer",
    "amount": 12,
    "reference": "test_321x_PMCKDU_1",
    "currency": "EGP",
    "beneficiary_name": "Mo’men Alaa",
    "meta": [{
        "is_cash_pickup": true
    }]
}'
curl --location 'https://api.flutterwave.com/v3/transfers' \
--header 'Authorization: Bearer YOUR_SECRET_KEY' \
--header 'Content-Type: application/json' \
--data '{
   "account_bank":"EGPWALLETS",
   "account_number":"01068698386",
   "amount":300,
   "reference":"test_403x_PMCKDU_1",
   "beneficiary_name":"Chijioke Okorji",
   "narration":"Cross-border Transfer to Egyptian Wallet.",
   "currency":"EGP",
   "meta":[
      {
         "sender":"Emmanuel V",
         "beneficiary_mobile_number":"06703933333",
         "sender_id_expiry":"2026-02-02",
         "sender_date_of_birth":"1997-01-01",
         "sender_id_number":"PAS23433389011",
         "sender_id_type":"21",
         "is_cash_pickup":false,
         "beneficiary_address":"333, Fremont Street, San Francisco.",
         "transfer_purpose":"13"
      }
   ]
}'

The response should look like this:

{
	"status": "success",
	"message": "Transfer Queued Successfully",
	"data": {
		"id": 617145,
		"account_number": "100035129997",
		"bank_code": "CIB",
		"full_name": "Michael Rowland",
		"created_at": "2024-02-19T14:35:28.000Z",
		"currency": "EGP",
		"amount": 10,
		"fee": 45,
		"status": "NEW",
		"reference": "test_121x_PMCKDU_1",
		"meta": [
			{
				"Sender": "Cornelius",
				"SenderIdExpiry": "31/12/2025",
				"SenderIdNumber": "123454",
				"SenderDateOfBirth": "01/01/1999",
				"SenderIdType": "PASSPORT",
				"BeneficiaryAddress": "333, Fremont Street, San Francisco",
				"BeneficiaryIdNumber": "ID5467833322222",
				"IsCashPickup": false,
				"TransferPurpose": "TRANSFER TO OWN FOREIGN BANK AC",
				"BeneficiaryCountry": "EG",
				"SenderAddress": "No 8b Providence street lekki Lagos",
				"SenderMobileNumber": "0800000000",
				"SenderCountry": "NG",
				"SenderDob": "01/01/1999",
				"SenderEmailAddress": "[email protected]",
				"MerchantName": "Test Merchant",
				"BeneficiaryName": "Michael Rowland"
			}
		],
		"narration": "Cross-border Transfer to Egyptian Bank Account",
		"complete_message": "",
		"requires_approval": 0,
		"is_approved": 1,
		"bank_name": "FA-BANK"
	}
}
{
	"status": "success",
	"message": "Transfer Queued Successfully",
	"data": {
		"id": 222660,
		"account_number": "01068698386",
		"bank_code": "FAWRY",
		"full_name": "Mo’men Alaa",
		"created_at": "2024-02-20T18:18:06.000Z",
		"currency": "EGP",
		"amount": 12,
		"fee": 2.14,
		"status": "NEW",
		"reference": "test_322x_PMCKDU_1",
		"meta": [
			{
				"IsCashPickup": true,
				"BeneficiaryName": "Mo’men Alaa"
			}
		],
		"narration": "Cross-border Fawry Transfer",
		"complete_message": "",
		"requires_approval": 0,
		"is_approved": 1,
		"bank_name": "FA-BANK"
	}
}
{
	"status": "success",
	"message": "Transfer Queued Successfully",
	"data": {
		"id": 617403,
		"account_number": "01068698386",
		"bank_code": "MOBILE",
		"full_name": "Chijioke Okorji",
		"created_at": "2024-02-21T16:29:59.000Z",
		"currency": "EGP",
		"amount": 300,
		"fee": 45,
		"status": "NEW",
		"reference": "test_403x_PMCKDU_1",
		"meta": [
			{
				"Sender": "Emmanuel V",
				"BeneficiaryMobileNumber": "06703933333",
				"SenderIdExpiry": "02/02/2026",
				"SenderDateOfBirth": "01/01/1999",
				"SenderIdNumber": "PAS23433389011",
				"SenderIdType": "Business registration / licence",
				"IsCashPickup": false,
				"BeneficiaryAddress": "333, Fremont Street, San Francisco.",
				"TransferPurpose": "FOR MEDICAL TREATMENT",
				"BeneficiaryCountry": "EG",
				"SenderAddress": "No 8b Providence street lekki Lagos",
				"SenderMobileNumber": "0800000000",
				"SenderCountry": "NG",
				"SenderDob": "01/01/1999",
				"SenderEmailAddress": "[email protected]",
				"MerchantName": "Test Merchant",
				"BeneficiaryName": "Chijioke Okorji",
				"BeneficiaryIdNumber": null,
				"TransferType": "MOBILE"
			}
		],
		"narration": "Cross-border Transfer to Egyptian Wallet.",
		"complete_message": "",
		"requires_approval": 0,
		"is_approved": 1,
		"bank_name": "FA-BANK"
	}
}

Step 4: Verify the Payout Status

You have different options to verify the transfer status. Here are some quick ways to verify your status:

  • If you have webhooks enabled, we'll call your webhook URL with the transfer details when the transfer is completed or fails.
  • If you specify a callback_url when creating the transfer, we'll call that URL with the transfer details when the transfer is completed or fails.
  • You can manually check the current status of the transfer by polling the get transfer endpoint with the transfer ID.

Testing your Integration

Check our testing helpers to get mock data and resources to test your integration. If you need any support with your integration, kindly contact the developer support team.