1. virtualaccount.creation.completed
This webhook is sent when a USD virtual account has been successfully provisioned after an initial PROCESSING state. It contains the full bank account details (account number, bank name, SWIFT code, etc.) that you can then share with your customer.
Payload Example
Response Breakdown
| Field | Type | Description |
|---|---|---|
event | string | The name of the event (virtualaccount.creation.completed). |
data.id | string | Unique identifier for the virtual account. |
data.reference | string | The unique reference supplied during account creation. |
data.accountName | string | The display name for the account. |
data.account.name | string | The registered name on the bank account. |
data.account.bankName | string | The name of the issuing bank. |
data.account.number | string | The virtual account number. |
data.account.sortCode | string | The bank sort code or routing identifier. |
data.account.swiftCode | string | The SWIFT/BIC code for international transfers. |
data.account.bankAddress | string | The physical address of the issuing bank. |
data.currency | string | The account currency (USD). |
data.country | string | The account country (US). |
data.status | string | The current status of the account (ACTIVE). |
data.created | string | ISO 8601 timestamp of account creation. |
2. virtualaccount.completed (Funding)
This webhook is sent when a USD virtual account has been successfully credited with funds. It provides details about the deposit, including fees and settlement information.
Payload Example
Response Breakdown (Funding)
Core Transaction Fields
| Field | Type | Description |
|---|---|---|
event | string | The name of the event (virtualaccount.completed). |
data.id | string | Unique identifier for the funding transaction. |
data.referenceNumber | string | Unique reference number assigned to the transaction. |
data.amount | string | The total gross amount of the transaction in USD. |
data.type | string | The type of transaction (FUNDING). |
data.state | string | The final state of the transaction (COMPLETED or FAILED). |
data.destination | string | The destination wallet (e.g., USD wallet). |
data.currency | string | The currency of the transaction (USD). |
Fee Breakdown
| Field | Type | Description |
|---|---|---|
data.fee.vat | string | The Value Added Tax portion of the fee. |
data.fee.stampDuty | string | The stamp duty portion of the fee. |
data.fee.base | string | The base processing fee. |
data.settlementAmount | string | The final amount settled after all fees. |
Customer Details
| Field | Type | Description |
|---|---|---|
data.customer.email | string | The customer’s email address. |
data.customer.reference | string | The unique reference for the virtual account. |
data.customer.account.number | string | The virtual account number that was funded. |
Handling These Webhooks
When you receive these webhooks, you should:- Verify the signature – Ensure the webhook is authentic.
- Check the state/status – Confirm it is
ACTIVEorCOMPLETED. - Match the reference – Use the
referencefield to link the event to your internal records. - Respond with 200 OK – Acknowledge receipt of the webhook to prevent retries.

