Skip to main content
WEBHOOK
cardholder.kyc_rejected
{
  "event": "cardholder.kyc_rejected",
  "version": "3.0",
  "eventId": "77d958cb-128d-4927-bd2c-c351a153fb39",
  "sign": "e5902a90747d0a43dd74498dedaaf09c40e1a51cb99ba651d5a3fdd9847d901e",
  "data": {
    "cardholderId": "6ab2697da91d1ec94b1ce2b7535e47db2e6c",
    "firstName": "Rachel",
    "lastName": "MOLO",
    "reason": "{\"feature\":\"LIVENESS\",\"risk\":\"DUPLICATED_FACE\",\"short_description\":\"Duplicated face from other approved session\",\"long_description\":\"The system identified a duplicated face from another approved session, requiring further investigation.\",\"node_id\":\"feature_liveness\",\"log_type\":\"information\",\"additional_data\":{\"api_service\":null,\"duplicated_session_id\":\"4c448606-9968-4008-837f-a294362fef5e\",\"duplicated_session_number\":4012}}",
    "status": "REJECTED",
    "appId": "D6J6X8V3Z5D7G5S0",
    "timestamp": "2026-05-12T13:07:30+00:00"
  }
}
{}
{
  "event": "cardholder.kyc_rejected",
  "version": "3.0",
  "eventId": "77d958cb-128d-4927-bd2c-c351a153fb39",
  "sign": "e5902a90747d0a43dd74498dedaaf09c40e1a51cb99ba651d5a3fdd9847d901e",
  "data": {
    "cardholderId": "6ab2697da91d1ec94b1ce2b7535e47db2e6c",
    "firstName": "Rachel",
    "lastName": "MOLO",
    "reason": "{\"feature\":\"LIVENESS\",\"risk\":\"DUPLICATED_FACE\",\"short_description\":\"Duplicated face from other approved session\",\"long_description\":\"The system identified a duplicated face from another approved session, requiring further investigation.\",\"node_id\":\"feature_liveness\",\"log_type\":\"information\",\"additional_data\":{\"api_service\":null,\"duplicated_session_id\":\"4c448606-9968-4008-837f-a294362fef5e\",\"duplicated_session_number\":4012}}",
    "status": "REJECTED",
    "appId": "D6J6X8V3Z5D7G5S0",
    "timestamp": "2026-05-12T13:07:30+00:00"
  }
}
{}

Payload Fields

FieldTypeDescription
cardholderIdstringCardholder identifier
firstNamestringCardholder first name
lastNamestringCardholder last name
reasonstringJSON-encoded rejection detail from the KYC provider (see below)
statusstringAlways "REJECTED"

Reason Field

The reason field is a JSON-encoded string from the KYC provider. Parse it to access structured rejection data:
const detail = JSON.parse(data.reason);
// detail.short_description — human-readable summary
// detail.long_description  — full explanation
// detail.risk              — risk code (e.g. "DUPLICATED_FACE", "LIVENESS_FAILED")
// detail.feature           — KYC check that failed (e.g. "LIVENESS", "DOCUMENT")
The short_description field contains a human-readable summary suitable for display. Use risk for programmatic handling.

Body

application/json
event
string

The event type identifier (e.g. card.funded).

version
string

Webhook payload version.

sign
string

HMAC-SHA256 signature of the data object using your webhook secret. Always verify this before processing.

data
object

Response

200

Acknowledge receipt of the event