Webhook Events

The Card issuing API sends different types of webhooks to your_webhook_endpoint to notify you of important events.

The types of events that the card issuing supports are categorized on this page.

Event categories:

  • Transaction - final transaction outcomes & balance-impacting operations
  • Notification - user authentication & alert messages (OTP, OOB)
  • Reconciliation - clearing file matching and manual adjustments
  • Settlement - settlement summaries, top-ups and offsets
  • Card & Token - card delivery, token provisioning, status changes, limits, balance issues
  • Dispute – dispute financial records received via Visa clearing system

See Webhook for the complete guidance

See Body Params for more details explanation


Transaction Related Events

transaction

Sent after every card authorization attempt processed by the network, reporting whether it was approved or declined along with amounts, merchant details, and authorization code, etc.

FieldsTypesDescription
event_typestringtransaction
idempotency_keystringkey used to keep the request idempotent
acquirer_amountstringthe transaction amount in the currency used by the merchant's acquiring bank
acquirer_currencystringthe currency used by the merchant's acquiring bank
card_opaque_idstringcard unique identifier, combination of 26 digits and letters
cbs_transaction_idstringcard system internal reference ID for this transaction record
currencystringthe currency used at the account level for the transaction
transaction_idstringVisa's transaction ID assigned by the Visa network
transaction_amountstringthe amount charged to the cardholder
transaction_datestringthe date and time when the transaction was initiated
transaction_typestringoct: original credit transaction.
balance_inquiry: happens when card is used at an ATM.
deduction : authorization where a deduction is requested.
debit_verify: when the acquiring merchant attempts to validate card before online transactions.
hold: pre authorization request.
completion: pre authorization completion.
partial_reversal: partial reversal.
reversal: when a transaction is reversed before being cleared.
transaction_statusstringtransaction status. Allowed:approved,rejected
merchant_namestringmerchant name for current transaction
merchant_locationstringlocation of the merchant for the specific transaction
authorization_codestringan authorization code is a six-digit number that is used to confirm that a payment card transaction is approved.
retrieval_reference_numberstringan RRN is a 12-character identifier to a card transaction based on the ISO 8583 standard

example:

{
  "event_type": "transaction",
  "idempotency_key": "502bf964-6d96-4cfa-9484-7b38c56c72f1",
  "acquirer_amount": "35.67",
  "acquirer_currency": "SGD",
  "card_opaque_id": "01D6ZH4G40G0AMJ6YXD6J9HEVF",
  "cbs_transaction_id": "102bf964-6d96-4cfa-9484-7b38c56c72f1",
  "currency": "SGD",
  "transaction_id": "304082137918123",
  "transaction_amount": "35.67",
  "transaction_date": "1675848435000",
  "transaction_type": "deduction",
  "transaction_status": "approved",
  "merchant_location": "SINGAPORE SG",
  "merchant_name": "McDonald's",
  "authorization_code": "82A111",
  "retrieval_reference_number": "123456789012"
}

pre_authorization_release

Sent when a pre-authorization hold is released and the reserved funds are returned to the cardholder's available balance.

FieldsTypesDescription
event_typestringpre_authorization_release
idempotency_keystringkey used to keep the request idempotent
card_opaque_idstringcard unique identifier, combination of 26 digits and letters
customer_opaque_idstringcustomer unique identifier, combination of 26 digits and letters
transaction_idstringVisa's transaction ID assigned by the Visa network
currencystringthe currency used at the account level for the transaction
transaction_amountstringthe final amount charged to the cardholder
transaction_datestringthe date and time when the transaction was initiated
merchant_namestringmerchant name for current transaction
authorization_codestringAn authorization code is a six-digit number that is used to confirm that a payment card transaction is approved.

example:

{
  "event_type": "pre_authorization_release",
  "idempotency_key": "39416a72-a1bb-449f-af98-693dd0d436d4",
  "card_opaque_id": "01H6DPZQ7XVAZ85D4C28GRTPBE",
  "customer_opaque_id": "01H6DPXE5TJKE398G0C31W1RMJ",
  "transaction_id": "304129478180286",
  "currency": "SGD",
  "transaction_amount": "30.00",
  "transaction_date": "230829161616",
  "merchant_name": "McDonald's",
  "authorization_code": "82A111"
}


Notification Related Events

otp_notification

Sent when a 3DS authentication flow requires a one-time password to be delivered to the cardholder via SMS or email.

FieldsTypesDescription
event_typestringotp_notification
idempotency_keystringkey used to keep the request idempotent
customer_opaque_idstringcustomer opaque id
card_opaque_idstringcard unique identifier, combination of 26 digits and letters
typestringOTP
methodstringSMS or EMAIL
otpstringotp code
destinationstringdestination of webhook notification
masked_card_numberstringmasked card number
merchantstringmerchant name
amountstringthe transaction amount at the account level
currencystringthe currency used at the account level for the transaction

