---
title: "Submit KYC data"
method: POST
path: "/v1/users/{user_id}/kyc/submit"
tags: ["Fiat"]
---

# Submit KYC data

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

## Request

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

Submits KYC data, creating a provider customer on the first call and updating it on later calls. Stripe Link can supply identity details, but an email is still required to create a customer.

## Path parameters

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

## Headers

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

## Request body

- KycSubmitRequestBody: Request body for headless KYC data submission.
  - `provider` 'bridge', required: KYC/KYB provider identifier.
  - `environment` 'production' | 'sandbox': Provider environment (production or sandbox).
  - `endorsements` KyxEndorsementName[]: Endorsements to request during KYC.
  - `client_agreement_id` string: Client-side agreement ID for ToS acceptance.
  - `data` KycSubmitData, required: KYC verification data for headless submission.
    - `first_name` string: Legal first name.
    - `middle_name` string: Legal middle name.
    - `last_name` string: Legal last name.
    - `transliterated_first_name` string: Latin-1 transliteration of the first name. Required for non-Latin-1 names.
    - `transliterated_middle_name` string: Latin-1 transliteration of the middle name. Required for non-Latin-1 names.
    - `transliterated_last_name` string: Latin-1 transliteration of the last name. Required for non-Latin-1 names.
    - `email` string, email: Email address.
    - `phone` string: Phone number in E.164 format.
    - `date_of_birth` string: Date of birth in YYYY-MM-DD format.
    - `nationalities` string[]: ISO 3166-1 alpha-3 codes for all nationalities held.
    - `residential_address` VerificationAddress: A postal address used in KYC and KYB data submission.
      - `street_line_1` string, required: Street address line 1.
      - `street_line_2` string: Street address line 2.
      - `city` string, required: City.
      - `subdivision` string: ISO 3166-2 state or province code. Required for US addresses.
      - `postal_code` string: Postal code. Required for countries that use them.
      - `country` string, required: ISO 3166-1 alpha-3 country code.
    - `transliterated_residential_address` VerificationAddress: A postal address used in KYC and KYB data submission.
      - `street_line_1` string, required: Street address line 1.
      - `street_line_2` string: Street address line 2.
      - `city` string, required: City.
      - `subdivision` string: ISO 3166-2 state or province code. Required for US addresses.
      - `postal_code` string: Postal code. Required for countries that use them.
      - `country` string, required: ISO 3166-1 alpha-3 country code.
    - `identifying_information` VerificationDocument[]: Identifying documents.
      - `type` string, required: Document type identifier.
      - `issuing_country` string, required: ISO 3166-1 alpha-3 issuing country code.
      - `number` string: Document number.
      - `description` string: Document description.
      - `expiration` string: Document expiration date.
      - `image_front` string: Base64-encoded front image.
      - `image_back` string: Base64-encoded back image.
    - `stripe_link_shared_data_id` string: Stripe Link shared data ID that supplies name, date of birth, address, and US SSN (omit those fields); retrieval errors surface in endorsements[].issues.
    - `nonresident_alien_attestation` boolean: Attests the user is a nonresident alien to satisfy identification without a US tax ID (must be enabled for you).
    - `kyc_screen` KyxScreen: Result of a KYC/AML or OFAC screen you performed and are relying on the provider to accept, honoured only for developers enrolled in reliance.
      - `screened_at` union, required: When the screen was performed (ISO 8601 date or date-time).
        - string, date-time
        - string, date
      - `result` 'passed' | 'failed', required: Outcome of a screen performed under KYC/KYB reliance.
    - `ofac_screen` KyxScreen: Result of a KYC/AML or OFAC screen you performed and are relying on the provider to accept, honoured only for developers enrolled in reliance.
      - `screened_at` union, required: When the screen was performed (ISO 8601 date or date-time).
        - string, date-time
        - string, date
      - `result` 'passed' | 'failed', required: Outcome of a screen performed under KYC/KYB reliance.
    - `verified_database_at` union: When you verified the user against a database source (ISO 8601), which loosens the identifying-document requirement under reliance.
      - string, date-time
      - string, date
    - `verified_govid_at` union: When you verified the government ID (ISO 8601), which loosens the identifying-document requirement under reliance.
      - string, date-time
      - string, date
    - `verified_proof_of_address_at` union: When you verified proof of address (ISO 8601), required for EEA customers and SEPA rails under reliance.
      - string, date-time
      - string, date

## Response `200`

KYC status snapshot reflecting the submitted data.

- 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/submit/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/3a2288470053?raw)
