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 |
person.offboarding.scheduled | Offboarding was scheduled for a person |
person.offboarding.cancelled | A pending offboarding was cancelled |
person.offboarding.completed | A person transitioned to Former status |
person.reinstated | A former person was reinstated to Active status |
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.rejected | A KYB submission was rejected (terminal) |
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 |
filing.created | A statutory filing was created |
filing.blocked | A filing is blocked by missing requirements |
filing.pending | A blocked filing was unblocked and is pending again |
filing.in_review | A filing is validated and ready for approval |
filing.approved | A filing was approved for submission |
filing.submitted | A filing was submitted to the government authority |
filing.accepted | The government authority accepted the filing |
filing.rejected | The government authority rejected the filing |
filing.overdue | A filing is past its due date |
remittance.created | A government payment was initiated |
remittance.processing | A government payment is being processed |
remittance.completed | A government payment was completed |
remittance.failed | A government payment failed |
requirement.created | A compliance requirement was surfaced |
requirement.satisfied | A compliance requirement was resolved |
Persons
person.created
JSON
person.updated
JSON
Offboarding
Offboarding events track a person’s lifecycle from active employment through exit and potential reinstatement. See Offboard Workers for the full guide.person.offboarding.scheduled
JSON
person.offboarding.cancelled
JSON
person.offboarding.completed
JSON
person.reinstated
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.rejected
Sent when a KYB submission has been permanently rejected. This is a terminal state — the business cannot resubmit.JSON
business.kyb.completed
JSON
business.basicinfo.updated
JSON
External Accounts
external-account.added
JSON
external-account.removed
JSON
Statutory Compliance
Filing, remittance, and requirement events share a common structure. TheresourceType and resourceId fields identify the affected resource.
filing.created
JSON
filing.blocked
JSON
filing.approved
JSON
filing.accepted
JSON
remittance.completed
JSON
requirement.satisfied
JSON