{
  "event_type": "otp_notification",
  "idempotency_key": "fcf5dcbb-3c14-4a1e-b306-12e213180d94",
  "customer_opaque_id": "01D6ZH4G40G0AMJ6YXD6J9HEVF",
  "card_opaque_id": "01D6ZASLKHH12HJKBN2BB",
  "method": "SMS",
  "destination": "+62123456789",
  "type": "OTP",
  "otp": "767321",
  "masked_card_number": "4640********0000",
  "merchant": "APPLE",
  "amount": "2.00",
  "currency": "USD"
}

oob_notification

Sent during a 3DS out-of-band challenge to provide the authentication session details so the merchant can facilitate cardholder verification.

FieldsTypesDescription
event_typestringoob_notification
idempotency_keystringkey used to keep the request idempotent
acquirer_amountstringthe transaction amount in the currency used by the merchant's acquiring bank
acquirer_currencystringthe currency used by the merchant's acquiring bank
authentication_idstringidentifier for the 3DS transaction
contract_opaque_idstringcontract unique identifier, combination of 26 digits and letters
customer_opaque_idstringcustomer unique identifier, combination of 26 digits and letters
merchant_namestringmerchant name for current transaction
transaction_idstringidentifier for the 3DS transaction

example:

{
  "event_type": "oob_notification",
  "idempotency_key": "4885a619-5b42-4523-afb4-1a18a7e1b489",
  "acquirer_amount": "2.00",
  "acquirer_currency": "USD",
  "authentication_id": "476f9387-93fa-4923-83b5-50f3b83a4ecb",
  "contract_opaque_id": "01J1CA74WV4ZCN4JM18QAS13RA",
  "customer_opaque_id": "01J1C9YG1PTWSRPBED8650GTEB",
  "merchant_name": "Shopee",
  "transaction_id": "9ef617c1-4d28-4144-ac87-322d2c3c3038"
}


Reconciliation Related Events

reconciliation_manual_adjustment

Sent when a balance correction is applied to a cardholder's account — either due to a manual transaction reversal (BASE_1_ADJUSTMENT) or a discrepancy found during Visa clearing file processing (BASE_2_ADJUSTMENT / FX_RATES_ADJUSTMENT) — along with a recommended action (refund or deduction) for the merchant to act on.

FieldsTypesDescription
event_typestringreconciliation_manual_adjustment
recommended_actionobjectrecommend action
-> typestringdeduction or refund
-> amountstringamount to deduct/refund
-> currencystringcurrency of recommended action
idempotency_keystringkey used to keep the request idempotent
auth_codestringauthentication code (usually 6 digits)
amountstringthe transaction amount at the account level
currencystringthe currency used at the account level for the transaction
account_amountstringan amount that following card currency, if card currency is SGD, it will be populated by SGD amount. If card currency is USD, it will be populated by USD amount
account_currencystringthe currency used at the account level for the transaction
acquirer_amountstringthe transaction amount in the currency used by the merchant's acquiring bank
acquirer_currencystringthe currency used by the merchant's acquiring bank
issuer_amountstringthe transaction amount at the account level
issuer_currencystringthe currency used at the issuer level for the transaction
transaction_typestring

ADDITION - original credit transaction
DEDUCTION - authorization where a deduction is requested REFUND - offline refund

For more explanation, please check here

transaction_datestringthe date and time when the transaction was initiated
visa_transaction_idstringVisa's transaction ID assigned by the Visa network
terminal_idstringmerchant terminal id
customer_opaque_idstringcustomer unique identifier, combination of 26 digits and letters
card_opaque_idstringcard unique identifier, combination of 26 digits and letters
merchant_category_codestringan MCC is a four-digit number corresponds to the type of business or service the company offers
merchant_namestringmerchant name for current transaction
merchant_locationstringmerchant's location
token_requestor_idstringtoken requestor data for card token transaction. Well know token requestor data can be found the possibles values can be found here
pos_entry_modestringPOS entry mode data, the possibles values can be found here
reasonstringBASE_1_ADJUSTMENT, BASE_2_ADJUSTMENT, FX_RATES_ADJUSTMENT
settlement_amountstringthe net settlement amount based on the settlement currency.
settlement_currencystringthe currency used for the settlement. Allowed: SGD,USD
interchange_fee_amountstringInterchange fee amount
interchange_fee_currencystringInterchange fee currency
interchange_fee_typestringInterchange Fee Type. Allowed: DEBIT,CREDIT
acquirer_reference_numberstring23-digit string

example:

