📄 Guide
Organization onboarding, employee creation, card issuing, card status, 3DS challenges, the three transaction events and the deposit alert add up to 18 outbound events in five groups. 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 (18)
Every event’s
data carries organizationId except ORGANIZATION_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.Organization events
ORGANIZATION_CREATED
ORGANIZATION_REJECTED
ORGANIZATION_STATUS_CHANGED
Mirrors updating organization 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
organizationId: attribution is derivable from cardId — a card’s organization 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 organization, 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 (organization 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.
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

