Skip to main content
Static virtual account operations trigger webhooks at different stages of the account lifecycle. Subscribe to these events to automate your internal workflows.

1. virtualaccount.creation.completed

Sent when a static virtual account has been successfully provisioned after an initial PROCESSING state. This applies to all currencies (NGN, MWK, USD).

Payload Example

{
  "event": "virtualaccount.creation.completed",
  "data": {
    "id": "8baf5a4a-b1b9-48fb-a492-b5041db9cfe1",
    "reference": "REF_8899562444KLLOPLTTPKNMTYLP900POLOPI",
    "accountName": "CHECK Ng Ltd",
    "account": {
      "name": "CHECK Ng Ltd",
      "bankName": "DBS Bank Limited",
      "number": "372385345434",
      "sortCode": "MOOLAHGO",
      "swiftCode": "DBSSSGSGXXX"
    },
    "currency": "USD",
    "country": "US",
    "status": "ACTIVE",
    "isPermanent": true,
    "created": "2025-12-18T09:57:44.127397385Z"
  }
}

Response Breakdown

FieldTypeDescription
eventstringThe name of the event (virtualaccount.creation.completed).
data.idstringUnique identifier for the virtual account.
data.referencestringThe unique reference supplied during account creation.
data.account.bankNamestringThe name of the issuing bank.
data.account.numberstringThe virtual account number.
data.statusstringThe current status of the account (ACTIVE).

2. virtualaccount.completed (Funding)

Sent when a virtual account (NGN, MWK, or USD) has been successfully credited with funds.

Payload Example

{
    "event": "virtualaccount.completed",
    "data": {
        "id": "866be9f6-1e3c-4083-87a5-xxxxxxxxxxxxx",
        "referenceNumber": "V6FUNZNGIV8BY",
        "amount": 200,
        "fee": {
            "vat": 2,
            "stampDuty": 2,
            "base": 2
        },
        "settlementAmount": 94.00,
        "type": "FUNDING",
        "state": "COMPLETED",
        "customer": {
            "email": "[email protected]",
            "reference": "00002601019915929890797xxxxxxx",
            "account": {
                "name": "Jane Doe",
                "bankName": "Mock Bank",
                "number": "0067100155"
            }
        },
        "currency": "NGN",
        "country": "NG",
        "source": {
            "bankName": "Mock Bank",
            "accountName": "Jane Doe",
            "accountNumber": "250784292986"
        },
        "created": "2023-08-16T23:12:28.256678",
        "processed": "2023-08-16T23:12:28.256678"
    }
}

Response Breakdown (Funding)

FieldTypeDescription
eventstringThe name of the event (virtualaccount.completed).
data.idstringUnique identifier for the transaction.
data.referenceNumberstringUnique reference number assigned to the transaction.
data.amountnumberThe total gross amount of the transaction.
data.statestringThe final state of the transaction (COMPLETED).
data.customer.referencestringThe unique reference for the customer’s virtual account.
data.customer.account.numberstringThe virtual account number that was funded.

Handling These Webhooks

When you receive these webhooks, you should:
  1. Verify the signature – Ensure the webhook is authentic.
  2. Check the state/status – Confirm it is ACTIVE or COMPLETED.
  3. Match the reference – Use the reference or customer.reference field.
  4. Respond with 200 OK – Acknowledge receipt.