{
  "event_type": "reconciliation_manual_adjustment",
  "recommended_action": {
    "type": "refund",
    "amount": "50.00",
    "currency": "SGD"
  },
  "idempotency_key": "05505e38-b844-488b-b77a-07f9cd052ab4",
  "auth_code": "7YA02Z",
  "amount": "50.00",
  "currency": "SGD",
  "account_amount": "50.00",
  "account_currency": "SGD",
  "acquirer_amount": "50.00",
  "acquirer_currency": "SGD",
  "issuer_amount": "50.00",
  "issuer_currency": "SGD",
  "transaction_type": "REFUND",
  "transaction_date": "2023-12-23",
  "visa_transaction_id": "303360220344393",
  "terminal_id": "02034461",
  "customer_opaque_id": "01HFDKJZYSPJ63EWG3M8H1NDRD",
  "card_opaque_id": "01HFDNCH60SY65K9TTE5F4EWP9",
  "merchant_category_code": "5972",
  "merchant_name": "INDO VCMS",
  "merchant_location": "SG",
  "token_requestor_id": "400012345",
  "pos_entry_mode": "02",
  "reason": "BASE_2_ADJUSTMENT", 
  "settlement_amount": "50.00",
  "settlement_currency": "SGD",
  "interchange_fee_amount": "0.0875",
  "interchange_fee_currency": "SGD",
  "interchange_fee_type": "CREDIT",
  "acquirer_reference_number": "74761353167000395099887"
}

reconciliation_success

Sent when a card transaction is successfully matched against the Visa Base 2 clearing file, providing final settled amounts including interchange fees and settlement currency details.

FieldsTypesDescription
event_typestringwebhook event type
idempotency_keystringkey used to keep the request idempotent
transactionsobject[]reconciliation transactions
-> amountstringthe transaction amount at the account level
-> currencystringthe currency used at the account level for the transaction
-> markup_amountstringmarkup fee amount
-> account_amountstringthe transaction amount at the account level
-> account_currencystringthe cardholder's account currency
-> acquirer_amountstringthe transaction amount in the currency used by the merchant's acquiring bank
-> acquirer_currencystringthe currency used by the merchant's acquiring bank
-> acquirer_markup_amountstringmarkup fee for acquirer amount
-> issuer_amountstringthe transaction amount at the issuer level
-> issuer_currencystringthe currency used at the issuer level for the transaction
-> issuer_markup_amountstringmarkup fee for issuer amount
->transaction_idstringVisa's transaction ID assigned by the Visa network
-> auth_codestringauthorization code
-> token_requestor_idstringtoken requestor data for card token transaction.possibles values can be found here
-> pos_entry_modestringPOS entry mode data, the possibles values can be found here
-> settlement_amountstringthe net settlement amount based on the settlement currency
-> settlement_currencystringthe currency used for the settlement. Allowed: SGD,USD
-> interchange_fee_amountstringInterchange fee amount
-> interchange_fee_currencystringInterchange fee currency
-> interchange_fee_typestringInterchange Fee Type. Allowed: DEBIT ,CREDIT
-> card_opaque_idstringcard unique identifier, combination of 26 digits and letters
->
acquirer_reference_number
string23-digit string

example:

