GuidesAPI ReferenceChangelog
API Reference

Virtual Account Webhooks

Track creation, availability, deactivation, and deletion of additional virtual accounts.

Use these webhooks to keep your application's additional virtual accounts up to date. They tell you when an account becomes active, fails, is deactivated, or is deleted.

For example, after receiving virtual_account.active, retrieve the account to get the payment details you can show the customer. Follow deposit webhooks to find out when a payment arrives and is credited.

Events

EventMeaningPayload state
virtual_account.activeCreation succeeded, or an existing additional VA became active again.status: ACTIVE, deleted: false.
virtual_account.failedCreation failed, or the bank made an additional VA unavailable.status: FAILED, deleted: false.
virtual_account.deactiveAn additional VA became deactivated.status: DEACTIVE, deleted: false.
virtual_account.deletedAn additional VA was archived.deleted: true; status is normally DEACTIVE, but can remain FAILED for a failed creation.

These events apply to additional accounts. Default accounts and nickname changes do not send these notifications. Repeating an operation without changing the account's state does not create another event, though an existing event may be delivered more than once.

Payload fields

resource.id identifies the virtual account. Use data.external_id to match it to your creation request; these events do not include resource.idempotency_key.

Data fieldMeaning
customer_idCustomer UUID.
account_idPublic account ID of the owner.
virtual_account_idThe virtual account ID to match against your records.
assetVA currency.
nicknameNickname at the time of the event; empty when unset.
external_idCreation reference; empty when unset.
statusPublic VA state at the time of the event.
deletedWhether the VA has been archived.
revisionVA revision for this event. Use it to prevent an older delivery from overwriting newer state.
created_atVA creation time.
modified_atTime of the VA change represented by the event.

Verify the webhook signature and use X-Webhook-Event-Id to handle duplicate deliveries. Events can arrive out of order, so keep the highest revision you have seen for each virtual_account_id. Gaps between revision numbers are expected; some account changes do not send a webhook.

After a deleted event, remove the account from your payment screen. Keep its ID in your records for matching past deposits; the account itself can no longer be retrieved.

Active example

{
  "event_name": "virtual_account.active",
  "resource": {
    "type": "virtual_accounts",
    "id": "VA-7K3M-9X2R"
  },
  "data": {
    "customer_id": "14f20ebd-893b-11f0-b308-2eaa4f6974f2",
    "account_id": "BZ-ABCD-1234",
    "virtual_account_id": "VA-7K3M-9X2R",
    "asset": "USD",
    "nickname": "Subscriptions",
    "external_id": "550e8400-e29b-41d4-a716-446655440000",
    "status": "ACTIVE",
    "deleted": false,
    "revision": 2,
    "created_at": "2026-10-28T01:00:00.000Z",
    "modified_at": "2026-10-28T01:00:05.000Z"
  }
}

Failed example

{
  "event_name": "virtual_account.failed",
  "resource": {
    "type": "virtual_accounts",
    "id": "VA-7K3M-9X2R"
  },
  "data": {
    "customer_id": "14f20ebd-893b-11f0-b308-2eaa4f6974f2",
    "account_id": "BZ-ABCD-1234",
    "virtual_account_id": "VA-7K3M-9X2R",
    "asset": "USD",
    "nickname": "Subscriptions",
    "external_id": "550e8400-e29b-41d4-a716-446655440000",
    "status": "FAILED",
    "deleted": false,
    "revision": 3,
    "created_at": "2026-10-28T01:00:00.000Z",
    "modified_at": "2026-10-28T02:00:00.000Z"
  }
}

If you need help with a failed account, contact 1Money with its virtual_account_id and external_id. The event does not include a failure reason.

Deactivated example

{
  "event_name": "virtual_account.deactive",
  "resource": {
    "type": "virtual_accounts",
    "id": "VA-7K3M-9X2R"
  },
  "data": {
    "customer_id": "14f20ebd-893b-11f0-b308-2eaa4f6974f2",
    "account_id": "BZ-ABCD-1234",
    "virtual_account_id": "VA-7K3M-9X2R",
    "asset": "USD",
    "nickname": "Subscriptions",
    "external_id": "550e8400-e29b-41d4-a716-446655440000",
    "status": "DEACTIVE",
    "deleted": false,
    "revision": 4,
    "created_at": "2026-10-28T01:00:00.000Z",
    "modified_at": "2026-10-28T03:00:00.000Z"
  }
}

Deleted example

{
  "event_name": "virtual_account.deleted",
  "resource": {
    "type": "virtual_accounts",
    "id": "VA-7K3M-9X2R"
  },
  "data": {
    "customer_id": "14f20ebd-893b-11f0-b308-2eaa4f6974f2",
    "account_id": "BZ-ABCD-1234",
    "virtual_account_id": "VA-7K3M-9X2R",
    "asset": "USD",
    "nickname": "Subscriptions",
    "external_id": "550e8400-e29b-41d4-a716-446655440000",
    "status": "DEACTIVE",
    "deleted": true,
    "revision": 5,
    "created_at": "2026-10-28T01:00:00.000Z",
    "modified_at": "2026-10-28T04:00:00.000Z"
  }
}

Use deleted: true to identify a deleted account. Its status normally remains DEACTIVE, or FAILED for a failed creation. Past deposits and fees remain on record.

You can look up missed events and request a replay. To match an incoming payment to a virtual account, use the transaction_id from its deposit webhook to retrieve the transaction.