Skip to main content
This webhook is sent when a virtual account has been successfully created. For asynchronous corridors like USD, this webhook is the primary way to receive the permanent account number and SWIFT/routing details. For other corridors like NGN or MWK, this webhook is sent in addition to the API response.

Payload Example (USD)

{
  "event": "virtualaccount.creation.completed",
  "data": {
    "id": "0bfc9062-40a6-4810-8b05-bac860711257",
    "firstName": "Zola",
    "lastName": "Keebler",
    "email": "Amelia_Kuhn97@yahoo.com",
    "phoneNumber": "433-545-9366",
    "reference": "REF_NVDBFB5HEGSA",
    "accountName": "Breitenberg Becker",
    "gender": "M",
    "dateOfBirth": "1980-10-10",
    "nationality": "NG",
    "idType": "PASSPORT",
    "idNumber": "U******1",
    "address": "0887 Nicolas Locks",
    "city": "Fort Collins",
    "postalCode": "100001",
    "account": {
      "name": "Breitenberg Becker",
      "bankName": "DBS Bank Limited",
      "sortCode": "MOOLAHGO",
      "number": "820219574504",
      "swiftCode": "DBSSSGSGXXX",
      "bankAddress": "12 Marina Boulevard, DBS Asia Central Marina Bay Financial Tower"
    },
    "status": "ACTIVE",
    "currency": "USD",
    "country": "US",
    "isPermanent": true,
    "company": {
      "registrationNumber": "NDBUVAP1",
      "registrationCountry": "NG",
      "registrationDate": "2024-10-10"
    },
    "created": "2026-01-28T05:08:15.649835300Z"
  }
}

Payload Breakdown

FieldTypeDescription
eventstringThe name of the event (virtualaccount.creation.completed).
data.idstringUnique identifier for the virtual account resource.
data.firstNamestringAuthorized representative’s first name.
data.lastNamestringAuthorized representative’s last name.
data.emailstringContact email tied to the account.
data.phoneNumberstringPhone number stored for the customer.
data.referencestringThe unique reference you provided during creation.
data.accountNamestringDisplay name for the account (Business Name).
data.genderstringGender of the representative (M or F).
data.dateOfBirthstringDate of birth (YYYY-MM-DD).
data.nationalitystring2-letter ISO country code of nationality.
data.idTypestringType of identification provided.
data.idNumberstringMasked identification number.
data.addressstringStreet address.
data.citystringCity or Town.
data.postalCodestringPostal/ZIP code.
data.account.namestringThe name on the bank account.
data.account.bankNamestringThe name of the issuing bank.
data.account.numberstringThe permanent bank account number.
data.account.sortCodestringThe bank sort code or routing number.
data.account.swiftCodestringThe SWIFT/BIC code (primarily for USD accounts).
data.account.bankAddressstringThe physical address of the issuing bank branch.
data.statusstringThe current status of the account (e.g., ACTIVE).
data.currencystringThe currency of the account (e.g., USD, NGN, MWK).
data.countrystring2-letter ISO country code of the account.
data.isPermanentbooleanIndicates if the account is permanent.
data.companyobjectCompany registration details.
data.company.registrationNumberstringBusiness registration number.
data.company.registrationCountrystringCountry where company is registered.
data.company.registrationDatestringDate of company registration.
data.createdstringISO 8601 timestamp of when the account was created.

Handling the Webhook

When you receive this webhook:
  1. Verify the signature – Ensure the webhook is authentic using your webhook secret.
  2. Match the reference – Use data.reference to link these account details to the specific request in your system.
  3. Notify the user – Share the data.account.number and other relevant details with your customer so they can begin funding their account.
NOTE: For virtualaccount.failed, the state will be “FAILED”.