{
  "event_type": "reconciliation_success",
  "idempotency_key": "9c6cae39-388d-4051-8eba-d02926f09d83",
  "transactions": [
    {
      "amount": "10.00",
      "currency": "SGD",
      "markup_amount": "0.00",
      "account_amount": "10.00",
      "account_currency": "SGD",
      "acquirer_amount": "10.00",
      "acquirer_currency": "SGD",
      "acquirer_markup_amount": "0.00",
      "issuer_amount": "10.00",
      "issuer_currency": "SGD",
      "issuer_markup_amount": "0.00",
      "transaction_id": "123456789012345",
      "auth_code": "123ABC",
      "token_requestor_id": "400012345",
      "pos_entry_mode": "02",
      "settlement_amount": "10.00",
      "settlement_currency": "SGD",
      "interchange_fee_amount": "0.0875",
      "interchange_fee_currency": "SGD",
      "interchange_fee_type": "CREDIT",
      "card_opaque_id": "GADPIOJIKAWENKKSPOIEKWRKBCUKJHBDFN",
      "acquirer_reference_number": "74761353167000395099887"
    },
    {
      "amount": "50.50",
      "currency": "SGD",
      "markup_amount": "1.00",
      "account_amount": "50.50",
      "account_currency": "SGD",
      "acquirer_amount": "50.50",
      "acquirer_currency": "SGD",
      "acquirer_markup_amount": "1.00",
      "issuer_amount": "50.50",
      "issuer_currency": "SGD",
      "issuer_markup_amount": "1.00",
      "transaction_id": "987605432112345",
      "auth_code": "HW4I27",
      "pos_entry_mode": "02",
      "settlement_amount": "50.00",
      "settlement_currency": "SGD",
      "interchange_fee_amount": "0.0875",
      "interchange_fee_currency": "SGD",
      "interchange_fee_type": "CREDIT",
      "card_opaque_id": "GWERODIFSGJNSKDFRGAOPKKSPOIEKWRN",
      "acquirer_reference_number": "74761353167000395099887"
    },
    {
      "amount": "0.01",
      "currency": "SGD",
      "markup_amount": "0.00",
      "account_amount": "0.01",
      "account_currency": "USD",
      "acquirer_amount": "0.01",
      "acquirer_currency": "SGD",
      "acquirer_markup_amount": "0.00",
      "issuer_amount": "0.01",
      "issuer_currency": "SGD",
      "issuer_markup_amount": "0.00",
      "transaction_id": "223456789912345",
      "auth_code": "234ABC",
      "central_processing_date": "5022",
      "conversion_date": "5007",
      "conversion_rate": "0.728439",
      "pos_entry_mode": "10",
      "settlement_amount": "0.01",
      "settlement_currency": "USD",
      "interchange_fee_amount": "0.0875",
      "interchange_fee_currency": "SGD",
      "interchange_fee_type": "CREDIT",
      "card_opaque_id": "GADDRFGERGAOPKJRIHINNKKSPOIEKWRN",
      "acquirer_reference_number": "74761353167000395099887"
    },
    {
      "amount": "0.01",
      "currency": "USD",
      "markup_amount": "0.00",
      "acquirer_amount": "200.00",
      "acquirer_currency": "IDR",
      "acquirer_markup_amount": "0.00",
      "issuer_amount": "0.02",
      "issuer_currency": "SGD",
      "issuer_markup_amount": "0.00",
      "transaction_id": "323456789912345",
      "auth_code": "345ABC",
      "central_processing_date": "5022",
      "conversion_date": "5008",
      "conversion_rate": "0.0000617742",
      "rate_table_id": "A0964",
      "pos_entry_mode": "03",
      "settlement_amount": "0.01",
      "settlement_currency": "USD",
      "card_opaque_id": "GADDRFGERGAOPKJRIHINNKKSPOIEKWRN",
      "acquirer_reference_number": "74761353167000395099887"
    },
    {
      "amount": "0.03",
      "currency": "USD",
      "markup_amount": "0.00",
      "acquirer_amount": "500.00",
      "acquirer_currency": "IDR",
      "acquirer_markup_amount": "0.00",
      "issuer_amount": "0.05",
      "issuer_currency": "SGD",
      "issuer_markup_amount": "0.00",
      "transaction_id": "423456789912345",
      "auth_code": "456ABC",
      "central_processing_date": "5022",
      "conversion_date": "5007",
      "conversion_rate": "0.0000616979",
      "rate_table_id": "A0963",
      "pos_entry_mode": "01",
      "settlement_amount": "0.03",
      "settlement_currency": "USD",
      "card_opaque_id": "GADDRFGERGAOPKJRIHINNKKSPOIEKWRN",
      "acquirer_reference_number": "74761353167000395099887"
    },
    {
      "amount": "0.05",
      "currency": "USD",
      "markup_amount": "0.00",
      "acquirer_amount": "0.05",
      "acquirer_currency": "USD",
      "acquirer_markup_amount": "0.00",
      "issuer_amount": "0.07",
      "issuer_currency": "SGD",
      "issuer_markup_amount": "0.00",
      "transaction_id": "523456789912345",
      "auth_code": "567ABC",
      "central_processing_date": "5022",
      "conversion_date": "5008",
      "rate_table_id": "A0964",
      "pos_entry_mode": "01",
      "settlement_amount": "0.05",
      "settlement_currency": "USD",
      "card_opaque_id": "GADDRFGERHISDFGDSFWERTNNKKSPOIEKWRN",
      "acquirer_reference_number": "74761353167000395099887"
    }
  ]
}


Settlement Related Events

settlement_account_topup

Sent when the merchant's settlement account receives a top-up, either from a blockchain transfer or a bank transfer.

FieldsTypesDescription
event_typestringwebhook event type
idempotency_keystringkey used to keep the request idempotent
source_typestringsource type. Allowed: Blockchain ,BANK_TRANSFER
sourcestringtop-up source account or address
destinationstringdestination blockchain address or bank account
amountstringtop-up amount
currencystringtop-up currency
transaction_idstringtop-up transaction id
updated_spendable_balancestringupdated spendable balance after top-up

example:

{
  "event_type": "settlement_account_topup",
  "idempotency_key": "c3963c4f-acbf-4655-88ca-a58a01a1f19a",
  "source_type": "BANK_TRANSFER",
  "source": "123456789",
  "destination": "3373049221415",
  "amount": "50.00",
  "currency": "SGD",
  "transaction_id": "bba230f2-300a-40ed-ba66-700c5261cb8c",
  "updated_spendable_balance": "4261.23"
}

settlement_summary

Sent after daily settlement processing is complete, providing a breakdown of net settlement amount, Visa charges, and reimbursement fees for the settlement period.

