Browse help guides
KYC
Booking and KYC overrides
Why operators see a lock, how compliance approves with a reason, and why an override is a KYC decision rather than a one-trade exception.
The rule
A transaction can be posted only when its main user's KYC is Approved. Otherwise the Post button is disabled and the form shows the actual status. Drafts can still be saved; adjustments and voids of already-posted rows are not blocked.
flowchart TD
A["Open Book trade"] --> B{"KYC status"}
B -->|"Approved"| C["Transaction form"]
B -->|"anything else + operator"| D["Disabled: KYC not approved"]
B -->|"anything else + compliance / owner"| E["Override dialog + reason"]
E --> F["applicant.manual_override to Approved"]
F --> C
C --> G["provided / disbursed / fee"]
G --> H["Transaction posted"]The engine enforces the same rule, so a file edit or another tool cannot bypass it.
Desk roles
| Role | Book approved users | Override KYC |
|---|---|---|
| Owner | Yes | Yes, with a reason |
| Compliance | Yes | Yes, with a reason |
| Operator | Yes | No — sees the lock |
The desktop app has no accounts per person, so the role is chosen per computer in Settings → Desk role on this computer. Every KYC event and every posted transaction records the role that acted.
What an override is
- It requires a written reason.
- It writes applicant.manual_override with reason_code staff_review (or CBA instruction, data fix, other), from the current status to Approved.
- It sets the user's KYC status to Approved.
- It stays on the KYC chain, so it is obvious this was not a Sumsub GREEN.
- It is not a one-trade exception: the person is approved from then on, and the next operator can book without asking again.
- The badge reads “approved (overridden)”.
sequenceDiagram
actor Compliance
participant Desk
participant KYC as kyc/events.jsonl
participant TX as Transactions
Compliance->>Desk: Book trade for a user at Pending
Desk-->>Compliance: Locked: KYC not approved
Compliance->>Desk: Override KYC + reason
Desk->>KYC: applicant.manual_override (Pending to Approved)
Desk-->>Compliance: approved (overridden)
Compliance->>Desk: provided / disbursed / fee
Desk->>TX: transaction postedIf there is no KYC record yet (for example after Create without KYC), the override first creates a manual record, then writes the override on it.
After an override
- The user stays approved for every later booking.
- A later Fetch that only says Sumsub is still reviewing does not undo the override.
- A real Sumsub decision — GREEN, RETRY or FINAL — replaces the override, and the badge shows that decision.
Something missing or out of date? Send feedback.
