KYC & KYB Verification

Identity verification for investors, issuers & corporate entities via Sumsub

ProviderSumsub (sandbox + production)KYCKYBAML

Every user who holds, trades, or issues security tokens must be verified. The verification type depends on the user's role and whether they act as an individual or a corporate entity.

Individual Investor

Natural person investing personal funds

KYC— ID document + selfie + liveness
KYB not required
AML screening— PEP + sanctions
Sumsub Level: alef-individual-kyc

Corporate Investor

Company or fund investing on behalf of entity

KYC— for authorized representative
KYB— trade license + UBO verification
AML screening— entity + all UBOs
Sumsub Levels: alef-individual-kyc + alef-corporate-investor-kyb

Issuer (Always Corporate)

Company listing security tokens on the exchange

KYC— for CEO / primary contact + each director
KYB (stricter)— articles of association + financials + cap table
UBO chain— all 25%+ owners identified + KYC'd
AML screening— entity + all UBOs + directors
Sumsub Levels: alef-individual-kyc + alef-issuer-kyb

Admin / Staff

Platform operators and support personnel

No Sumsub verification
Internal HR background check
Accounts created by admin (not self-registration)
Out of scope for Sumsub — handled internally
ERC-3643 requires every token holder to be registered in the on-chain IdentityRegistry. KYC/KYB approval is a prerequisite for on-chain identity registration. No verification = no tokens.

Verification status gates what users can do on the platform. Unverified users have read-only access.

ActionNo KYCKYC OnlyKYC + KYB
Browse marketplace / view tokens
View portfolio dashboard
Place buy/sell orders
Participate in primary offering
Deposit / withdraw fiat
Receive dividend payouts
List a token (issuer)
Create offering round (issuer)
Corporate actions (issuer)

Sumsub handles document verification, liveness checks, and AML screening. The platform orchestrates the flow and receives results via webhooks.

KYC Flow (Individual)

  Frontend (Next.js)          platform-api:8081              Sumsub
    |                              |                           |
    |-- POST /kyc/submit --------->|                           |
    |   (personal details)         |-- POST /applicants ------>|
    |                              |   (externalUserId=UUID)   |
    |                              |<-- applicantId -----------|
    |                              |                           |
    |<-- { applicantId } ----------|                           |
    |                              |                           |
    |-- GET /kyc/sumsub-token ---->|                           |
    |                              |-- POST /accessTokens ---->|
    |                              |<-- sdkToken --------------|
    |<-- { token } ---------------|                           |
    |                              |                           |
    |== Mount Sumsub WebSDK ======================================|
    |   User scans ID document     |                           |
    |   User takes selfie          |                           |
    |   Liveness check             |                           |
    |== Widget completes =========================================|
    |                              |                           |
    |                              |    (Sumsub AI + human     |
    |                              |     review: 1-5 min)      |
    |                              |                           |
    |                              |<-- POST /webhooks/sumsub -|
    |                              |    { reviewResult: GREEN } |
    |                              |                           |
    |                              |-- UPDATE kyc_applications |
    |                              |   status = 'approved'     |
    |                              |-- UPDATE users            |
    |                              |   kyc_status = 'approved' |
    |                              |   accreditation = tier     |
    |                              |   fatca_status = check     |
    |                              |                           |
    |-- GET /kyc/me -------------->|                           |
    |<-- { status: "approved" } ---|                           |
KYB Flow (Issuer / Corporate Investor)

  Frontend (Next.js)          platform-api:8081              Sumsub
    |                              |                           |
    |  (KYC completed first)       |                           |
    |                              |                           |
    |-- POST /kyb/submit --------->|                           |
    |   (company details, docs)    |-- POST /applicants ------>|
    |                              |   type: "company"         |
    |                              |   info: { companyName,    |
    |                              |     regNumber, country }  |
    |                              |<-- companyApplicantId ----|
    |                              |                           |
    |                              |-- POST /applicants/       |
    |                              |   {id}/info/beneficiaries |
    |                              |   (UBO list: name, %,     |
    |                              |    role, nationality)     |
    |                              |<-- beneficiary sub-apps --|
    |                              |                           |
    |<-- { companyApplicantId } ---|                           |
    |                              |                           |
    |== Mount Sumsub WebSDK (company mode) =======================|
    |   Upload: trade license      |                           |
    |   Upload: articles of assoc  |                           |
    |   Upload: board resolution   |                           |
    |   Upload: financial stmts    |                           |
    |   (issuers only: cap table)  |                           |
    |== Widget completes =========================================|
    |                              |                           |
    |                              |   Each UBO receives       |
    |                              |   KYC verification link   |
    |                              |   (email from Sumsub)     |
    |                              |                           |
    |                              |<-- webhooks per UBO ------|
    |                              |<-- company review --------|
    |                              |    { reviewResult: GREEN } |
    |                              |                           |
    |                              |-- UPDATE businesses       |
    |                              |   kyb_status = 'approved' |
    |                              |                           |
KYC must be completed before KYB. The authorized representative's KYC verification is a prerequisite for initiating the company verification process.
See also:Blockchain Integration (IdentityRegistry requires KYC approval)See also:Cross-Portal Workflows (full user onboarding)