FieldsTypesDescription
event_typestringwebhook event type
idempotency_keystringkey used to keep the request idempotent
net_settlementobject[]net settlement amount
-> total_amountstringnet settlement total amount
-> amount_typestringDEBIT or CREDIT
visa_chargesobjectvisa charges amount
-> total_amountstringvisa charge total amount
-> amount_typestringDEBIT or CREDIT
reimbursement_feeobjectreimbursement fee object
-> total_amountstringtotal reimbursement fee
-> amount_typestringDEBIT or CREDIT
report_datestringsettlement summary report date
processing_datestringthis field indicates the date that the settlement was processed.
settlement_typestringDOMESTIC or INTERNATIONAL
settlement_currencystringthe currency used for the settlement. Allowed: SGD,USD
settlement_purposestringsettlement purpose description
total_atm_declinestringthe total monetary value of ATM transactions that were declined during the settlement period

example:

{
  "event_type": "settlement_summary",
  "net_settlement": {
    "total_amount": "6.95",
    "amount_type": "DEBIT"
  },
  "visa_charges": {
    "total_amount": "0.07",
    "amount_type": "DEBIT"
  },
  "reimbursement_fee": {
    "total_amount": "0.11",
    "amount_type": "CREDIT"
  },
  "idempotency_key": "e529f80f-001e-41e1-8af1-73d9079f25f7",
  "report_date": "2024-10-30T00:00:00Z",
  "processing_date": "2024-10-30T00:00:00Z",
  "settlement_type": "INTERNATIONAL",
  "settlement_currency": "USD",
  "settlement_purpose": "MERCHANT_SETTLEMENT",
  "total_atm_decline": "3.30"
}

settlement_offset

Sent when a settlement offset is applied — either a source credit or an applied debit, reporting the offset amount and any outstanding deduction balance remaining.

FieldsTypesDescription
event_typestringwebhook event type
idempotency_keystringkey used to keep the request idempotent
report_datestringsettlement offset report date
processing_datestringthis field indicates the date that the settlement was processed
settlement_typestringDOMESTIC or INTERNATIONAL
settlement_currencystringthe currency used for the settlement SGD or USD
offset_typestringSOURCE_CREDIT or APPLIED_DEBIT
offset_amountstringthe monetary value applied during this offset event. This is a signed value (e.g., positive for credits, negative for debits).
remaining_deductionstringthe outstanding deduction amount remaining for the settlement record after this offset has been applied.

this example is for offset_type = SOURCE_CREDIT:

{
  "event_type": "settlement_offset",
  "idempotency_key": "191f6480-dffc-4a32-91f8-4bc8a93cffee",
  "report_date": "2024-10-30T00:00:00Z",
  "processing_date": "2024-10-30T00:00:00Z",
  "settlement_type": "DOMESTIC",
  "settlement_currency": "SGD",
  "offset_type": "SOURCE_CREDIT",
  "offset_amount": "88.29",
  "remaining_deduction": "0.00"
}

this example is for offset_type = APPLIED_DEBIT:

{
  "event_type": "settlement_offset",
  "idempotency_key": "191f6480-dffc-4a32-91f8-4bc8a93cffee",
  "report_date": "2024-10-30T00:00:00Z",
  "processing_date": "2024-10-30T00:00:00Z",
  "settlement_type": "DOMESTIC",
  "settlement_currency": "SGD",
  "offset_type": "APPLIED_DEBIT",
  "offset_amount": "-123.45",
  "remaining_deduction": "987.82"
}


Card and Token Related Events

card_spend_limit

Sent when a transaction is declined because it would exceed the cardholder's configured spend limit for the current period (e.g., daily, weekly, or monthly).

FieldsTypesDescription
event_typestringwebhook event type
idempotency_keystringkey used to keep the request idempotent
attempted_spendstringthe amount the user attempted to spend
card_opaque_idstringcard unique identifier, combination of 26 digits and letters
current_spendstringamount already spent
limit_amountstringuser spend limit amount
limit_typestringPURCHASE ,LIFETIME,DAILY,WEEKLY,MONTHLY,YEARLY
transaction_datestringthe date and time when the transaction was initiated
transaction_idstringVisa's transaction ID assigned by the Visa network

example:

{
  "event_type": "card_spend_limit",
  "idempotency_key": "99f8c4b7-8d7f-4eaa-abbd-df75e3032196",
  "attempted_spend": "35.24",
  "card_opaque_id": "01D6ZH4G3XVVZJHBFJRRFVZ5S5",
  "current_spend": "8.00",
  "limit_amount": "40.00",
  "limit_type": "LIFETIME",
  "transaction_date": "230329171223",
  "transaction_id": "345612345678901"
}

card_token_passcode

Sent during Visa Token Service provisioning when the Yellow Path flow requires the cardholder to verify identity via an OTP delivered to their registered SMS or email.

