Browse help guides
← Help

KYC

Create a user with KYC

The New user form with a default KYC method: person or company first, identity, Create — plus what happens when Sumsub fails.

How it should feel

  • Once: Settings → Sumsub (token, secret, level name) → make Sumsub the default method.
  • Every new user: choose Person or Company → fill in identity → Create.
  • The footer always offers two ways out: Create without KYC, and Use manual KYC instead.
flowchart TD
  A["New user"] --> B["Person or company"]
  B --> C["Identity fields"]
  C --> D{"Default KYC method"}
  D -->|"Sumsub"| E["Create Sumsub applicant + link"]
  D -->|"Manual"| F["Manual KYC on the same submit"]
  D -->|"Skip / footer"| G["User only, Not started"]
  E -->|"ok"| H["User page + copy link"]
  E -->|"fail"| I["User saved, Not started"]
  I --> J["Retry Sumsub"]
  I --> K["Continue with manual"]
One submit. The default method decides what follows the new user; failures keep the user and offer Retry or Manual.

Choose the default once

Settings → Default KYC method. Sumsub can be chosen only while a connection is active.

DefaultWhat Create doesPrimary button
SumsubSaves the user, creates the Sumsub applicant and a 30-minute link.Create and generate link
ManualSaves the user and your manual KYC decision in one submit.Create and save KYC
No KYCSaves the user only, at Not started.Create user

The New user form

  1. Users → New user.
  2. Choose Person or Company. People get first/last name and date of birth; companies get legal name and registration number.
  3. Fill in identity: email and phone are also sent to Sumsub as hints so it can prefill.
  4. Check the KYC block. With Sumsub it is a read-only recap: connection, environment, level and what will be sent. With Manual it holds the manual fields.
  5. Press the primary button — or use the footer: Create without KYC, or Use manual KYC instead (swaps in the manual fields without losing what you typed).

With Sumsub: the happy path

No method step: type → identity → Create → the user page with a live link. The desk does not wait while the client verifies.

sequenceDiagram
  actor Staff
  participant W as New user form
  participant Core as Open Dram
  participant API as Sumsub
  participant Led as Ledger
  Staff->>W: person or company
  Staff->>W: name, email, phone, residency, reg. no.
  Staff->>W: Create
  W->>Led: user saved
  W->>Core: start Sumsub
  Core->>API: POST /resources/applicants?levelName
  API-->>Core: applicantId
  Core->>Led: applicant.created (sumsub)
  Core->>API: POST websdkLink
  API-->>Core: link
  Core->>Led: applicant.link_issued
  Core-->>W: user page + link + expiry
  Staff->>Staff: copy link to client
What Create does when the default is Sumsub.
sequenceDiagram
  actor Staff
  participant Desk
  participant Sumsub
  actor Client
  Staff->>Desk: Create user
  Desk->>Sumsub: applicant + hosted link
  Desk-->>Staff: link
  Staff->>Client: send link
  Client->>Sumsub: documents + liveness
  Sumsub-->>Desk: webhook or Fetch
  Desk-->>Staff: badge approved
The round trip. The client verifies on Sumsub; the desk learns the result by webhook (hosted) or Fetch status (desktop).
sequenceDiagram
  actor Client
  participant Sumsub
  participant Hook as Fetch status (or webhook)
  participant Core as Open Dram
  participant Led as Ledger
  Client->>Sumsub: opens link, documents + liveness
  Sumsub->>Hook: review finished
  Hook->>Core: map GREEN / RED
  Core->>Led: applicant.status_changed
  Note over Led: Approved, Needs documents or Rejected
After the client finishes. On desktop the Fetch status button plays the webhook's role, with the same mapping.

The badge moves Link sent → Pending → Approved, Needs documents or Rejected. The access token used to make the link is never stored; the link itself and its expiry are.

When Sumsub fails

The user is always kept. The user page says: “User saved. Sumsub did not start. Retry the link or finish KYC manually.”

flowchart TD
  A["Create, default Sumsub"] --> B{"Create Sumsub applicant"}
  B -->|"401 / bad level / network"| C["Show the error"]
  C --> D["User is still saved"]
  D --> E["User page: Not started"]
  E --> F["Retry Sumsub"]
  E --> G["Continue with manual"]
  F --> B
  G --> H["Manual KYC form on this user"]
  H --> I["applicant.created (manual)"]
  B -->|"link failed after applicant exists"| J["User saved, applicant Not started"]
  J --> F
  B -->|"200"| K["Happy path"]
Keep the user, then Retry Sumsub or continue with Manual.
What went wrongWhat you seeWhat is recorded
Token rejected (401)“Token rejected. Open Settings and check the Sumsub keys.”The user only.
Unknown level (400)The exact level name that Sumsub did not recognise.The user only.
Timeout or failure after the applicant was createdThe KYC panel offers Retry Sumsub; retry reuses the same applicant.The user + applicant.created.
Sumsub already has this userOpen Dram attaches the existing Sumsub applicant instead of creating another.applicant.created for the existing applicant.
No internet“Could not reach Sumsub.”The user only.

Manual KYC

  • Decision: Pending (default), Needs documents, Approved or Rejected.
  • AML screening: Unknown (default), Clear, Review or Hit.
  • Document type, country and valid-until date.
  • Name and date of birth on the document — prefilled from the identity you typed.
  • Reason — required when rejecting.
  • No file upload is required; you can attach files on the user's Files tab.
flowchart TD
  A["New user"] --> B["Type + identity"]
  B --> C["Manual KYC fields on the same submit"]
  C --> D["User saved"]
  D --> E["applicant.created (manual)"]
  E --> F["applicant.status_changed"]
  F --> G["Badge = chosen status"]
Manual default: no Sumsub calls and no fallback needed.

Create without KYC

Only the user is saved, at Not started. KYC can start later from the user page. Booking stays locked for operators.

flowchart LR
  A["New user"] --> B["Type + identity"]
  B --> C["User saved"]
  C --> D["Badge: Not started"]
  D --> E["Start Sumsub later"]
  D --> F["Start manual later"]
  D --> G["Book trade"]
  G --> H{"Desk role + status"}
  H -->|"operator"| I["Locked"]
  H -->|"compliance / owner"| J["Override + reason, then post"]
User only, with every path still open later.

The user page afterwards

  • The KYC badge from the current record.
  • Sumsub: the link with Copy and its expiry, Fetch status, and Generate new link when the link expired or documents are needed.
  • Use manual instead: records a manual decision that becomes the current record.
  • Approve with override (compliance and owner only).
  • KYC history: every event, newest first, with the desk role that did it.

Continue reading

Booking and KYC overrides →Connect Sumsub with your own keys →Manage users →

Something missing or out of date? Send feedback.