Sent when a customer’s onboarding, KYC, risk, or legal-acceptance status changes. The KYC status is normalised to a customer-facing label before delivery. All deliveries share the common envelope (eventId, eventName, timestamp, programId, sandbox, customerId, clientReference).

Payload fields

The status data is inlined on the body (there is no nested object for this event).
FieldTypeNotes
workflowStagestringNormalised onboarding stage (e.g. Approved).
kycStatus.statusstringNormalised KYC label.
kycStatus.rejectionReasonsstring[]Present when the KYC was rejected.
kycStatus.timestampstringWhen the KYC status was set.
riskStatusobjectOptional. { status, timestamp }.
legalsStatusobjectOptional. { accepted, timestamp }.

Example

{
  "eventId": "b1d2…",
  "eventName": "CUSTOMER_STATUS_UPDATE",
  "timestamp": "2026-06-23T12:34:56.789Z",
  "programId": "yourprogram",
  "sandbox": false,
  "customerId": "cust_123",
  "clientReference": "your-ref-001",
  "workflowStage": "Approved",
  "kycStatus": {
    "status": "Approved",
    "rejectionReasons": [],
    "timestamp": "2026-06-23T12:34:50.000Z"
  },
  "riskStatus": { "status": "APPROVED", "timestamp": "2026-06-23T12:34:50.000Z" },
  "legalsStatus": { "accepted": true, "timestamp": "2026-06-23T12:30:00.000Z" }
}