FieldsTypesDescription
event_typestringwebhook event type
idempotency_keystringkey used to keep the request idempotent
methodstringSMS or EMAIL
destinationstringdestination of webhook notification
otpstringotp code
token_requestorstringWell know token requestor data can be found the possibles values can be found here
token_typestringUNKNOWN, HCE, SECURE_ELEMENT, CARD_ON_FILE, ECOMMERCE
more details see here
card_opaque_idstringcard unique identifier, combination of 26 digits and letters
token_opaque_idstringthe unique masked identifier for the digital wallet token
customer_opaque_idstringcustomer unique identifier, combination of 26 digits and letters

example:

{
  "event_type": "card_token_passcode",
  "idempotency_key": "3bdd046f-5342-43cc-a431-378928f0449c",
  "method": "SMS",
  "destination": "+62123456789",
  "otp": "123456",
  "token_requestor": "Google Pay",
  "token_type": "HCE",
  "card_opaque_id": "01ABGCDA12DFFC1992",
  "token_opaque_id": "01LMKJJ912CD9231",
  "customer_opaque_id": "01J48HNMX7VQXYM9VH953B46SV"
}


card_token_provisioned

Sent when a card token is successfully provisioned to a mobile wallet (e.g., Apple Pay or Google Pay), including token type, device, and delivery method details.

FieldsTypesDescription
event_typestringwebhook event type
idempotency_keystringkey used to keep the request idempotent
contract_opaque_idstringcontract unique identifier, combination of 26 digits and letters
customer_opaque_idstringcustomer card unique identifier, combination of 26 digits and letters
last_four_digitsstringcard last four digits
token_requestorstringthe possibles values of token requestor can be found here
token_requestor_idstringthe possibles values of token requestor id can be found here
token_typestringthe possibles values of token type can be found here
token_opaque_idstringtoken opaque id
destinationstringdestination for sms or email
device_idstringtoken provisioning device id
methodstringSMS,EMAIL

example:

{
  "event_type": "card_token_provisioned",
  "idempotency_key": "0a014ba4-de94-41b6-acba-e63671b0e5f5",
  "contract_opaque_id": "01GNV08V5FREZ57RZAF4RQB607",
  "customer_opaque_id": "01GNV08THSHPTEW42837MR1AFW",
  "last_four_digits": "1234",
  "token_requestor": "Google Pay",
  "token_requestor_id": "40010075001",
  "token_type": "HCE",
  "token_opaque_id": "<token opaque id>",
  "destination": "+6588888888",
  "device_id": "0330548690FB0822",
  "method": "SMS"
}

card_token_provisioning_failed

Sent when a mobile wallet token provisioning attempt fails, indicating the failure reason (e.g., card not active, suspected fraud, or invalid CVV).

FieldsTypesDescription
event_typestringwebhook event type
idempotency_keystringkey used to keep the request idempotent
contract_opaque_idstringcontract unique identifier, combination of 26 digits and letters
customer_opaque_idstringcustomer unique identifier, combination of 26 digits and letters
last_four_digitsstringcard last four digits
token_requestorstringWell know token requestor data can be found the possibles values can be found here
token_requestor_idstringWell know token requestor data can be found the possibles values can be found here
token_opaque_idstringthe unique masked identifier for the digital wallet token
token_typestringtoken type can be found here
failed_provision_reasonstringCARD_STATUS_IS_NOT_ACTIVE, INVALID_EXPIRY_DATE, INVALID_CVV, KNOWN_FRAUD_DEVICE, HIGH_RISK_DEVICE_PROVISIONING, MULTIPLE_DECLINED_REASON_CODES, APPLE_PAY_SECURE_ELEMENT_NOT_SUPPORTED, MAXIMUM_TOKENS_REACHED, TOO_MANY_PROVISIONING_ATTEMPTS, VISA_TOKEN_RISK_SCORE_TOO_HIGH, CONSECUTIVE_CVV_FAILURES

example:

{
  "event_type": "card_token_provisioning_failed",
  "idempotency_key": "393409c5-5dfe-4f44-8058-4373cecff0ca",
  "contract_opaque_id": "01K7GNG05B10A6437TEH7FZBTK",
  "customer_opaque_id": "01K7GNG05BNGXKYRMHA0HHNH6C",
  "last_four_digits": "1234",
  "token_requestor": "Google Pay",
  "token_requestor_id": "40010075001",
  "token_opaque_id": "01K7GNG05BB94WCPFQF0XG334Y",
  "token_type": "HCE",
  "failed_provision_reason": "INVALID_CVV"
}

card_token_status_changed

Sent whenever a token's lifecycle status transitions (e.g., from ACTIVE to SUSPENDED, or INACTIVE to ACTIVE).

FieldsTypesDescription
event_typestringcard_token_status_changed
idempotency_keystringkey used to keep the request idempotent
contract_opaque_idstringcontract unique identifier, combination of 26 digits and letters
customer_opaque_idstringcustomer unique identifier, combination of 26 digits and letters
token_requestor_idstringWell know token requestor data can be found the possibles values can be found here
token_opaque_idstringthe unique masked identifier for the digital wallet token
previous_statusstring

