data field contents for each event type.
Quick Reference
| Event | Description |
|---|---|
person.created | A person record was created |
person.updated | A person record was updated |
user.created | A user account was created |
user.updated | A user’s profile was updated |
user.profile.updated | A user completed a profile action (e.g., password set) |
user.kyc.updated | A user’s KYC status changed |
user.kyc.expiry | A user’s identity document is expiring or has expired |
payroll.created | A payroll was created |
payroll.status.updated | A payroll’s status changed |
transaction.initiated | A transaction was created for processing |
transaction.succeeded | A transaction completed — payroll disbursement or business account deposit |
transaction.failed | A transaction failed or was returned |
instant-pay.succeeded | An instant pay request was completed |
contract.created | A contract was created |
contract.signed | A contract signature was recorded |
contract.status.updated | A contract’s status changed |
virtual-account.requested | A virtual account was requested |
virtual-account.submitted | A virtual account request was sent to the bank |
virtual-account.created | A virtual account is active with account details |
business.kyb.reviewed | A KYB submission was reviewed |
business.kyb.completed | A business completed KYB verification |
business.basicinfo.updated | A business’s basic information was updated |
external-account.added | An external bank account was linked |
external-account.removed | An external bank account was removed |
Persons
person.created
JSON
person.updated
JSON
Users
user.created
JSON
user.updated
The payload includes atype field indicating what was updated.
| Type | Description |
|---|---|
basic_info | Name, email, phone number, or tag was updated. isNameUpdated indicates if the name changed. |
JSON
user.profile.updated
JSON
user.kyc.updated
Fired on every KYC status change. Thetype field indicates which verification component changed.
JSON
| Status | Description |
|---|---|
processing | KYC verification is in progress |
approved | Verification successful |
rejected | Verification failed — resubmission needed |
| Type | Description |
|---|---|
identity | Identity document verification |
address | Address verification |
user.kyc.expiry
Fired when a user’s identity document is approaching expiry or has expired.JSON
| Stage | Description |
|---|---|
about-to-expire | Document expires within 30 days |
in-grace-period | Expired but within 60-day grace period |
expired | Past grace period — user must re-verify |
Payroll
| Status | Description |
|---|---|
saved | Payroll is saved |
approved | Approved, waiting to be scheduled once funds are collected |
scheduled | Funds collected, scheduled for payroll date |
processing | Payroll is being processed |
completed | Payroll processing complete |
payroll.created
JSON
payroll.status.updated
JSON
Transactions
| Event | Description |
|---|---|
transaction.initiated | Created for processing. Preliminary compliance checks complete. |
transaction.succeeded | A transaction completed. Fired for PAYROLL disbursements and DEPOSIT (business virtual account funding). |
transaction.failed | Failed or returned. Check message for details. If isReturned: true, the transaction was previously successful but returned by the recipient bank. |
transaction.initiated
JSON
transaction.succeeded
Fired when a payroll disbursement completes or when a business virtual account receives funds.- PAYROLL
- DEPOSIT
JSON
transaction.failed
JSON
transaction.failed with isReturned: true:
JSON
typeisPAYROLLfor payroll disbursements andDEPOSITfor business virtual account funding.referenceis thepayrollIdforPAYROLLtransactions and the deposit reference forDEPOSITtransactions.recipientIdis theuserIdfor Cadana wallet payments and thebeneficiaryIdfor direct bank payments. ForDEPOSIT, it is the receiving account ID.
Instant Pay
instant-pay.succeeded
JSON
Contracts
contract.created
JSON
contract.signed
JSON
contract.status.updated
JSON
Virtual Accounts
A virtual account can belong to either a user or a business. Exactly one ofuserId or businessId will be present.
virtual-account.requested
JSON
virtual-account.submitted
JSON
virtual-account.created
JSON
Business
business.kyb.reviewed
Sent when a KYB submission has been reviewed. May indicate approval or that additional information is needed.JSON
needsAdditionalInformation responses.
business.kyb.completed
JSON
business.basicinfo.updated
JSON
External Accounts
external-account.added
JSON
external-account.removed
JSON