Available events
| Event | Description | Default (On / Off) |
|---|---|---|
| collection_account.creation_succeeded | Triggered when the status is enabled | On |
| collection_account.creation_under_approval_hold | Enablement request is held pending approval | Off |
| collection_account.creation_requires_action | Enablement request needs input from you | On |
| collection_account.creation_failed | Enablement request failed | On |
| collection_account.creation_cancelled | Enablement request was cancelled | On |
| collection_account.disablement_succeeded | Triggered when the status is disabled | On |
| collection_account.disablement_under_processing | Disablement request has started processing | Off |
| collection_account.disablement_requires_action | Disablement request needs input from you | On |
| collection_account.disablement_failed | Disablement request failed | On |
| collection_account.disablement_cancelled | Disablement request was cancelled | On |
| collection_account.reenable_succeeded | Account is enabled again | On |
| collection_account.reenable_under_processing | Re-enablement request has started processing | Off |
| collection_account.reenable_failed | Re-enablement request failed | On |
| collection_account.reenable_cancelled | Re-enablement request was cancelled | On |
Webhook payload
Every collection account event has the same body.data is the collection account, in the same shape as the Get Collection Account response. The request that triggered the event appears in data.requests.
The account and the request have separate statuses.
data.status is always the account status (enabled or disabled). To see what happened to a request, read status on the matching entry in data.requests.| Field | Sub-fields | Type | Description |
|---|---|---|---|
| type | string | The event type, for example collection_account.creation_succeeded | |
| id | string | Unique ID of the event, prefixed evt_ | |
| object | string | String representing the object’s type. It is event here | |
| created_at | timestamp | Timestamp at which the event was created | |
| data | json | The collection account | |
| id | string | ID of the collection account, prefixed cva_ (virtual account) or cwa_ (wallet) | |
| object | string | Always collection_account. Use type for the account type | |
| type | string | Type of collection account: virtual_account or wallet | |
| payment_method_type | string | Payment method type of the account. Refer List | |
| status | string | Account status: enabled or disabled | |
| status_description | string | Description of the account status, for example the disablement reason. Empty when there is none | |
| on_behalf_of | string | ID of the entity the account is configured on behalf of, prefixed ent_. Empty for direct accounts | |
| entity_id | string | Same value as on_behalf_of. Sent only for on-behalf-of accounts | |
| alias | string | Nickname you gave the account | |
| country | string | Country in which the account is opened. Empty for wallets | |
| description | string | Use case description for the account | |
| balance_transaction | string | ID of the balance transaction linked to the account. Empty when there is none | |
| currencies | array of string | Currencies the account is enabled for, uppercase, ISO 4217. Empty ([]) when the account is disabled | |
| currency_status | json | Every currency on the account mapped to its status, for example {"USD": "enabled"} | |
| ftn | array of object | Fund transfer networks the account can receive on. Each entry has name, additional_information, and transfer_limit (currency, min_limit, max_limit). Empty ([]) for wallets and for virtual accounts without a local rail | |
| fee_details | json | Pricing for the account: one_time_setup_fee, maintenance_fee (both in the smallest unit of USD), and maintenance_fee_frequency. Omitted when no pricing applies | |
| is_reenablement_supported | boolean | Whether the account can be re-enabled after it is disabled | |
| metadata | json | Key-value pairs attached to the collection account | |
| virtual_account | json | Bank details. Present for virtual accounts only. See virtual_account | |
| wallet | json | Wallet details: type and deposit_address. Present for wallets only | |
| requests | array of object | Every enablement, disablement, and re-enablement request on the account, newest first. See requests | |
| failure_reason | string | Reason the triggering request failed. Present on *_failed events only. The same value is in requests[].failure_reason | |
| created_at | timestamp | Account creation timestamp | |
| updated_at | timestamp | Account last-updated timestamp |
requests
Each entry indata.requests describes one request on the account.
| Field | Type | Description |
|---|---|---|
| id | string | ID of the request, prefixed cvar_ (virtual account) or cwar_ (wallet) |
| object | string | Always collection_account_request |
| collection_account_id | string | ID of the collection account the request belongs to |
| type | string | enable or disable. A re-enablement is an enable request |
| status | string | Request status: processing, approval_hold, requires_action, succeeded, failed, or cancelled |
| status_description | string | Description of the request status. Empty when there is none |
| failure_reason | string | Human-readable reason the request failed. Sent only when status is failed |
| failure_code | string | Machine-readable failure code. Sent only when status is failed |
| disablement_reason | string | The reason supplied when the request was raised. Sent on disablement and re-enablement requests |
| entity_id | string | ID of the entity the request was raised for, prefixed ent_. Sent only for on-behalf-of requests |
| alias | string | Nickname supplied with the request |
| country | string | Country supplied with the request |
| currencies | array of string | Currencies resolved for the request, ISO 4217 |
| requested_currencies | array of string | Currencies you asked for in the request, ISO 4217 |
| created_at | timestamp | Request creation timestamp |
| updated_at | timestamp | Request last-updated timestamp |
data.requests reflects the account when Tazapay sends the webhook, not when the event occurred. If a webhook is delayed or retried, a request’s status can be later than the event type suggests. To get the latest state, call Get Collection Account.
Webhook timestamps use RFC 3339, for example
2026-09-16T10:45:28.936281Z. The top-level created_at and updated_at on the Get Collection Account response use a different format. Parse each source with its own format.Sample Events
collection_account.creation_succeeded
{
"type": "collection_account.creation_succeeded",
"id": "evt_dal79979fmtfu0md56b0",
"object": "event",
"created_at": "2026-09-16T10:51:16.720338281Z",
"data": {
"metadata": {},
"virtual_account": {
"account_holder_name": "AccountName",
"account_number": "AccountNumber",
"bank_address": {
"address_line_1": "address_line_1",
"address_line_2": "address_line_2",
"city": "address_city",
"country": "address_country",
"postal_code": "123456",
"state": "address_state"
},
"bank_codes": {
"bank_code": "sample_bank_code",
"bsb_code": "sample_bsb_code",
"swift_code": "sample_swift_code"
},
"bank_branch": "sample_bank_branch",
"bank_name": "sample_bank_name",
"iban": "AccountIBAN"
},
"fee_details": {
"maintenance_fee_frequency": "monthly",
"one_time_setup_fee": 10,
"maintenance_fee": 10
},
"created_at": "2026-09-16T10:45:28.936281Z",
"updated_at": "2026-09-16T10:51:16.38561Z",
"id": "cva_dal76i2bfsb1k0drq6n0",
"object": "collection_account",
"type": "virtual_account",
"payment_method_type": "wire_transfer",
"status": "enabled",
"status_description": "",
"on_behalf_of": "",
"alias": "collection_account_alias",
"country": "SG",
"description": "sample_description",
"balance_transaction": "",
"currencies": [
"CNH",
"HKD",
"JPY",
"EUR",
"GBP",
"DKK",
"AUD",
"CAD",
"NZD",
"USD",
"SGD",
"SEK",
"NOK",
"CHF"
],
"currency_status": {
"AUD": "enabled",
"CAD": "enabled",
"CHF": "enabled",
"CNH": "enabled",
"DKK": "enabled",
"EUR": "enabled",
"GBP": "enabled",
"HKD": "enabled",
"JPY": "enabled",
"NOK": "enabled",
"NZD": "enabled",
"SEK": "enabled",
"SGD": "enabled",
"USD": "enabled"
},
"ftn": [],
"requests": [
{
"id": "cvar_dal76i2bfsb1k0drq6mg",
"object": "collection_account_request",
"collection_account_id": "cva_dal76i2bfsb1k0drq6n0",
"type": "enable",
"status": "succeeded",
"status_description": "",
"alias": "collection_account_alias",
"country": "SG",
"created_at": "2026-09-16T10:45:28Z",
"updated_at": "2026-09-16T10:51:16Z",
"currencies": [
"AUD",
"CAD",
"CHF",
"CNH",
"DKK",
"EUR",
"GBP",
"HKD",
"JPY",
"NOK",
"NZD",
"SEK",
"SGD",
"USD"
],
"requested_currencies": [
"AUD",
"CAD",
"CHF",
"CNH",
"DKK",
"EUR",
"GBP",
"HKD",
"JPY",
"NOK",
"NZD",
"SEK",
"SGD",
"USD"
]
}
],
"is_reenablement_supported": false
}
}
collection_account.disablement_succeeded
The account isdisabled, so currencies is empty and every currency in currency_status is disabled. The disablement request is the first entry in requests.
{
"type": "collection_account.disablement_succeeded",
"id": "evt_dal7c1k9fmtfu0md57a0",
"object": "event",
"created_at": "2026-09-17T08:12:40.118204931Z",
"data": {
"metadata": {},
"virtual_account": {
"account_holder_name": "AccountName",
"account_number": "AccountNumber",
"bank_address": {
"address_line_1": "address_line_1",
"address_line_2": "address_line_2",
"city": "address_city",
"country": "address_country",
"postal_code": "123456",
"state": "address_state"
},
"bank_codes": {
"bank_code": "sample_bank_code",
"swift_code": "sample_swift_code"
},
"bank_branch": "sample_bank_branch",
"bank_name": "sample_bank_name",
"iban": "AccountIBAN"
},
"fee_details": {
"maintenance_fee_frequency": "monthly",
"one_time_setup_fee": 10,
"maintenance_fee": 10
},
"created_at": "2026-09-16T10:45:28.936281Z",
"updated_at": "2026-09-17T08:12:39.90412Z",
"id": "cva_dal76i2bfsb1k0drq6n0",
"object": "collection_account",
"type": "virtual_account",
"payment_method_type": "wire_transfer",
"status": "disabled",
"status_description": "sample_disablement_reason",
"on_behalf_of": "",
"alias": "collection_account_alias",
"country": "SG",
"description": "sample_description",
"balance_transaction": "",
"currencies": [],
"currency_status": {
"SGD": "disabled",
"USD": "disabled"
},
"ftn": [],
"requests": [
{
"id": "cvar_dal7bq2bfsb1k0drq7p0",
"object": "collection_account_request",
"collection_account_id": "cva_dal76i2bfsb1k0drq6n0",
"type": "disable",
"status": "succeeded",
"status_description": "",
"disablement_reason": "sample_disablement_reason",
"alias": "collection_account_alias",
"country": "SG",
"created_at": "2026-09-17T08:10:02Z",
"updated_at": "2026-09-17T08:12:39Z",
"currencies": ["SGD", "USD"],
"requested_currencies": ["SGD", "USD"]
},
{
"id": "cvar_dal76i2bfsb1k0drq6mg",
"object": "collection_account_request",
"collection_account_id": "cva_dal76i2bfsb1k0drq6n0",
"type": "enable",
"status": "succeeded",
"status_description": "",
"alias": "collection_account_alias",
"country": "SG",
"created_at": "2026-09-16T10:45:28Z",
"updated_at": "2026-09-16T10:51:16Z",
"currencies": ["SGD", "USD"],
"requested_currencies": ["SGD", "USD"]
}
],
"is_reenablement_supported": true
}
}
Status values by event
These events use the same body as described in Webhook payload.data is the collection account, data.status is the account status, and the request that triggered the event is in data.requests.
The table lists the values you can expect on each event. “Request status” is the status of the triggering entry in data.requests.
| Event | Account status | Request type | Request status |
|---|---|---|---|
collection_account.creation_under_approval_hold | disabled | enable | approval_hold |
collection_account.creation_requires_action | disabled | enable | requires_action |
collection_account.creation_failed | disabled | enable | failed |
collection_account.creation_cancelled | disabled | enable | cancelled |
collection_account.disablement_under_processing | enabled | disable | processing |
collection_account.disablement_requires_action | enabled | disable | requires_action |
collection_account.disablement_failed | enabled | disable | failed |
collection_account.disablement_cancelled | enabled | disable | cancelled |
collection_account.reenable_under_processing | disabled | enable | processing |
collection_account.reenable_failed | disabled | enable | failed |
collection_account.reenable_cancelled | disabled | enable | cancelled |
collection_account.reenable_succeeded | enabled | enable | succeeded |
On the
disablement_* events other than disablement_succeeded, the account is still enabled and still accepts funds. Do not treat collection_account.disablement_failed as a change in account status.collection_account.disablement_failed
This sample shows a failed request. The account staysenabled. The failure appears in the top-level data.failure_reason and on the disablement entry in data.requests.
{
"type": "collection_account.disablement_failed",
"id": "evt_dal7e3s9fmtfu0md58c0",
"object": "event",
"created_at": "2026-09-17T09:02:11.530441872Z",
"data": {
"metadata": {},
"virtual_account": {
"account_holder_name": "AccountName",
"account_number": "AccountNumber",
"bank_address": {
"address_line_1": "address_line_1",
"address_line_2": "address_line_2",
"city": "address_city",
"country": "address_country",
"postal_code": "123456",
"state": "address_state"
},
"bank_codes": {
"bank_code": "sample_bank_code",
"swift_code": "sample_swift_code"
},
"bank_branch": "sample_bank_branch",
"bank_name": "sample_bank_name",
"iban": "AccountIBAN"
},
"fee_details": {
"maintenance_fee_frequency": "monthly",
"one_time_setup_fee": 10,
"maintenance_fee": 10
},
"created_at": "2026-09-16T10:45:28.936281Z",
"updated_at": "2026-09-16T10:51:16.38561Z",
"id": "cva_dal76i2bfsb1k0drq6n0",
"object": "collection_account",
"type": "virtual_account",
"payment_method_type": "wire_transfer",
"status": "enabled",
"status_description": "",
"on_behalf_of": "",
"alias": "collection_account_alias",
"country": "SG",
"description": "sample_description",
"balance_transaction": "",
"failure_reason": "sample_failure_reason",
"currencies": ["SGD", "USD"],
"currency_status": {
"SGD": "enabled",
"USD": "enabled"
},
"ftn": [],
"requests": [
{
"id": "cvar_dal7dm2bfsb1k0drq8a0",
"object": "collection_account_request",
"collection_account_id": "cva_dal76i2bfsb1k0drq6n0",
"type": "disable",
"status": "failed",
"status_description": "",
"failure_reason": "sample_failure_reason",
"disablement_reason": "sample_disablement_reason",
"alias": "collection_account_alias",
"country": "SG",
"created_at": "2026-09-17T08:58:40Z",
"updated_at": "2026-09-17T09:02:10Z",
"currencies": ["SGD", "USD"],
"requested_currencies": ["SGD", "USD"]
},
{
"id": "cvar_dal76i2bfsb1k0drq6mg",
"object": "collection_account_request",
"collection_account_id": "cva_dal76i2bfsb1k0drq6n0",
"type": "enable",
"status": "succeeded",
"status_description": "",
"alias": "collection_account_alias",
"country": "SG",
"created_at": "2026-09-16T10:45:28Z",
"updated_at": "2026-09-16T10:51:16Z",
"currencies": ["SGD", "USD"],
"requested_currencies": ["SGD", "USD"]
}
],
"is_reenablement_supported": false
}
}