ACTIVE: The token is currently active and can be used for transactions. SUSPENDED: The token has been temporarily suspended (for example, due to suspected fraud or user request) and cannot be used until reactivated. DEACTIVATED: The token has been permanently unlinked from the card or device and cannot be reactivated. However, if the same card is bound again to the same device, a new token may be issued and become active. INACTIVE: The token is currently not active and can't be used for transactions.

ACTIVE,SUSPENDED,DEACTIVATED,INACTIVE

current_statusstring

ACTIVE: The token is currently active and can be used for transactions. SUSPENDED: The token has been temporarily suspended (for example, due to suspected fraud or user request) and cannot be used until reactivated. DEACTIVATED: The token has been permanently unlinked from the card or device and cannot be reactivated. However, if the same card is bound again to the same device, a new token may be issued and become active.
INACTIVE: The token is currently not active and can't be used for transactions.

ACTIVE,SUSPENDED,DEACTIVATED,INACTIVE

example:

{
  "event_type": "card_token_status_changed",
  "idempotency_key": "191f6480-dffc-4a32-91f8-4bc8a93cffee",
  "contract_opaque_id": "01K1D10B8SCRN5DR0G1V28B2SY",
  "customer_opaque_id": "01K1D10B8S2FT3CBJ4ZM8EY60G",
  "token_requestor_id": "40010075001",
  "token_opaque_id": "01K1D10B8SF69E1GJBE5M7SGP5",
  "previous_status": "INACTIVE",
  "currenct_status": "ACTIVE"
}

card_status_transition

Sent when a card's status changes. This includes activations, suspensions, blocks, closures, and reissues. This event requires the "Card Status Transition Webhook" feature to be enabled for the issuing group.

FieldsTypesDescription
event_typestringcard_status_transition
idempotency_keystringkey used to keep the request idempotent
card_opaque_idstringcard unique identifier, combination of 26 digits and letters
customer_opaque_idstringthe opaque ID of the customer who owns the card
previous_statusstringthe card status before the change. Allowed: INACTIVE, ACTIVE, SUSPENDED, BLOCKED_BY_FRAUD, LOST, STOLEN, PERM_BLOCK
current_statusstringthe card status after the change. Allowed: INACTIVE, ACTIVE, SUSPENDED, BLOCKED_BY_FRAUD, LOST, STOLEN, PERM_BLOCK

example:

{
  "event_type": "card_status_transition",
  "idempotency_key": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "card_opaque_id": "card_abc123",
  "customer_opaque_id": "cust_xyz789",
  "previous_status": "INACTIVE",
  "current_status": "ACTIVE"
}

card_pin_set

Sent when a customer successfully set their card PIN. This event requires the "Card PIN Action Webhook" feature to be enabled for the issuing group.

FieldsTypesDescription
event_typestringwebhook event type
idempotency_keystringkey used to keep the request idempotent
card_opaque_idstringcard unique identifier, combination of 26 digits and letters
event_timestampstringISO 8601 UTC timestamp

example:

{
  "event_type": "card_pin_set",
  "idempotency_key": "99f8c4b7-8d7f-4eaa-abbd-df75e3032196",
  "card_opaque_id": "01D6ZH4G3XVVZJHBFJRRFVZ5S5",
  "event_timestamp": "2026-03-30T07:54:51Z"
}                            

card_pin_changed

Sent when a customer successfully changed their card PIN. This event requires the "Card PIN Action Webhook" feature to be enabled for the issuing group.

FieldsTypesDescription
event_typestringwebhook event type
idempotency_keystringkey used to keep the request idempotent
card_opaque_idstringcard unique identifier, combination of 26 digits and letters
event_timestampstringISO 8601 UTC timestamp

example:

{
  "event_type": "card_pin_changed",
  "idempotency_key": "99f8c4b7-8d7f-4eaa-abbd-df75e3032196",
  "card_opaque_id": "01D6ZH4G3XVVZJHBFJRRFVZ5S5",
  "event_timestamp": "2026-03-30T07:54:51Z"
}

card_pin_reset

Sent when a customer successfully reset their card PIN. This event requires the "Card PIN Action Webhook" feature to be enabled for the issuing group.

FieldsTypesDescription
event_typestringwebhook event type
idempotency_keystringkey used to keep the request idempotent
card_opaque_idstringcard unique identifier, combination of 26 digits and letters
event_timestampstringISO 8601 UTC timestamp

example:

{
  "event_type": "card_pin_reset",
  "idempotency_key": "99f8c4b7-8d7f-4eaa-abbd-df75e3032196",
  "card_opaque_id": "01D6ZH4G3XVVZJHBFJRRFVZ5S5",
  "event_timestamp": "2026-03-30T07:54:51Z"
}                                     

