EGP VIrtual Accounts
Learn how to create and manage a Egyptian Virtual Account.
Feature Availability
This feature is only available upon request. Please email us at [email protected] to request access.
Virtual accounts are generated bank account details (account number and bank name) that allow Flutterwave merchants to receive EGP payments from customers via direct bank transfers. In EGP, only the Dynamic Virtual Account is currently available.
We recommend starting with the introduction to Virtual Accounts to understand the fundamentals before proceeding.
Creating a Dynamic Virtual Account
To create a dynamic virtual account, send a request to the create virtual account endpoint, specifying the following:
amount
: The transaction amount.currency
: The currency set to EGP.customer_account_number
: This is the customer’s account number, which is required for payment confirmation.firstname
: The first name associated with the customer’s accountlastname
: The last name associated with the customer’s accountemail
: The customer’s email address.
Check out the Virtual Account API reference for the full list of supported parameters.
curl --request POST 'https://api.flutterwave.com/v3/virtual-account-numbers' \
--header 'Authorization: Bearer YOUR_SECRET_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"email":"[email protected]",
"tx_ref”:”your_tx_ref",
"amount":"1",
"currency":"EGP",
"firstname":"James",
"lastname":"Bond",
"customer_account_number":"123456789102"
}'
You'll get a response similar to this:
{
"status": "success",
"message": "Virtual account created",
"data": {
"response_code": "02",
"response_message": "Transaction in progress",
"flw_ref": "MockFLWRef-1752016209712",
"order_ref": "URF_1752016209174_2696735",
"account_number": "10340490288",
"account_status": "active",
"frequency": 1,
"bank_name": "NBE",
"created_at": "2025-07-08 23:10:09",
"expiry_date": "2025-07-09 00:10:09",
"note": "Mock note",
"amount": "1500.00",
"customer_ref": "ECR3273952725"
}
}
The response will include a response_code
of 02
and a response_message
of "Transaction in progress"
, indicating that the virtual account has been successfully created and is ready to receive payments. The response body will also contain the bank name, account number, and customer reference. You can display these details to your customer to facilitate payment via bank transfer.
Payment Reference Requirement
The
customer_ref
must be included by the customer in the narration when making a bank transfer from their banking application. This is required to ensure accurate and timely payment confirmation.
Customers are expected to complete the payment before the expiry_date
of the virtual account. Once the customer completes a payment, we will send a webhook to notify you of the transaction status.
Handling Underpayments and Overpayments
When a customer sends less than the expected amount (an underpayment), the transaction fails. In contrast, if the customer sends more than the required amount (an overpayment), the transaction will succeed. To avoid any issues with transaction status, customers should ensure that they send the exact amount required.
Virtual Account Webhooks
Whenever a bank transfer is made to the created virtual account, we'll send you a webhook notification that looks like this:
{
"event": "charge.completed",
"data": {
"id": 674787047,
"tx_ref": "mckdffdrSddhf",
"flw_ref": "3722573376721752248194237",
"device_fingerprint": "N/A",
"amount": 100,
"currency": "EGP",
"charged_amount": 102,
"app_fee": 0,
"merchant_fee": 0,
"processor_response": "success",
"auth_model": "AUTH",
"ip": "102.89.68.167",
"narration": "Wave EGP Pool Account",
"status": "successful",
"payment_type": "bank_transfer",
"created_at": "2025-07-11T15:36:40.000Z",
"account_id": 1091430,
"customer": {
"id": 585248779,
"name": "Doe John",
"phone_number": "08012345678",
"email": "[email protected]",
"created_at": "2025-07-11T15:36:32.000Z"
}
}
}
Now, your webhook handler can handle the event and credit the customer's wallet. For help setting up webhooks, see our guide on webhooks.
Updated 3 days ago