Egypt

Make EGP Cash PickUp Transfers.

❗️

This feature is only supported for IMTO merchants. Kindly submit a request to access this feature on your account.


Prerequisites

  1. Complete your KYC verification and confirm that your account is approved for transactions.
  2. Whitelist your server IP address to prevent security errors.
  3. Fund your EGP balance. You can do this by:
    • Directly funding via collections, this method allows funding up to the equivalent of $1,000.
    • Indirect funding via FX conversion from a different currency balance (i.e., wallet-to-wallet transfers).

📘

Transfer Settlement Schedule

Transfers are processed Sunday to Thursday, 9 AM to 3 PM (GMT+2). Requests made outside these hours are handled the next working period. Funds settle 24-48 hours after processing.


Payout Flow

Follow these steps to initiate a transfer to an Egyptian Bank Account:

  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. Set the meta.is_cash_pickup parameter to true.
  4. Send your API request with the required parameters and any other custom data.
  5. Verify the payout status either via webhooks or with the query status endpoint.

Step 1: Collect Customer and Beneficiary information

You'll need the correct information to initiate the transfer. Collect the sender and beneficiary's information, see the list of mandatory and optional parameters below:

ParameterDescriptionFormatExampleisRequired
account_numberThe beneficiary's bank account number.StringEGPWALLETSYes
account_bankThe beneficiary's bank code. Query the bank endpoint for a comprehensive list of supported banksString“0690000032”Yes
amountThe transfer amount.String"2000"Yes
beneficiary_nameThe full name of the transfer beneficiary.String“Example User”Yes
narrationThe transfer's description.String"Test Payment"No
currencyThe transfer currency. This must be EGP.StringEGPYes
metaAdditional information needed to process the transfer.ObjectN/AYes
meta.beneficiary_addressThe Beneficiary's Address.String“24 King William Street London”No
meta.beneficiary_countryThe Beneficiary's country. This should be EG.StringEGNo
meta.senderThe Sender's full name.StringExample UserNo
meta.emailThe Sender's email address.String'[email protected]'No
meta.sender_cityThe Sender's cityString"Lagos"Yes
meta.sender_mobile_NumberThe Sender's mobile number.String“01993003333”No
meta.sender_date_of_birthThe Sender's date of birth.StringYes
meta.sender_id_numberThe Sender's ID number.String"2231aaa"Yes
meta.sender_id_typeThe Sender's ID type.String"01"Yes
meta.sender_id_expiryThe Sender's ID expiration date.String“2026-09-23”Yes
meta.is_cash_pickupSpecifies if this is a cash pickup transfer. This must be set to true.StringtrueNo
meta.transfer_purposeA brief description of the purpose for the transfer.String"Medical Bills"Yes
meta.beneficiary_mobile_numberThe Beneficiary's Mobile number.String"01000410066"Yes

Step 2: Retrieve the recipient's bank code

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 the Customer

Send your payment request with all the needed transfer information to the transfers endpoint to initiate the payout.

{
    "account_number": "0690000032",
    "account_bank": "EGPWALLETS",
    "narration": "test",
    "amount": 2000,
    "currency": "EGP",
    "beneficiary_name": "john mike",
    "meta": [
        {
            "beneficiary_address": "24 King William Street London",
            "sender_city": "kakakwa",
            "is_cash_pickup": true,
            "beneficiary_country": "EG",
            "sender_id_number": "2231aaa",
            "sender_id_type": "01",
            "sender": "test",
            "email": "[email protected]",
            "sender_id_expiry": "2026-09-23",
            "sender_mobile_Number": "01993003333",
            "sender_date_of_birth": "2002-09-23"
        }
    ]
}

You'll get a response like this:

{
    "status": "success",
    "message": "Transfer Queued Successfully",
    "data": {
        "id": 326,
        "account_number": "0690000032",
        "bank_code": "EGPWALLETS",
        "full_name": "JOHN MIKE",
        "created_at": "2025-02-24T15:35:35.000Z",
        "currency": "EGP",
        "amount": 2000,
        "fee": 45,
        "status": "NEW",
        "reference": "45ecccaf91421bcc",
        "meta": [
            {
                "BeneficiaryAddress": "24 King William Street London",
                "SenderCity": "kakakwa",
                "IsCashPickup": false,
                "SenderIdNumber": "2231aaa",
                "SenderIdType": "PASSPORT",
                "Sender": "test",
                "SenderIdExpiry": "23/09/2026",
                "SenderDateOfBirth": "23/09/2002",
                "SenderAddress": "TESt 40",
                "SenderMobileNumber": "08110745134",
                "SenderNationality": "NG",
                "SenderCountry": "NG",
                "SenderEmailAddress": null,
                "MerchantName": "Daniel ltd",
                "BeneficiaryName": "john mike",
                "TransferType": "MOBILE",
                "AgentCode": "1",
                "AgentLocationCode": "1",
                "RouteCode": "BDC"
            }
        ],
        "narration": "test",
        "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_urlwhen 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.
{
  "event.type": "Transfer",
  "transfer": {
    "id": 641173,
    "account_number": "0690000040",
    "bank_code": "97964560",
    "fullname": "NWABALI S",
    "date_created": "2024-07-29T13:00:30.000Z",
    "currency": "EGP",
    "debit_currency": "NGN",
    "amount": 100000,
    "fee": 45,
    "status": "SUCCESSFUL",
    "reference": "47b4b1f71065196a",
    "meta": null,
    "narration": "SAMPLE BDC TRANSFER",
    "approver": null,
    "complete_message": "Successful",
    "requires_approval": 0,
    "is_approved": 1,
    "bank_name": "First Discount House Limited"
  }
}

{
	"status": "success",
	"message": "Transfer fetched",
	"data": {
		"id": 641173,
		"account_number": "0690000040",
		"bank_code": "97964560",
		"full_name": "NWABALI S",
		"created_at": "2024-07-29T11:36:14.000Z",
		"currency": "EGP",
		"debit_currency": "NGN",
		"amount": 100000,
		"fee": 45,
		"status": "SUCCESSFUL",
		"reference": "47b4b1f71065196a",
		"meta": [
			{
				"sender": "Sample User"
			}
		],
		"narration": "Payment for goods",
		"approver": null,
		"complete_message": "Successful",
		"requires_approval": 0,
		"is_approved": 1,
		"bank_name": "First Discount House Limited"
	}
}

Testing Transfers

Check our testing guide for details on testing transfers.