> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fyatu.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Cardholder KYC Rejected

> Sent when a cardholder's KYC verification is rejected.

<RequestExample>
  ```json Webhook Payload theme={null}
  {
    "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"
    }
  }
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {}
  ```
</ResponseExample>

## Payload Fields

| Field          | Type   | Description                                                     |
| -------------- | ------ | --------------------------------------------------------------- |
| `cardholderId` | string | Cardholder identifier                                           |
| `firstName`    | string | Cardholder first name                                           |
| `lastName`     | string | Cardholder last name                                            |
| `reason`       | string | JSON-encoded rejection detail from the KYC provider (see below) |
| `status`       | string | Always `"REJECTED"`                                             |

## Reason Field

The `reason` field is a **JSON-encoded string** from the KYC provider. Parse it to access structured rejection data:

```javascript theme={null}
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.


## OpenAPI

````yaml v3/openapi.json webhook cardholder.kyc_rejected
openapi: 3.1.0
info:
  title: FYATU API v3
  description: >-
    FYATU API v3 with JWT authentication for Collections, Payouts, and Card
    Issuing.
  version: 3.0.0
  contact:
    name: FYATU Support
    url: https://fyatu.com
    email: support@fyatu.com
servers:
  - url: https://api.fyatu.com/api/v3
    description: Production
security: []
tags:
  - name: Authentication
    description: JWT token management endpoints
  - name: Account
    description: Business account, wallet, and address management
  - name: Collections
    description: Accept payments from customers via checkout sessions
  - name: Refunds
    description: Issue refunds for completed collections
  - name: Payouts
    description: Send money to Fyatu account holders
  - name: Cardholders
    description: Cardholder management for card issuing programs
  - name: Cards
    description: Issue, fund, freeze, and manage virtual cards
  - name: Webhooks
    description: Webhook configuration and management
paths: {}

````