📄 Guide
Company onboarding, employee creation, card issuing, card status, 3DS challenges, the three transaction events and the deposit alert make up five groups of outbound events. Every event shares one envelope — readwebhookType, then parse the matching data. Your receiver needs a single endpoint.
Prerequisites: register the callback URL and be ready to recomputeX-Signaturewith yourSK. Setup steps and verification code are in Webhook configuration.
The envelope
The envelope matches the common webhook structure used by the platform’s other product lines, so one consumer can handle events from all of them. Every ID field is a string; amounts are strings and trailing zeros are not guaranteed.
Event overview
Every event’s
data carries companyId except COMPANY_REJECTED (the entity does not exist yet) and the three transaction events (attribution is derivable from cardId), so you never have to look up ownership.Company events
COMPANY_CREATED
COMPANY_REJECTED
COMPANY_STATUS_CHANGED
Mirrors updating company restrictions; pushed once the change is committed.
Employee events
CUSTOMER_CREATED
CUSTOMER_REJECTED
CUSTOMER_STATUS_CHANGED
Mirrors updating employee restrictions.
Card events
CARD_CREATED
CARD_REJECTED
CARD_SHIPPED
Pushed when the tracking number is generated, exactly once.
CARD_ACTIVATED
CARD_STATUS_CHANGED
This event covers neither activation nor expiry: activation is pushed as
CARD_ACTIVATED, and expiry currently has no trigger. The 7 card statuses are listed in Managing cards.AUTHORISATION_3DS_CHALLENGE
The business flow and how to reply are covered in 3DS challenges.
The following four fields are populated only when
challengeFlowType=OTP_DELEGATE and the partner is configured with otpSendMode=ENTERPRISE:
Decryption:
AES/GCM/NoPadding with a 128-bit authentication tag; the key is your SK (the same one used for request signing), following the same contract as retrieving secure card details.
Transaction events
The three transaction events describe the same facts as statement line items and reuse the statement domain’s vocabulary:panLast4 / transactionTime / transactionCategory / originalAmount+originalCurrency (the original transaction amount) / postAmount+postCurrency (the posted amount) / merchantName / mcc / merchantCountryCode.
Transaction events carry no
companyId: attribution is derivable from cardId — a card’s company is fixed at issue time and never changes, and you already received it in CARD_CREATED. Transaction events are far higher in volume than lifecycle events, so they carry only what is necessary. To aggregate by company, use Statements and transactions.CARD_TRANSACTION
Authorization and release share one event; approval versus decline is given by status.
CARD_TRANSACTION_SETTLEMENT
CARD_TRANSACTION_DEBT
Pushed when the card enters a debt state.
This payload holds two amounts with different meanings (the debt and the posting), so each carries a qualifier instead of a bare
amount.
Fund events
LOW_BALANCE
Raised when the funding pool falls below the threshold. Threshold setup is covered in Company maintenance.
BANK_TRANSFER_INFO
A VA deposit landed. Both success and failure are pushed, distinguished by status.
BALANCE_CHANGE
Three things remain open: which balance dimensions it covers (company pool balance / free balance / a dedicated-balance card’s own balance), how the subject and balance type are identified, and whether every ledger movement is pushed.
VA_STATUS_CHANGED
The result of opening or updating a virtual receiving account (VA). These are accepted asynchronously: open-va, update-va and update-va-profile return PENDING synchronously and the final state arrives through this event.
Next steps
- Registering the callback URL, verification and the retry contract: Webhook configuration
- Receiving and replying to 3DS challenges: 3DS challenges
- Reconciling through query endpoints: Statements and transactions

