---
title: "Create Verification"
method: POST
path: "/verifications"
tags: ["Verifications"]
---

# Create Verification

`POST /verifications`

Starts a hosted verification session for an account or user, or returns the active session when one already exists. Any fields you include in the request body are used to prefill the session. Send `documents` (with `document_type`) to instead verify the person from identity documents included in this request — no hosted session involved. If the account already has an `approved` verification the request is rejected; unlink it first to start a new one.

## Query parameters

- `account_id` string, required

## Headers

- `Idempotency-Key` string

## Request body

- union
  - object — Request body for an individual (KYC) verification. Omit `kind` or set it to `individual`. KYC is required to pay out funds and is a prerequisite for Whop Card access. Accepting payments does not require verification until a business reaches $5000 in payments. Add `business_name` and `business_structure` if the individual operates under a business entity — this enables payouts to be received by a business bank account. `country` is always the individual's own country, and the supported `business_structure` values vary by it — see [Business structures](/developer/verification/business-structures).
    - `address` object
      - `city` string
      - `country` string — Two-letter ISO 3166-1 country code, for example `US`, `DE`, or `GB`.
      - `line1` string — First line of the street address.
      - `line2` string — Second line of the street address.
      - `postal_code` string — Postal or ZIP code.
      - `state` string — State, province, or region code, for example `CA`.
    - `business_name` string — Legal business name for a sole proprietor or single-member LLC.
    - `business_structure` string — Entity type for sole proprietors, such as `single_member_llc`. Supported values vary by country of incorporation — see [Business structures](/developer/verification/business-structures).
    - `business_tax_identification_number` string — The business ID number of the company, as appropriate for the company's country. Examples are an Employer Identification Number (EIN) in the US, a Business Number in Canada, or a Company Number in the UK.
    - `business_website` string — Business website URL. Whop store pages are not accepted.
    - `country` string — Two-letter ISO 3166-1 country code, for example `US`, `DE`, or `GB`.
    - `date_of_birth` string — Formatted as `YYYY-MM-DD`.
    - `document_type` 'ID_CARD' | 'DRIVERS' | 'RESIDENCE_PERMIT' | 'PASSPORT' — Identity document being sent, when verifying with `documents`. Decides exactly which file slots to send: `ID_CARD` → `id_card_front` + `id_card_back` + `selfie`; `DRIVERS` → `drivers_front` + `drivers_back` + `selfie`; `RESIDENCE_PERMIT` → `residence_permit_front` + `residence_permit_back` + `selfie`; `PASSPORT` → `passport_front` + `selfie`. See [Identity documents](/developer/verification/identity-documents).
    - `documents` object — Identity document files, each value the file's raw bytes base64-encoded (JPEG, PNG, or PDF, up to 5MB per file before encoding). Sending this object verifies the person from the files in this request instead of a hosted session — individual verifications only, and the request must also carry `document_type`, `first_name`, `last_name`, `date_of_birth`, `country`, `phone`, `tax_identification_number`, and an `address` with `line1`, `city`, `state`, and `postal_code`. Send every slot for your `document_type` — a missing or rejected file fails the whole request and nothing is submitted; review starts automatically once every document is accepted. See [Identity documents](/developer/verification/identity-documents) for a full walkthrough.
      - `drivers_back` string — Back of the driver's license, base64-encoded. Required when `document_type` is `DRIVERS`.
      - `drivers_front` string — Front of the driver's license, base64-encoded. Required when `document_type` is `DRIVERS`.
      - `id_card_back` string — Back of the ID card, base64-encoded. Required when `document_type` is `ID_CARD`.
      - `id_card_front` string — Front of the ID card, base64-encoded. Required when `document_type` is `ID_CARD`.
      - `passport_front` string — Photo page of the passport, base64-encoded. Required when `document_type` is `PASSPORT`.
      - `residence_permit_back` string — Back of the residence permit, base64-encoded. Required when `document_type` is `RESIDENCE_PERMIT`.
      - `residence_permit_front` string — Front of the residence permit, base64-encoded. Required when `document_type` is `RESIDENCE_PERMIT`.
      - `selfie` string — Photo of the person's face, base64-encoded. Always required, with every document type. Must be JPEG or PNG.
    - `first_name` string
    - `kind` 'individual' — Verification type. Defaults to `individual`.
    - `last_name` string
    - `phone` string
    - `tax_identification_number` string — The government-issued ID number of the person being verified — the individual for a KYC verification, or the business representative for a KYB verification — as appropriate for their country. Examples are a Social Security Number (SSN) in the US, or a Social Insurance Number in Canada.
  - object — Request body for a business entity (KYB) verification. Set `kind` to `business`. KYB includes everything KYC provides and additionally unlocks financing options for payments and business Whop Cards.
    - `address` object
      - `city` string
      - `country` string — Two-letter ISO 3166-1 country code, for example `US`, `DE`, or `GB`.
      - `line1` string — First line of the street address.
      - `line2` string — Second line of the street address.
      - `postal_code` string — Postal or ZIP code.
      - `state` string — State, province, or region code, for example `CA`.
    - `business_name` string — Legal business name.
    - `business_structure` string — Legal entity structure of the business, such as `private_corporation` or `sole_proprietorship`. Supported values vary by country of incorporation — see [Business structures](/developer/verification/business-structures).
    - `business_tax_identification_number` string — The business ID number of the company, as appropriate for the company's country. Examples are an Employer Identification Number (EIN) in the US, a Business Number in Canada, or a Company Number in the UK.
    - `business_website` string — Business website URL. Whop store pages are not accepted.
    - `country` string — Country of incorporation as a two-letter ISO 3166-1 country code.
    - `kind` 'business' — Must be `business` to start a KYB verification.
    - `place_of_incorporation` string — State or region where the business is incorporated.
    - `tax_identification_number` string — The government-issued ID number of the person being verified — the individual for a KYC verification, or the business representative for a KYB verification — as appropriate for their country. Examples are a Social Security Number (SSN) in the US, or a Social Insurance Number in Canada.

