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

# KYC Link

## Object Parameters

```json expandable theme={null}
{
  "status": "success",
  "message": "",
  "data": {
    "entity_id": "ent_aaaaaaaaaaaaaaaaaaaa",
    "kyc_link": {
      "url": "https://verify.example.com/kyc/demo-link-001",
      "status": "approved",
      "created_at": "2026-09-25T10:00:00Z",
      "expires_at": "2026-10-25T10:00:00Z",
      "completed_at": "2026-09-25T10:15:00Z",
      "verification_result": {
        "outcome": "approved",
        "rejection_type": null,
        "rejection_reasons": [],
        "checks": {
          "identity": {
            "status": "passed",
            "document_type": "ID_CARD",
            "document_country": "IND",
            "document_number": "123456789",
            "document_expiry": "2035-12-31"
          },
          "address": {
            "status": "passed",
            "document_type": "UTILITY_BILL"
          },
          "selfie": {
            "status": "passed",
            "document_type": "SELFIE",
            "document_country": "IND",
            "document_number": null,
            "document_expiry": null
          }
        },
        "extracted_data": {
          "first_name": "Alex",
          "last_name": "Morgan",
          "date_of_birth": "1990-05-15",
          "nationality": "IND",
          "address": {
            "line1": "12 Example Street",
            "line2": "Apartment 4B",
            "city": "Example City",
            "state": "Example State",
            "postal_code": "110001",
            "country": "IND"
          }
        }
      },
      "metadata": {
        "customer_reference": "customer_demo_001"
      }
    }
  }
}
```

Fields without a value are returned as `null` rather than omitted, in API responses and in [webhooks](/api-reference/tazapay-api/kyc-link-webhook).

## Object Parameters

| Field | Type | Description |
| :- | :- | :- |
| entity\_id | string | The Tazapay ID of the individual entity the link belongs to. Example: `ent_aaaaaaaaaaaaaaaaaaaa`. |
| kyc\_link | object | The KYC link of the entity. See **[KYC Link](#kyc-link)** below. |

## KYC Link

| Field | Type | Description |
| :- | :- | :- |
| url | string | Hosted verification URL to share with the individual. |
| status | enum | Status of the KYC link. \[Values: `pending`, `requires_action`, `approved`, `rejected`, `expired`]. |
| created\_at | string | Timestamp when the link was created (ISO 8601). |
| expires\_at | string | Timestamp when the link expires (ISO 8601). When the link is expired early through the API or by submitting the entity, it is set to the time of the expiry. |
| completed\_at | string | Timestamp when the link was approved, rejected, or expired (ISO 8601). `null` until the link reaches one of these statuses. |
| verification\_result | object | Verification outcome. `null` until the link is approved or rejected. See **[Verification Result](#verification-result)** below. |
| metadata | object | Custom key-value metadata attached to the KYC link. `null` when no metadata has been set, and an empty object after it is cleared. |

## Verification Result

| Field | Type | Description |
| :- | :- | :- |
| outcome | enum | Outcome of the verification. \[Values: `approved`, `rejected`, `requires_action`]. |
| rejection\_type | string | Type of rejection, for example `FINAL` or `RETRY`. `null` when the verification is not rejected. |
| rejection\_reasons | array | Reasons for rejection. An empty array when there are none. See **[rejection\_reasons](#rejection_reasons)** below. |
| checks | object | Checks performed on the submitted documents. See **[checks](#checks)** below. |
| extracted\_data | object | Details extracted from the submitted documents. See **[extracted\_data](#extracted_data)** below. |

### rejection\_reasons

| Field | Type | Description |
| :- | :- | :- |
| code | string | Rejection reason code from our verification provider, Sumsub. Example: `SELFIE_MISMATCH`. See [Sumsub rejection labels](https://docs.sumsub.com/docs/rejection-explanatory-buttons) for the full list of codes and what each one means. |
| description | string | Description of the rejection reason. |
| user\_message | string | Message for the individual explaining the next steps. |

### checks

| Field | Type | Description |
| :- | :- | :- |
| identity | object | Identity document check. Contains `status`, `document_type`, `document_country`, `document_number` (unmasked in API responses, masked in webhooks), and `document_expiry` (`YYYY-MM-DD`). |
| address | object | Proof of address check. Contains `status` and `document_type`. |
| selfie | object | Selfie check. Same fields as `identity`. |

Check `status` values: `passed`, `failed`. A check that was not performed is `null`, for example `selfie` when your verification level has no liveness check. Document fields that were not returned are `null`.

### extracted\_data

| Field | Type | Description |
| :- | :- | :- |
| first\_name | string | First name of the individual. |
| last\_name | string | Last name of the individual. |
| date\_of\_birth | string | Date of birth in `YYYY-MM-DD` format. |
| nationality | string | Nationality as returned by verification. Example: `IND`. |
| address | object | Address of the individual. Contains `line1`, `line2`, `city`, `state`, `postal_code`, and `country`. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.