Flows

Identity / KYC

Open in app

Verify a trader's identity with Sumsub before they fund or trade. You mint a short-lived applicant token, render the Sumsub WebSDK, and poll status until verified.

How it works

  1. Request a Sumsub access token for the signed-in user.
  2. Render the Sumsub WebSDK with that token (handled client-side).
  3. Sumsub posts a webhook to the API as review completes.
  4. Poll GET /v2/kyc/status (or listen for the webhook) until verified.

Statuses

unverifiedprocessing needs_inputverified / failed.

Mint an applicant token

POST/v2/kyc/sumsub/token
User session
curl
curl -X POST http://localhost:8000/v2/kyc/sumsub/token \
  -H "Authorization: Bearer <app_access_token>" \
  -H "X-Session-Token: <user_session_token>"
lib/hsc/client.ts
import { kyc } from "@/lib/hsc/client";

const { token, level_name } = await kyc.sumsubToken();
// pass token to <SumsubWebSdk accessToken={token} ... />
200 OK
{
  "token": "_act-sbx-...",
  "user_id": "usr_...",
  "level_name": "basic-kyc-level",
  "applicant_id": "5f9...c1"
}

Check verification status

GET/v2/kyc/status
User session
200 OK
{
  "user_id": "usr_...",
  "kyc_provider": "sumsub",
  "kyc_status": "verified",
  "kyc_verified_at": "2026-06-22T18:04:11Z",
  "kyc_failure_reason": null
}
GET
/v2/kyc/status

Runs live against your environment using the app's server-side credentials and your session. Sign in to the dashboard first for authenticated reads.

Get notified instead of polling

Register a webhook for the kyc.updated event so you don't have to poll. See Webhooks.