---
title: "Initiate KYC verification"
method: POST
path: "/v1/users/{user_id}/kyc/links"
tags: ["Fiat"]
---

# Initiate KYC verification

`POST /v1/users/{user_id}/kyc/links`

## Request

- Base URL: `https://api.privy.io`
- URL: `https://api.privy.io/v1/users/{user_id}/kyc/links`
- Auth: HTTP basic

Generates a hosted KYC link for the user and returns the current KYC status snapshot.

## Path parameters

- `user_id` string, required: The ID of the user.

## Headers

- `privy-app-id` string, required: ID of your Privy app.

## Request body

- KycLinksRequestBody: Request body for initiating a hosted KYC flow.
  - `provider` 'bridge', required: KYC/KYB provider identifier.
  - `environment` 'production' | 'sandbox': Provider environment (production or sandbox).
  - `email` string, email: Email address for the KYC session.
  - `endorsements` KyxEndorsementName[]: Endorsements to request during KYC.
  - `redirect_uri` string, uri: URI to redirect the user after completing KYC.
  - `client_agreement_id` string: Client-side agreement ID for ToS acceptance.

## Response `200`

KYC status snapshot including the hosted verification link.

- KycStatusResponse: Full KYC status for a user with a given provider.
  - `provider` 'bridge', required: KYC/KYB provider identifier.
  - `environment` 'production' | 'sandbox', required: Provider environment (production or sandbox).
  - `status` string, required: KYC/KYB status for the user.
  - `tos` KyxTosStatusDetail, required: Terms of Service acceptance status for a KYC or KYB flow.
    - `status` string, required: Status of Terms of Service acceptance. Passthrough from the provider.
    - `link` string, uri: ToS acceptance link, if pending.
  - `endorsements` KyxEndorsement[], required
    - `name` string, required: Endorsement identifier.
    - `status` string, required: Status of an endorsement. Passthrough from the provider.
    - `missing` string[], nullable, required: Missing requirements, or null if complete.
    - `issues` string[], nullable, required: Provider issue codes, or null if none.
  - `capabilities` KyxCapabilities, required: Capability statuses for the customer.
    - `payin_crypto` string, required: Status of a capability. Passthrough from the provider.
    - `payout_crypto` string, required: Status of a capability. Passthrough from the provider.
    - `payin_fiat` string, required: Status of a capability. Passthrough from the provider.
    - `payout_fiat` string, required: Status of a capability. Passthrough from the provider.
  - `requirements_due` string[], required: Top-level items still needed (e.g. link a bank account).
  - `future_requirements_due` string[], required: Items that will be required in the future.
  - `kyc` KyxVerificationStatusDetail, required: Verification status detail for a KYC or KYB check.
    - `status` string, required: Status of KYC/KYB verification. Passthrough from the provider.
    - `link` string, uri: Verification link, if applicable.
    - `rejection_reasons` string[]: Reasons for rejection, if status is closed or action_required.
  - `stripe_cardholder_id` string: Stripe Issuing cardholder ID assigned by Bridge for this user.

## Changes

- **2026-10-16** `4facbfa7f9d4`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/privy-io/apis/privy-api/changes/v1/users/:user_id/kyc/links/post.md)

---

[API](https://skmtc.dev/privy-io/apis/privy-api.md) - [All operations](https://skmtc.dev/privy-io/apis/privy-api/llms.txt) - [OpenAPI document](https://skmtc.dev/privy-io/apis/privy-api/revisions/6a80d4be53a8?raw)
