One workflow surfaces every Ultimate Beneficial Owner of an onboarded company and runs a full KYC on each. $0.33 per UBO, 500 verifications free every month.
Regulators want the natural person behind every onboarded company — not just
the registry extract. Didit pulls the entity, walks the ownership chain, runs
a $0.33 KYC on every UBO, and screens the company plus every owner against
1,300+ AML lists. One workflow, one invoice, one audit pack. 500 verifications
free every month.
How it works
From sign-up to verified user in four steps.
Step 01
Create the workflow
Pick the checks you want — ID, liveness, face match, sanctions, address, age, phone, email, custom questions. Drag them into a flow in the dashboard, or post the same flow to our API. Branch on conditions, run A/B tests, no code required.
Step 02
Integrate
Embed natively with our Web, iOS, Android, React Native, or Flutter SDK. Redirect to a hosted page. Or just send your user a link — by email, SMS, WhatsApp, anywhere. Pick what fits your stack.
Step 03
User goes through the flow
Didit hosts the camera, the lighting cues, the mobile hand-off, and accessibility. While the user is in the flow, we score 200+ fraud signals in real time and verify every field against authoritative data sources. Result in under two seconds.
Step 04
You receive the results
Real-time signed webhooks keep your database in sync the moment a user is approved, declined, or sent to review. Poll the API on demand. Or open the console to inspect every session, every signal, and manage cases your way.
Built for UBO discovery · Priced like infrastructure
One entity. N UBOs. One audit pack.
Real UBO work is not a single check — it's a recipe. Toggle each module per workflow. The entity record links to every UBO session, every AML hit, and every signed timestamp.
Companies House, Registro Mercantil, Handelsregister, Receita Federal, OpenCorporates fallback — 220+ jurisdictions. Officers, share capital, registered address, status, and standing all returned in one call.
Officers · share capital · registered address · status — one call.
02 · Ownership tree
Walk the chain. Surface every UBO.
Direct shareholders, indirect ownership via holdings, control without ownership, nominee detection, senior-management fallback. The chart drops straight into the supervisor pack.
Walks the ownership chain across nested holdings until every UBO surfaces.
03 · Linked KYC per UBO
One $0.33 KYC per owner.
Each discovered UBO gets a hosted /v3/session/ — ID Verification, Passive Liveness, Face Match 1:1, Device & IP, AML. Sub-two-second verdict on entry-level Android. 14,000+ documents, 220+ countries.
Hosted handoff per UBO. Returns one signed verdict per session.
04 · Entity + person AML
Screen the company and every UBO.
1,300+ sanctions, Politically Exposed Persons (PEP), and adverse-media lists. Refreshed daily, in 14 languages. Entity hits and UBO hits open a case automatically.
25% threshold by default; tighten to 10% or 5% per workflow for high-risk client categories. Nominee detection, voting-rights control, senior-management fallback all encoded in the no-code Workflow Builder.
Fallback to senior management when no UBO clears the threshold.
06 · Evidence pack
One ZIP per entity. Drop into the audit.
Registry extract, ownership chart, every UBO KYC verdict, entity + person AML hits, signed HMAC timestamps. Stored in the EU. Exportable from the Business Console or the API on demand.
Loop one call per discovered UBO. Aggregate at entity_id.docs →
GET /v3/session/{sessionId}/decision/Audit
$ curl https://verification.didit.me/v3/session/$SID/decision/ \
-H "x-api-key: $DIDIT_API_KEY"
# Returns: full evidence — document,
# biometric similarity, AML hits,
# device + IP risk, 200+ signals,
# HMAC signature on the payload.
200OKstatus Approved · Declined · In Review · Resubmitted
Continuous AML re-screens every approved person daily. No second endpoint.docs →
Agent-ready integration
Ship a UBO discovery + KYC flow in one prompt.
Paste into Claude Code, Cursor, Codex, Devin, Aider, or Replit Agent. Fill in your stack. The agent builds the workflow, loops the UBO sessions, wires the webhook, opens the evidence pack.
didit-integration-prompt.md
You are integrating Didit into an Ultimate Beneficial Owner (UBO) verification flow for an obliged entity (fintech, bank, EMI, payments PI, crypto exchange, marketplace, gaming operator). Three obligations on every onboarded company:
1. Pull the legal entity from the registry — name, officers, share capital, registered address, status.
2. Walk the ownership chain — surface every natural-person UBO above the 25% threshold (or whoever exercises control without ownership).
3. Know Your Customer (KYC) each UBO + screen the entity AND each UBO against 1,300+ sanctions, Politically Exposed Persons (PEP), and adverse-media lists.
Bundle pricing (live, verified 2026-05-16):
- User Verification (KYC) bundle: $0.33 per person (Sessions API call — ID + Liveness + Face Match + Device & IP + AML)
- AML Screening standalone: $0.20 per check on the entity, or bundled into each UBO KYC
- Ongoing AML Monitoring: $0.07 per person per year (automatic — no extra endpoint)
- First 500 verifications free every month, forever
PRE-REQUISITES
- Production API key from https://business.didit.me (sandbox key in 60 seconds, no credit card).
- Webhook endpoint with HMAC SHA-256 verification of the X-Signature-V2 header.
- A workflow_id from the no-code Workflow Builder that bundles ID Verification + Passive Liveness + Face Match 1:1 + Device & IP Analysis + AML Screening.
- Business Verification (Know Your Business (KYB)) module enabled in the Business Console. KYB is the entry point — it returns the entity record + the discovered UBOs that drive the rest of the flow.
STEP 1 — Open the KYB record on the legal entity
Business Verification spawns the entity check, pulls officers + share capital + registered address from the local registry (220+ jurisdictions supported), runs entity AML on 1,300+ lists, and surfaces every natural-person UBO above your configured threshold (default 25%).
When the KYB completes, the response contains an array of discovered UBOs — name, date of birth, nationality, ownership percentage, role (direct shareholder, indirect via holding, control without ownership, nominee, senior-management fallback).
STEP 2 — Loop: open one KYC session per discovered UBO
POST https://verification.didit.me/v3/session/
Headers:
x-api-key: <your api key>
Content-Type: application/json
Body:
{
"workflow_id": "<wf id with KYC + AML modules>",
"vendor_data": "<your entity-id>::ubo::<ubo-index>",
"callback": "https://<your-app>/kyb/ubo/callback",
"metadata": {
"purpose": "ubo_verification",
"entity_id": "<your internal entity id>",
"ubo_name": "<full name as discovered>",
"ownership_pct": "<percent rounded to one decimal>"
}
}
Response: 201 Created with the hosted session URL. Send the UBO an email or text with the URL — they complete the verification on their phone, hosted by Didit, no app install. Sub-2-second median verdict.
STEP 3 — Read the signed webhook on each UBO KYC completion
Didit POSTs to your callback. Session statuses are Title Case With Spaces:
Body (excerpted):
{
"session_id": "<uuid>",
"vendor_data": "<entity-id>::ubo::<ubo-index>",
"status": "Approved",
"id_verification": { "status": "Approved" },
"liveness": { "status": "Approved" },
"face": { "status": "Approved", "similarity_score": 0.94 },
"ip_analysis": { "status": "Approved" },
"aml": { "status": "Approved", "hits": [] }
}
Status enum (exact case): Approved | Declined | In Review | Resubmitted | Expired | Not Finished | Kyc Expired | Abandoned.
Verify the X-Signature-V2 header BEFORE reading the body — HMAC SHA-256 of the raw bytes with your webhook secret.
Aggregate at the entity level: the entity is onboarded only when EVERY UBO returns Approved AND the entity AML returns no blocking hit.
STEP 4 — Retrieve the full decision later
GET https://verification.didit.me/v3/session/{sessionId}/decision/
Headers:
x-api-key: <your api key>
Returns the full decision payload: document scan + extracted Machine-Readable Zone (MRZ), biometric similarity, AML hit list with source-watchlist references, device + IP risk signals, 200+ fraud signals, HMAC signature on the entire payload.
Use this to assemble the per-entity evidence pack a supervisor expects to see: registry extract + ownership chart + per-UBO decision + entity AML + signed timestamps.
STEP 5 — Ongoing AML monitoring is automatic
Every approved person (entity officer, UBO) is re-screened DAILY against the same 1,300+ lists. There is NO separate endpoint to call.
When a previously-approved UBO crosses an AML threshold:
- The session status changes to "In Review" or "Declined" automatically.
- A signed webhook fires with the new hits + a link back to the original onboarding evidence.
- A case opens in the Business Console for your compliance team.
- File a Suspicious Activity Report (SAR) directly from the case if your jurisdiction requires it.
Cost: $0.07 per person per year on heavy-volume accounts (single-digit dollars on a million-UBO base — orders of magnitude cheaper than a manual review queue).
WEBHOOK EVENT NAMES
- Sessions: status changes flow through the standard session webhook (verify X-Signature-V2).
- The KYB entity check fires the same webhook on completion.
CONSTRAINTS
- Session statuses use Title Case With Spaces (Approved, In Review). Never UPPER_SNAKE_CASE on a session.
- The 25% UBO threshold is a default; configure your own per workflow (some jurisdictions require 10% or 5% for high-risk client categories).
- When no person meets the threshold, the AML package allows you to fall back to a senior-management UBO — surface that explicitly in the metadata.
- Default record retention is 5 years post-relationship per the EU AML package (extensible up to 10 years per member-state guidance).
- 200+ fraud signals are evaluated on every KYC session at no extra cost — surface the score via the session decision payload, do not re-query.
Read the docs:
- https://docs.didit.me/sessions-api/create-session
- https://docs.didit.me/sessions-api/retrieve-session
- https://docs.didit.me/core-technology/aml-screening/overview
- https://docs.didit.me/core-technology/aml-screening/continuous-monitoring-aml-screening
- https://docs.didit.me/integration/webhooks
Start free at https://business.didit.me — sandbox key in 60 seconds, 500 verifications free every month, no credit card.
Open a new country in one click. We do the hard work.
We open the local subsidiaries, secure the licenses, run the penetration tests, earn the certifications, and align with every new regulation. To ship verifications in a new country, flip a toggle. 220+ countries live, audited and pen-tested every quarter — the only identity provider an EU member-state government has formally called safer than in-person verification.
Per UBO KYC — ID, Liveness, Face Match, Device & IP, AML.
0+
Sanctions, Politically Exposed Persons (PEP), and adverse-media lists screened on the entity and every UBO.
0+
Company registries reachable through Business Verification — local registry plus OpenCorporates fallback.
0
Free verifications every month, on every account.
Three tiers, one price list
Start free. Pay per usage. Scale to Enterprise.
500 free verifications every month, forever. Pay-as-you-go for production. Custom contracts, data residency, and SLAs (Service Level Agreements) on Enterprise.
Free
Free
$0 / month. No credit card required.
Free KYC bundle (ID Verification + Passive Liveness + Face Match + Device & IP Analysis) — 500 / month, every month
Blocklisted Users
Duplicate Detection
200+ fraud signals on every session
Reusable KYC across the Didit network
Case Management Platform
Workflow Builder
Public docs, sandbox, SDKs, MCP (Model Context Protocol) server