## Response `200`

OK

- object
  - `address` object, nullable — Address on the verification profile. `null` when no address is set.
    - `city` string, nullable
    - `country` string, nullable — Two-letter ISO 3166-1 country code, for example `US`, `DE`, or `GB`.
    - `line1` string — First line of the street address.
    - `line2` string, nullable — Second line of the street address.
    - `postal_code` string, nullable — Postal or ZIP code.
    - `state` string, nullable — State, province, or region code, for example `CA`.
  - `business_name` string, nullable — Legal business name.
  - `business_structure` string, nullable — Legal entity structure of the business, such as `private_corporation` or `sole_proprietorship`. Supported values vary by country of incorporation — see [Business structures](/developer/verification/business-structures).
  - `country` string, nullable — Two-letter ISO 3166-1 country code, for example `US`, `DE`, or `GB`.
  - `created_at` string — When the verification profile was created, as an ISO 8601 timestamp.
  - `date_of_birth` string, nullable — Formatted as `YYYY-MM-DD`.
  - `first_name` string, nullable
  - `id` string — Verification profile ID, prefixed `idpf_`.
  - `kind` 'individual' | 'business'
  - `last_name` string, nullable
  - `requested_information` object[] — Fields or documents Whop still needs before review can continue. Submit answers with the Update Verification endpoint.
    - `description` string, nullable — Additional instructions for this requested item, or `null`.
    - `error_message` string, nullable — Reason a previously submitted value was rejected. `null` if no submitted value has been rejected.
    - `field` string — Stable field key, such as `ssn` or `business_description`.
    - `id` string — Requested information item ID, prefixed `inrqi_`. Include this ID when submitting an answer.
    - `label` string — Human-readable label for the field, such as `Social Security Number`.
    - `options` string[] — Allowed values for a `select` field (e.g. account_type, business_structure) — the submitted value must be one of these; empty for other types.
    - `requested_files` object[] — Document upload slots for this item. Present when `type` is `files`; upload one file for each required slot and include the slot's `category` when submitting the answer.
      - `category` string, nullable — File category to include with the uploaded file so Whop can route the document correctly. `null` for a generic upload.
      - `is_optional` boolean — Whether this slot can be left empty.
      - `kind` string, nullable — Specific document type requested, such as `Bank Statement`. `null` for standard identity and business document uploads.
      - `label` string — Label for this upload slot, such as `Front of ID Document`.
      - `multiple` boolean — Whether this slot accepts more than one file.
    - `type` string, nullable — Input type expected for this item: `text`, `date`, `phone`, `address`, `files`, or `select`.
  - `required_documents` object[] — Documents for a document-upload verification and their progress. Present only on verifications created by sending `documents`. `pending_upload` documents were not accepted yet — send the full set again with another Create Verification call.
    - `document` string — Document slot key, such as `id_card_front`, `id_card_back`, or `selfie`.
    - `rejection_reason` string, nullable — Why the previous submission was rejected, when the provider requested new documents or declined the verification.
    - `status` 'pending_upload' | 'submitted' — `pending_upload` until the document has been relayed for review; `submitted` afterwards.
  - `session_url` string, nullable — Hosted verification session URL for the user to complete identity checks. Expires 7 days after creation.
  - `status` 'not_started' | 'pending' | 'processing' | 'approved' | 'rejected' | 'action_required' — Current verification state. `not_started` before any session has been created; `pending` while a session is in progress and needs the user's input; `processing` while the provider reviews submitted documents — nothing to do but wait; `action_required` when items in `requested_information` need answers before review can continue; `approved` once verification succeeds; `rejected` if it fails. Call the Create Verification endpoint again to start a new session.
  - `updated_at` string — When the verification profile was last updated, as an ISO 8601 timestamp.

## Other responses

- `201` — verification created
- `400` — Invalid Parameters
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Resource not found

## Changes

- **2026-07-26** `60bbb4a6ffbc` — 9 info
  - added the new optional `header` request parameter `Idempotency-Key`
  - added the new optional request property `oneOf[subschema #1: CreateIndividualVerification]/documents/drivers_back`
  - added the new optional request property `oneOf[subschema #1: CreateIndividualVerification]/documents/drivers_front`
  - added the new optional request property `oneOf[subschema #1: CreateIndividualVerification]/documents/id_card_back`
  - …5 more
- **2026-07-14** `3a06a605784b` — 2 warning, 2 info
  - added the new `processing` enum value to the `status` response property for the response status `200`
  - added the new `processing` enum value to the `status` response property for the response status `201`
  - added the new optional request property `oneOf[subschema #1: CreateIndividualVerification]/business_tax_identification_number`
  - added the new optional request property `oneOf[subschema #2: CreateBusinessVerification]/business_tax_identification_number`

[Change history](https://skmtc.dev/whop/apis/whop-api/changes/verifications/post.md)

---

[API](https://skmtc.dev/whop/apis/whop-api.md) · [All operations](https://skmtc.dev/whop/apis/whop-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/whop/whop-api/revisions/60bbb4a6ffbc/schema)