card_custom_per_transaction_limit_revoked

Sent when a custom per-transaction limit on a card is revoked.

FieldsTypesDescription
event_typestringwebhook event type
idempotency_keystringkey used to keep the request idempotent
card_opaque_idstringcard unique identifier, combination of 26 digits and letters
limit_amountstringthe revoked limit amount (e.g. "50000.00")
currencystringthe currency of the limit (e.g. "SGD")
revoke_reasonstringthe reason provided for revoking the limit

example:

{
    "event_type": "card_custom_per_transaction_limit_revoked",
    "idempotency_key": "3926dd22-7614-494e-a742-5b57220f25f5",
    "card_opaque_id": "01KRJ9KYKV3F3MF7YGHFXS331M",
    "limit_amount": "50000.00",
    "currency": "SGD",
    "revoke_reason": "Compliance review required"
}

dispute_financial_advice

Sent when a transaction-level dispute financial record is received via the Visa clearing system.

FieldsTypesDescription
event_typestringwebhook event type
idempotency_keystringkey used to keep the request idempotent
card_number_opaque_idstringthe opaque ID of the specific card number
card_opaque_idstringcard unique identifier, combination of 26 digits and letters
acquirer_reference_numberstringthe Acquirer Reference Number (ARN) used to track the dispute lifecycle
authorization_codestringthe original transaction authorization code
central_processing_datestringthe date Visa processed the dispute into the clearing system. Format: YDDD
dispute_financial_reason_codestringVisa's reason code. Values: FRAUD, AUTHORIZATION, PROCESSING_ERROR, CONSUMER_DISPUTE
dispute_statusstringthe status or stage of the dispute record. Values: FINANCIAL, REVERSAL_RECALL, REVERSAL_PRE_ARB_ACCEPTANCE, REVERSAL_ARB_DECISION, RESPONSE_FINANCIAL, RESPONSE_REVERSAL_RECALL, RESPONSE_REVERSAL_PRE_ARB_ACCEPT,
RESPONSE_REVERSAL_ARB_DECISION
merchant_category_codestringthe Merchant Category Code (MCC)
merchant_citystringthe city where the merchant is located
merchant_country_codestringthe country code of the merchant location
merchant_namestringname of the merchant
merchant_state_province_codestringthe state or province code of the merchant location
merchant_zip_codestringthe ZIP or postal code of the merchant location
original_transaction_amountstringthe initial transaction amount prior to the dispute
original_transaction_currencystringthe initial transaction currency code
originator_recipient_indicatorstringVisa indicator. Values: ORIGINATOR, RECIPIENT
pos_entry_modestringPOS entry mode used during the original transaction
purchase_datestringthe original purchase date. Format: MMDD
rate_table_idstringVisa exchange rate table ID for international currency conversions. Empty for domestic.
settlement_amountstringthe final amount settled for the record
settlement_amount_typestringfinancial direction. Values: CREDIT, DEBIT
settlement_currencystringthe currency of the settlement
settlement_typestringsettlement routing type. Values: INTERNATIONAL, DOMESTIC, CLEARING_ONLY, DEFAULT_ROUTING
source_amountstringthe source dispute clearing amount
source_currencystringthe source dispute clearing currency
special_chargeback_indicatorstringspecial processing flag. Values: NOT_APPLICABLE, PARTIAL
transaction_identifierstringthe Visa Transaction ID linking for the lifecycle records

example:

{
  "event_type": "dispute_financial_advice",
  "idempotency_key": "4f312914-9a33-490a-9757-14e543da52da",
  "card_number_opaque_id": "01HNFQPVKKZFN1X0SY4W2NS1NZ",
  "card_opaque_id": "01HNFQPVK67VTE9NB7E2N8988Y",
  "acquirer_reference_number": "74761356138000325630452",
  "authorization_code": "8MB7ZU",
  "central_processing_date": "6142",
  "dispute_financial_reason_code": "FRAUD",
  "dispute_status": "FINANCIAL",
  "merchant_category_code": "5999",
  "merchant_city": "CITY NAME",
  "merchant_country_code": "US",
  "merchant_name": "ACQUIRER NAME",
  "merchant_state_province_code": "CA",
  "merchant_zip_code": "92705",
  "original_transaction_amount": "40.00",
  "original_transaction_currency": "USD",
  "originator_recipient_indicator": "ORIGINATOR",
  "pos_entry_mode": "01",
  "purchase_date": "0518",
  "rate_table_id": "",
  "settlement_amount": "40.00",
  "settlement_amount_type": "CREDIT",
  "settlement_currency": "USD",
  "settlement_type": "INTERNATIONAL",
  "source_amount": "51.27",
  "source_currency": "SGD",
  "special_chargeback_indicator": "NOT_APPLICABLE",
  "transaction_identifier": "306138275153906"
}