Перейти к основному содержимому
Didit привлекает $2 млн и присоединяется к Y Combinator (W26)
Didit
Разработчикам

Лучший способ интегрировать
идентификацию и борьбу с мошенничеством.

Откройте песочницу, вставьте один curl и запустите за 5 минут. Общедоступная документация, пять комплектов для разработки программного обеспечения (SDK) и сервер Model Context Protocol (MCP), чтобы агент по кодированию с искусственным интеллектом (AI) мог интегрировать Didit для вас. $0.33 за полную проверку KYC, 500 бесплатных каждый месяц.

При поддержке
Y Combinator
GBTC Finance
Bondex
Crnogorski Telekom
UCSF Neuroscape
Shiply
Adelantos

Доверяют более 2000 организаций по всему миру.

Быстрый старт

От нуля до верификации за пять минут.

Пять шагов от регистрации до первого верифицированного пользователя. Каждый шаг связывает путь в Бизнес-консоли с программным путем через интерфейс прикладного программирования (API). Или пропустите все шаги — вставьте подсказку для интеграции с docs.didit.me/integration/integration-prompt в вашего AI-агента по кодированию.
01 · Зарегистрироваться

Создайте свою учетную запись Didit.

  • В Бизнес-консоли: зарегистрируйтесь на business.didit.me менее чем за шестьдесят секунд — без карты, без продаж.
  • Через интерфейс прикладного программирования (API): вызовите POST https://apx.didit.me/auth/v2/programmatic/register/, затем POST .../verify-email/.

Любой из этих путей предоставит вам ключ API песочницы — такой же, как в продакшене, со всеми разблокированными модулями.

API программной регистрации
Рабочий ключ API
В прямом эфире
didit_sk_live_8f4c2a…9bf3

Выпущено только что — без карты, без контракта, без звонка.

  • Без минимума
  • Без контракта
  • 500 бесплатно / мес
  • Открытая песочница
02 · Создать рабочий процесс

Выберите модули. Составьте рабочий процесс.

  • В Бизнес-консоли: перетащите модули в Конструктор рабочих процессов — Верификация документов, Пассивная проверка живости, Сравнение лиц, Борьба с отмыванием денег (AML), Проверка кошельков, Анализ интернет-протокола (IP) и еще 19.
  • Через API: вызовите POST /v3/workflows/ на verification.didit.me с нужными вам модулями.

Любой из этих путей возвращает workflow_id, который вы будете передавать в каждой сессии.

API создания рабочего процесса
Рабочий процессkyc-onboarding-v3
220+ стран
  • ID Verification
  • Passive Liveness
  • Face Match 1:1
  • AML Screening
  • Device & IP Analysis
  • Подтверждение адреса
  • Чтение NFC
  • Проверка телефона
  • Проверка кошелька
  • Пользовательская анкета
+ еще 15 модулей · 1000+ источников данных$0.33/сессия
03 · Зарегистрировать веб-хук

Настройте одно назначение веб-хука для каждого вердикта.

  • В Бизнес-консоли: добавьте ваш унифицированный указатель ресурсов (URL) веб-хука, выберите события и скопируйте секретный ключ подписи, который генерирует Didit.
  • Через API: вызовите POST /v3/webhook/destinations/ с label, url и subscribed_events. Ответ возвращает secret_shared_key, который Didit использует для подписи каждой доставки.
API создания назначения веб-хука
REST · OpenAPI 3
docs.didit.me
  • POST/v3/session/
  • GET/v3/session/{id}/decision/
  • PATCH/v3/session/{id}/update-status/
  • GET/v3/session/{id}/generate-pdf
  • POST/v3/lists/{id}/entries/face-upload/
  • POST/v3/transactions/

Каждая конечная точка открыта · каждый веб-хук подписан HMAC.

04 · Интегрировать в ваше приложение

Создайте сессию — с помощью комплекта для разработки программного обеспечения (SDK) или прямого API.

  • С комплектом для разработки программного обеспечения (SDK): вставьте нативный SDK для Web, iOS, Android, React Native или Flutter — тот же контракт /v3/ под ним.
  • Через API: вызовите POST /v3/session/ с workflow_id и значением vendor_data (ваш идентификатор пользователя).

Ответ предоставляет URL для верификации, чтобы перенаправить или встроить в ваше приложение.

Посмотреть SDK
POSThttps://verification.didit.me/v3/session/
curl
$ curl -X POST /v3/session/ \
  -H "x-api-key: $DIDIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "workflow_id": "3daf4c64-...",
    "vendor_data": "u_42",
    "callback": "https://acme.com/webhook"
  }'
201Создано
{ "session_id": "4c5c7f3a-...", "url": "verify.didit.me/..." }
05 · Получить вердикт

Слушайте веб-хук — или опрашивайте.

  • Веб-хук в реальном времени: ваша конечная точка срабатывает при каждом изменении состояния. Считывайте status ("Approved", "Declined", "In Review", "Resubmitted", …), обновляйте свою базу данных, отправляйте.
  • Путем опроса: вызывайте GET /v3/session/:session_id/decision/ для получения той же полезной нагрузки — полезно, когда ваш стек не может принимать входящий трафик.

Строки статуса точные и чувствительные к регистру. Полная конечная машина состояний находится по адресу docs.didit.me/integration/verification-statuses.

Статусы верификации
События
live
  • session.verified2.4s ago200 OK
  • session.review_started12s ago200 OK
  • session.aml_hit1m ago200 OK
  • session.declined3m ago200 OK
Создавайте с Didit

Каждая поверхность, общедоступна. Ноль звонков по продажам.

Прочитайте документацию, вызовите интерфейс прикладного программирования (API), подключитесь к серверу Model Context Protocol (MCP), вставьте подсказку для интеграции или используйте готовый навык агента — все общедоступно, все бесплатно.
Документация

Найдите каждый модуль, конечную точку и веб-хук.

Быстрый старт

Запустите процесс KYC за 5 минут.

Справочник API

Прочитайте спецификацию OpenAPI 3.1.

SDK

Встраивайте в Web, iOS, Android, React Native или Flutter.

Вебхуки

Получайте события с HMAC-подписью при каждом изменении состояния.

Статусы верификации

Прочитайте полный конечный автомат сессии.

Подсказка по интеграции

Вставьте один запрос. Запустите интеграцию KYC.

Сервер MCP

Подключите Didit к любому клиенту MCP.

Навыки агента

Предварительно созданные навыки верификации, AML и KYB.

Пятиминутная интеграция

Один curl. Пять SDK.

Начните сессию верификации с помощью одного curl или встройте поток в Web, iOS, Android, React Native или Flutter — тот же контракт /v3/ лежит в основе.
POSThttps://verification.didit.me/v3/session/
curl
$ curl -X POST /v3/session/ \
  -H "x-api-key: $DIDIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "workflow_id": "3daf4c64-...",
    "vendor_data": "u_42",
    "callback": "https://acme.com/webhook"
  }'
201Создано
{ "session_id": "4c5c7f3a-...", "url": "verify.didit.me/..." }
Webv1.4.0iOSv3.0.1Androidv2.6.2
React Nativev1.8.0Flutterv1.3.4
Для разработчиков · Для AI-агентов · Открытый дизайн

Создано для разработчиков и AI-агентов.

Интегрируйте проверки личности и мошенничества Didit с помощью одного интерфейса прикладного программирования (API). Откройте песочницу, прочитайте общедоступную документацию, подключитесь к серверу Model Context Protocol (MCP) или загрузите комплект для разработки программного обеспечения (SDK) для любого стека. Разработчики запускают за один день; AI-агенты по кодированию запускают за одну подсказку — без пользовательского интерфейса, без участия человека, без звонков по продажам, без минимумов.
01 · Единый API

Единый API для идентификации и борьбы с мошенничеством.

Единый программный интерфейс приложения (API) охватывает все проверки идентификации и мошенничества — «Знай своего клиента» (KYC), «Знай свой бизнес» (KYB), борьбу с отмыванием денег (AML), мониторинг транзакций, биометрическое сопоставление. Тот же ключ, тот же механизм рабочего процесса, возможность объединения в одной сессии — никаких дополнительных интеграционных работ между продуктами.
Прочитать документацию API
POSThttps://verification.didit.me/v3/session/
curl
$ curl -X POST /v3/session/ \
  -H "x-api-key: $DIDIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "workflow_id": "3daf4c64-...",
    "vendor_data": "u_42",
    "callback": "https://acme.com/webhook"
  }'
201Создано
{ "session_id": "4c5c7f3a-...", "url": "verify.didit.me/..." }
02 · Агент-нативный

Интеграция за один запрос.

Наш сервер Model Context Protocol (MCP) запущен, и навыки агента опубликованы. Попросите Claude Code, Codex или Cursor интегрировать Didit — агент сам создаст рабочее пространство, настроит рабочий процесс и отправит первый вызов API. Без дашборда, без человека, без запроса в службу поддержки.
Прочитать запрос на интеграцию
promptdidit-integration.md
# Integrate Didit into my application

You are integrating Didit — infrastructure for identity and fraud — into my application end-to-end. Didit ships KYC, KYB, AML screening, biometric verification, transaction monitoring, and wallet screening behind one API. 220+ countries, 14,000+ document types, 48+ languages. Pay-per-call from $0.33, 500 free verifications per core feature per month, no minimums, no contract.

## My application context

<my_stack>
Stack: [framework + language — e.g. Next.js 15 + TypeScript, Django, Rails, Go]
Surface: [web | iOS | Android | React Native | Flutter | backend-only]
Use case: [KYC at signup | KYB at business onboarding | age gate | re-auth | transaction monitoring | other]
Database: [Postgres | MySQL | Mongo | other]
</my_stack>

## Step 1 — Create the Didit account programmatically

Two API calls. No browser. No 2FA. Returns an `api_key` you use for every subsequent request.

```bash
# 1) Register — creates org + app + emails a 6-character code
curl -X POST https://apx.didit.me/auth/v2/programmatic/register/   -H "Content-Type: application/json"   -d '{"email": "dev@example.com", "password": "StrongP@ss1"}'

# 2) Verify email with the code from the inbox — returns api_key
curl -X POST https://apx.didit.me/auth/v2/programmatic/verify-email/   -H "Content-Type: application/json"   -d '{"email": "dev@example.com", "code": "A3K9F2"}'
# Response.application.api_key — save this
```

Persist the returned `api_key` as the env var `DIDIT_API_KEY`. Auth header for every Didit call:
`x-api-key: $DIDIT_API_KEY`

## Base URLs

| Surface | Base URL |
|---|---|
| Every `/v3/...` endpoint (sessions, workflows, lists, billing, webhook destinations, entities, transactions, standalone APIs) | `https://verification.didit.me` |
| Auth / programmatic registration (`/auth/v2/programmatic/...`) | `https://apx.didit.me` |
| Console (human UI) | `https://business.didit.me` |
| Hosted verification URL handed to end users | `https://verify.didit.me` |
| Docs (cross-check anything) | `https://docs.didit.me` |
| OpenAPI spec (machine-readable, server is `https://verification.didit.me`) | `https://docs.didit.me/openapi-25.json` |

## Step 2 — Choose the integration approach

Pick exactly one, based on my use case:

- **Approach A — Sessions API + SDK (recommended for any end-user verification flow).** My backend creates a Didit session → my frontend opens the Didit-hosted verification UI (via SDK / iframe / redirect) → user completes verification → my backend receives a webhook with the decision. Best for KYC at signup, KYB at business onboarding, age verification, re-auth. Didit-hosted flows are A/B-tested and convert higher than custom UIs.
- **Approach B — Standalone APIs (server-to-server only).** My backend calls individual modules directly (`/v3/id-verification/`, `/v3/aml/`, `/v3/face-match/`, etc.) for batch jobs or fully custom UI. Best for back-office verification pipelines.

If unsure, default to Approach A.

## Step 3 — Create or reuse a workflow

A workflow defines which modules run during a session. Create one via API (or `https://business.didit.me` → Workflows → Create).

```bash
# List existing workflows
curl https://verification.didit.me/v3/workflows/   -H "x-api-key: $DIDIT_API_KEY"

# Create a new KYC workflow — features are UPPERCASE enum values, each an object with optional `config`
curl -X POST https://verification.didit.me/v3/workflows/   -H "x-api-key: $DIDIT_API_KEY"   -H "Content-Type: application/json"   -d '{
    "workflow_label": "Standard KYC",
    "features": [
      { "feature": "OCR" },
      { "feature": "LIVENESS", "config": { "face_liveness_method": "PASSIVE" } },
      { "feature": "FACE_MATCH" },
      { "feature": "IP_ANALYSIS" }
    ]
  }'
# Response.uuid — save as DIDIT_WORKFLOW_ID
```

Feature enum values (UPPERCASE, source: `management-api/workflows/feature-configs.mdx`):
- **KYC features:** `OCR`, `NFC`, `LIVENESS`, `FACE_MATCH`, `AGE_ESTIMATION`, `PHONE_VERIFICATION`, `EMAIL_VERIFICATION`, `DATABASE_VALIDATION`, `AML`, `IP_ANALYSIS`, `PROOF_OF_ADDRESS`, `QUESTIONNAIRE`.
- **KYB features:** `KYB_REGISTRY`, `KYB_DOCUMENTS`, `KYB_KEY_PEOPLE` (each plus AML / DATABASE_VALIDATION as needed).

For a KYB workflow set `"workflow_type": "kyb"` (default is KYC). A workflow is locked to its type at creation; create separate workflows per kind.

## Step 4 — Install the SDK that matches my stack

| Stack | Package | Install |
|---|---|---|
| Web (React, Vue, Next.js, Nuxt, Svelte, vanilla JS) | `@didit-protocol/sdk-web` | `npm install @didit-protocol/sdk-web` |
| iOS (Swift / SwiftUI) | `didit-sdk-ios` | SPM: `https://github.com/didit-protocol/didit-sdk-ios` |
| Android (Kotlin / Jetpack Compose) | `me.didit:didit-sdk` | Maven |
| React Native (Expo or bare) | `@didit-protocol/sdk-react-native` | `npm install @didit-protocol/sdk-react-native` |
| Flutter | `didit_sdk` | `flutter pub add didit_sdk` |
| Backend-only / batch / custom UI | none — call REST directly | — |

Always prefer native iOS / Android SDKs over WebView on mobile (NFC + camera + biometrics work natively).

## Step 5 — Create a session and present it to the user

**Backend creates the session:**

```bash
curl -X POST https://verification.didit.me/v3/session/   -H "x-api-key: $DIDIT_API_KEY"   -H "Content-Type: application/json"   -d '{
    "workflow_id": "'"$DIDIT_WORKFLOW_ID"'",
    "vendor_data": "internal-user-id",
    "callback": "https://myapp.com/done"
  }'
```

Response (201 Created):
```json
{
  "session_id": "4c5c7f3a-...",
  "session_token": "eyJ...",
  "url": "https://verify.didit.me/session/...",
  "status": "Not Started",
  "session_kind": "user",
  "workflow_id": "...",
  "vendor_data": "internal-user-id"
}
```

`vendor_data` is **my internal user ID** — Didit links the session to a User entity (auto-created if new). For KYB workflows it links to a Business entity.

Optional create-session field: `callback_method` (`"initiator"` | `"completer"` | `"both"`, default `"initiator"`) — controls which side of a cross-device flow receives the `callback` redirect. Useful when the verification opens on a phone after a desktop start.

**Frontend presents the verification (pick one):**

| Pattern | Code |
|---|---|
| Web JS SDK (modal) | `import { DiditSdk } from "@didit-protocol/sdk-web"; DiditSdk.shared.startVerification({ url })` |
| Iframe (embedded) | `<iframe src={url} allow="camera; microphone; fullscreen; autoplay; encrypted-media" />` |
| Redirect (cross-device) | `window.location.href = url` |
| iOS / Android / RN / Flutter | `DiditSdk.startVerification(token: session_token)` |

## Step 6 — Set up the webhook to receive results

Build `POST /api/webhooks/didit` in my backend.

**Register the webhook destination once:**

```bash
curl -X POST https://verification.didit.me/v3/webhook/destinations/   -H "x-api-key: $DIDIT_API_KEY"   -H "Content-Type: application/json"   -d '{
    "url": "https://myapp.com/api/webhooks/didit",
    "label": "production",
    "subscribed_events": ["status.updated", "data.updated"]
  }'
```

Response includes `secret_shared_key` — save as `DIDIT_WEBHOOK_SECRET`.

**Cloudflare / restrictive firewall users:** allowlist `18.203.201.92` — Didit webhooks egress from this single IP.

**Three signature headers** ship on every webhook. Verify **one** — `X-Signature-V2` is recommended because it survives JSON middleware re-encoding:

| Header | What it signs | When to use |
|---|---|---|
| `X-Signature-V2` ★ recommended | `JSON.stringify(sortKeys(shortenFloats(parsed_body)))` with unescaped Unicode | Default — works through Express / Django / FastAPI / Next.js body parsers |
| `X-Signature` | The raw request bytes verbatim | Only if you can guarantee no middleware re-encodes the body |
| `X-Signature-Simple` | `"{timestamp}:{session_id}:{status}:{webhook_type}"` | Fallback when nothing else works — does NOT verify the `decision` payload, so only use as a hint |

**Endpoint requirements (in order):**

1. Parse JSON (V2 is parser-tolerant; you can use any framework's default body parser).
2. Read headers: `X-Signature-V2` (HMAC-SHA256 hex), `X-Timestamp` (Unix seconds).
3. Reject if `abs(now - X-Timestamp) > 300` (replay protection).
4. Apply `shortenFloats` (whole-number floats → integers), then `sortKeys` (recursive lexicographic), then `JSON.stringify` (unescaped Unicode — default).
5. Compute `expected = HMAC-SHA256(DIDIT_WEBHOOK_SECRET, canonical_json, "utf8")`.
6. Compare with `X-Signature-V2` using constant-time comparison (`hmac.compare_digest` in Python, `crypto.timingSafeEqual` in Node).
7. Dispatch on `webhook_type`. Return `200` immediately even if processing is async — Didit retries 5xx/404 twice (~1 min, ~4 min).

**Node.js / Next.js App Router example (canonical V2):**

```ts
import crypto from "node:crypto";

// Server-side normalisation: convert whole-number floats to integers.
function shortenFloats(v: unknown): unknown {
  if (Array.isArray(v)) return v.map(shortenFloats);
  if (v && typeof v === "object") {
    return Object.fromEntries(
      Object.entries(v as Record<string, unknown>).map(([k, x]) => [k, shortenFloats(x)])
    );
  }
  if (typeof v === "number" && !Number.isInteger(v) && v % 1 === 0) return Math.trunc(v);
  return v;
}

// Recursively sort object keys (arrays preserved in order).
function sortKeys(v: unknown): unknown {
  if (Array.isArray(v)) return v.map(sortKeys);
  if (v && typeof v === "object") {
    return Object.keys(v as object)
      .sort()
      .reduce<Record<string, unknown>>((acc, k) => {
        acc[k] = sortKeys((v as Record<string, unknown>)[k]);
        return acc;
      }, {});
  }
  return v;
}

export async function POST(req: Request) {
  const raw = await req.text();
  const sig = req.headers.get("x-signature-v2") ?? "";
  const ts = Number(req.headers.get("x-timestamp"));
  if (!ts || Math.abs(Date.now() / 1000 - ts) > 300)
    return new Response("stale", { status: 401 });

  const parsed = JSON.parse(raw);
  const canonical = JSON.stringify(sortKeys(shortenFloats(parsed)));
  const expected = crypto
    .createHmac("sha256", process.env.DIDIT_WEBHOOK_SECRET!)
    .update(canonical, "utf8")
    .digest("hex");
  if (
    sig.length !== expected.length ||
    !crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(sig))
  )
    return new Response("bad sig", { status: 401 });

  // parsed.webhook_type → dispatch …
  return new Response("ok");
}
```

**Webhook event types:** `status.updated`, `data.updated`, `user.status.updated`, `user.data.updated`, `business.status.updated`, `business.data.updated`, `activity.created`, `transaction.created`, `transaction.status.updated`.

**Webhook body shape:**
```json
{
  "session_id": "uuid",
  "status": "Not Started | In Progress | Awaiting User | In Review | Approved | Declined | Resubmitted | Abandoned | Expired | Kyc Expired",
  "webhook_type": "status.updated",
  "timestamp": 1627680000,
  "workflow_id": "uuid",
  "vendor_data": "internal-user-id",
  "metadata": { "any": "json" },
  "decision": { /* present when Approved / Declined / In Review; absent on Expired / Abandoned / Not Started */ }
}
```

The `decision` object holds per-module **plural arrays** (V3 schema — each entry keyed by its `node_id` in the workflow):
- `id_verifications[]`: first_name, last_name, document_type, document_number, date_of_birth, nationality, expiration_date, issuing_state, address, parsed_address, mrz, front_image_quality_score, back_image_quality_score, warnings[]
- `nfc_verifications[]`: status, document_type, mrz, signature_status, chip_data
- `liveness_checks[]`: status, score (0–1), method ("passive" | "active"), reference_image
- `face_matches[]`: status, score (0–100), source_image, target_image, warnings[]
- `phone_verifications[]`: status, phone_number, carrier, is_disposable, is_virtual
- `email_verifications[]`: status, email, is_breached, is_disposable, is_undeliverable, breaches[]
- `poa_verifications[]`: status, document_type, issuer, poa_address, poa_parsed_address, issue_date, expiration_date
- `aml_screenings[]`: status, total_hits, hits[] (pep_matches, sanction_matches, warning_matches, adverse_media_matches), entity_type ("person" | "company")
- `ip_analyses[]`: status, ip_address, country, vpn, proxy, tor, hosting, risk_score
- `database_validations[]`: status, provider, match_type, fields_matched
- `questionnaire_responses`: nullable object keyed by question_id → answer

V2 → V3 migration note: V2 used singular keys (`aml`, `phone`, `email`, `poa`). V3 renamed them to plural arrays so a single workflow can run the same module multiple times on different nodes — index by `node_id`.

## Step 7 — Apply the decision to my database

```ts
switch (event.status) {
  case "Approved":       user.verified = true; user.verifiedAt = new Date(); storeDecision(event.decision); break;
  case "Declined":       user.verificationStatus = "declined"; logWarnings(event.decision); break;
  case "In Review":      user.verificationStatus = "pending_review"; break;
  case "In Progress":    user.verificationStatus = "in_progress"; break;
  case "Awaiting User":  user.verificationStatus = "awaiting_user"; break; // KYB only — waiting for a UBO / officer KYC sub-session
  case "Resubmitted":    user.verificationStatus = "resubmitted"; break; // reviewer asked the user to retry
  case "Abandoned":      scheduleReminderEmail(user); break;
  case "Expired":        break; // session URL aged out before the user finished
  case "Kyc Expired":    user.verified = false; createNewSession(user); break; // verified user's KYC has aged out per retention policy
  case "Not Started":    break;
}
```

Idempotency:
- Session webhooks: dedupe on `session_id + webhook_type + timestamp`.
- Transaction webhooks (`transaction.created`, `transaction.status.updated`): dedupe on the `event_id` field — multiple events can target the same transaction.

Didit retries 5xx/404 twice (~1 min, ~4 min after the prior failure). Return 200 even if processing is async.

## Module catalogue (use whichever ones match my use case)

| Module | Endpoint | Price | Free tier |
|---|---|---|---|
| Core KYC bundle (ID + Liveness + Face Match + IP) | session w/ workflow | **$0.33** | 500/mo (per feature) |
| ID Verification (standalone) | `POST /v3/id-verification/` | $0.20 | 500/mo |
| Passive Liveness (standalone) | `POST /v3/passive-liveness/` | $0.05 | 500/mo |
| Active Liveness | session-only | $0.15 | — |
| Face Match 1:1 | `POST /v3/face-match/` | $0.05 | 500/mo |
| Face Search 1:N | `POST /v3/face-search/` | $0.05 | — |
| Age Estimation | `POST /v3/age-estimation/` | $0.10 | — |
| AML Screening | `POST /v3/aml/` | $0.20 | — |
| Ongoing AML Monitoring | org-level continuous (per active user/yr) | $0.07 / user / year | — |
| Database Validation (gov registries) | `POST /v3/database-validation/` | variable | — |
| Proof of Address | `POST /v3/poa/` | $0.20 | — |
| Email Verification | `POST /v3/email/send/` + `POST /v3/email/check/` | $0.03 | — |
| Phone Verification (SMS / WhatsApp / voice / RCS / Telegram) | `POST /v3/phone/send/` + `POST /v3/phone/check/` | $0.04 + carrier | — |
| NFC Verification (native SDKs only) | session module | $0.15 | — |
| Biometric Authentication (re-auth) | session module | $0.10 | — |
| Device & IP Analysis | session module | $0.03 | — |
| Custom Questionnaire | session module | $0.10 | — |
| Business Verification (KYB) | `POST /v3/session/` w/ KYB workflow | $2.00 | — |
| Company AML Screening | KYB module | $0.20 | — |
| Person AML (per UBO / officer) | KYB module | $0.20 | — |
| Transaction Screening (rule engine) | `POST /v3/transactions/` | $0.02 / tx | — |
| AML Transaction Screening (counterparty sanctions + on-chain wallet risk) | inside `/v3/transactions/` | $0.15 / tx | — |
| Reusable KYC (share verified user across partners) | session feature | Free | — |
| White Label | workflow option | $0.20 | — |

## Operational APIs your code should know

| Action | Endpoint |
|---|---|
| Read full decision JSON | `GET /v3/session/{id}/decision/` |
| List sessions (filter by status, workflow, vendor_data, date) | `GET /v3/sessions` |
| Manually approve / decline / request review | `PATCH /v3/session/{id}/update-status/` |
| Patch metadata or extracted data | `PATCH /v3/session/{id}/update-data/` |
| Download compliance PDF | `GET /v3/session/{id}/generate-pdf` |
| Delete a session (GDPR / cleanup) | `DELETE /v3/session/{id}/delete/` |
| Share session with a partner (Reusable KYC) | `POST /v3/session/{id}/share/` |
| Submit a transaction for monitoring | `POST /v3/transactions/` |
| List / create lists (blocklist, allowlist, custom) | `GET/POST /v3/lists/` |
| Add entry to a list | `POST /v3/lists/{id}/entries/` |
| Upload a face image to a blocklist | `POST /v3/lists/{id}/entries/face-upload/` |
| Check credit balance | `GET /v3/billing/balance/` |
| Top up credits (returns Stripe checkout URL) | `POST /v3/billing/top-up/` |
| List / update / delete vendor users | `GET/PATCH /v3/users/`, `/v3/users/{vendor_data}/` |
| List / update / delete vendor businesses | `GET/PATCH /v3/businesses/` |

Every `/v3/...` endpoint above is served from `https://verification.didit.me` (the canonical OpenAPI server) and authenticates with `x-api-key`. Auth/registration is the only surface on `https://apx.didit.me`.

## Best-practice checklist before you mark this done

- [ ] `DIDIT_API_KEY`, `DIDIT_WORKFLOW_ID`, `DIDIT_WEBHOOK_SECRET` in env. Never committed.
- [ ] Backend route that creates a session for a given user, returns `url` (the hosted verification URL on `verify.didit.me`) and the `session_id`.
- [ ] Frontend that opens the session `url` via the right SDK / iframe / redirect for my stack.
- [ ] Webhook endpoint with: `X-Timestamp` freshness check (≤ 300s), canonical-V2 JSON re-serialisation (`shortenFloats` → `sortKeys` → unescaped `JSON.stringify`) HMAC-SHA256, constant-time compare against `X-Signature-V2`, dispatch on `webhook_type`, return 200.
- [ ] DB schema + update logic for `status in (Not Started, In Progress, Awaiting User, In Review, Approved, Declined, Resubmitted, Abandoned, Expired, Kyc Expired)`.
- [ ] Idempotent webhook handler (dedupe on `session_id + webhook_type`).
- [ ] No API key shipped to the browser. The session creation is server-side only.
- [ ] User-facing consent / disclosure shown BEFORE the session `url` opens (Didit handles biometric consent inside its flow but the legal layer outside is the integrator's responsibility).
- [ ] (Optional) `/v3/session/{id}/generate-pdf` surfaced in compliance UI.

## When you need more detail

- API root: `https://verification.didit.me/v3/` (everything `/v3/`). Auth only: `https://apx.didit.me/auth/v2/programmatic/register/`.
- Sessions overview: `https://docs.didit.me/sessions-api/overview`
- Standalone APIs index: `https://docs.didit.me/standalone-apis/id-verification`
- Programmatic registration: `https://docs.didit.me/integration/programmatic-registration`
- AI agent / MCP integration: `https://docs.didit.me/integration/ai-agent-integration`
- Webhooks reference: `https://docs.didit.me/integration/webhooks`
- SDKs overview: `https://docs.didit.me/integration/sdks`
- Full OpenAPI 3 spec: `https://docs.didit.me/openapi-25.json`
- MCP server config (drop into `.cursor/mcp.json`, `claude_desktop_config.json`, or equivalent):

```json
{
  "mcpServers": {
    "didit": {
      "command": "npx",
      "args": ["@didit-protocol/mcp-server"],
      "env": { "DIDIT_API_KEY": "your_api_key" }
    }
  }
}
```

The MCP server exposes 40+ tools spanning auth, sessions, workflows, questionnaires, users, billing, blocklist, and every standalone API — see `https://docs.didit.me/integration/ai-agent-integration` for the full tool catalogue.

Now build the integration. If anything in `## My application context` is missing, ask once at the top of your reply, then ship the complete change set: env vars wired, backend route, frontend SDK call, webhook endpoint with signature verification, decision-handling DB logic, and idempotent dedupe. Use my stack's idioms (`fetch` / `axios` / `requests` / `okhttp`), keep the API key server-side only, and follow the verification status state machine above.
Вставьте в Claude Code, Codex или Cursor · обеспечивает полную интеграцию
03 · Модульный

Любой поток. Любая страна. Любой вариант использования.

Составляйте любой поток из более чем 25 модулей, более 1000 государственных источников данных, более 220 стран, более 14000 типов документов и более 48 языков. Один и тот же оркестратор запускает биометрическую аутентификацию, KYC для необанка, KYB для B2B финтеха, Travel Rule для криптобиржи или постоянный AML для маркетплейса — вы выбираете проверки и порядок.
Посмотреть все модули
Рабочий процессkyc-onboarding-v3
220+ стран
  • ID Verification
  • Passive Liveness
  • Face Match 1:1
  • AML Screening
  • Device & IP Analysis
  • Подтверждение адреса
  • Чтение NFC
  • Проверка телефона
  • Проверка кошелька
  • Пользовательская анкета
+ еще 15 модулей · 1000+ источников данных$0.33/сессия
04 · Самообслуживание

Без платного доступа. Без звонков от продажников. Просто попробуйте.

Песочница открыта с первой минуты. Документация и API общедоступны, без демонстрационного барьера между вами и кодом. Зарегистрируйтесь, получите ключ, запустите в тот же день. Наша команда продаж всегда рядом, когда она вам нужна — но никогда не является препятствием.
Попробовать песочницу
Рабочий ключ API
В прямом эфире
didit_sk_live_8f4c2a…9bf3

Выпущено только что — без карты, без контракта, без звонка.

  • Без минимума
  • Без контракта
  • 500 бесплатно / мес
  • Открытая песочница
05 · Оплата по факту использования

Платите за то, что используете. И всё.

Didit в 3–5 раз дешевле, чем существующие поставщики KYC, со всеми ценами, опубликованными на /pricing — $0.33 за полный пакет KYC, $0.15 за проверку кошелька, $0.03 за анализ устройства и IP, 500 бесплатных проверок каждый месяц. Без минимумов, без годовых контрактов, без неожиданных переплат — цена на странице это цена в счете.
Посмотреть все цены
Публичный прайс-лист
/pricing
  • ID Verification$0.15
  • Passive Liveness$0.10
  • Face Match 1:1$0.05
  • AML Screening$0.20
  • Device & IP Analysis$0.03
  • Проверка кошелька (KYT)$0.15
Полный пакет KYC$0.33

500 бесплатно / месяц · без минимума · без годового контракта.

06 · Открытая инфраструктура

Открытый API. Стройте на его основе.

Каждая конечная точка открыта и документирована — изменяйте статус сессии, блокируйте лицо, загружайте PDF-файл решения, редактируйте рабочий процесс или запрашивайте журнал событий. Веб-хуки подписываются с помощью кода аутентификации сообщений на основе хеша (HMAC), поэтому вы можете доказать, что каждое событие пришло от нас. Didit — это инфраструктура, а не закрытое приложение.
Просмотреть API
REST · OpenAPI 3
docs.didit.me
  • POST/v3/session/
  • GET/v3/session/{id}/decision/
  • PATCH/v3/session/{id}/update-status/
  • GET/v3/session/{id}/generate-pdf
  • POST/v3/lists/{id}/entries/face-upload/
  • POST/v3/transactions/

Каждая конечная точка открыта · каждый веб-хук подписан HMAC.

07 · SDK

SDK для каждой платформы.

Комплект для разработки программного обеспечения (SDK) для каждого стека — Web, iOS, Android, React Native, Flutter. На бэкенде — REST API, подписанные веб-хуки, спецификация OpenAPI 3 и готовые интеграции с Zapier, Shopify и Salesforce. Каждая поверхность поставляется с примерами, типами и 5-минутным руководством по началу работы.
Просмотреть SDK
Webv1.4.0iOSv3.0.1Androidv2.6.2
React Nativev1.8.0Flutterv1.3.4
08 · Инфраструктура, оптимизированная для масштабирования

Самые быстрые проверки на рынке.

99% проверок завершаются менее чем за 2 секунды, от начала до конца — измерено в производстве, а не заявлено в презентации. Мы стремимся к соглашению об уровне обслуживания (SLA) 99,99%, поддерживали 100% бесперебойной работы в течение последних 12 месяцев и никогда не были взломаны. Настроено для каждого устройства и сети — iPhone, Android, настольный компьютер, планшет, 5G или 2G — и уже обрабатывает миллионы проверок в месяц.
Посмотреть текущий статус
Сквозная задержка · 30 дней
SLA 99,99%
  • p500.82s
  • p951.42s
  • p991.89s

Самые быстрые проверки на рынке · iPhone, Android, настольный компьютер, планшет, 5G или 2G.

Три уровня, один прайс-лист

Начните бесплатно. Платите за использование. Масштабируйтесь до Enterprise.

500 бесплатных проверок каждый месяц, навсегда. Оплата по мере использования для продакшена. Индивидуальные контракты, хранение данных и SLA (соглашения об уровне обслуживания) для Enterprise.
Бесплатно

Бесплатно

$0 / месяц. Кредитная карта не требуется.

  • Бесплатный пакет KYC (проверка личности + пассивная проверка живости + сопоставление лиц + анализ устройства и IP) — 500 / месяц, каждый месяц
  • Заблокированные пользователи
  • Обнаружение дубликатов
  • Более 200 сигналов мошенничества в каждой сессии
  • Многоразовый KYC в сети Didit
  • Платформа управления кейсами
  • Конструктор рабочих процессов
  • Публичная документация, песочница, SDK, MCP (Model Context Protocol) сервер
  • Поддержка сообщества
Самый популярный
Оплата по мере использования

Оплата по мере использования

Платите только за то, что используете. Более 25 модулей. Публичные цены за модуль, без ежемесячной минимальной платы.

  • Полный KYC за $0.33 (ID + биометрия + IP / устройство)
  • Более 10 000 наборов данных AML — санкции, PEP, негативные упоминания в СМИ
  • Более 1000 государственных источников данных для проверки баз данных
  • Мониторинг транзакций за $0.02 за транзакцию
  • KYB в реальном времени за $2.00 за компанию
  • Проверка кошельков за $0.15 за проверку
  • Поток верификации с белой этикеткой — ваш бренд, наша инфраструктура
Корпоративный

Корпоративный

Индивидуальные MSA и SLA. Для больших объемов и регулируемых программ.

  • Годовые контракты
  • Индивидуальные MSA, DPA и SLA
  • Выделенный канал Slack и WhatsApp
  • Ручные проверяющие по запросу
  • Условия для реселлеров и белой этикетки
  • Эксклюзивные функции и партнерские интеграции
  • Назначенный CSM, проверка безопасности, поддержка соответствия требованиям

Начните бесплатно → платите только при выполнении проверки → разблокируйте Enterprise для индивидуального контракта, SLA или хранения данных.

FAQ

Вопросы разработчиков, ответы.

Те же ответы, которые мы отправляем инженерным командам во время интеграционного звонка. Все остальное — support@didit.me.
Как мне интегрировать Didit?

Пять шагов от регистрации до первого вердикта.

  • Создайте свою учетную запись на business.didit.me или вызовите POST https://apx.didit.me/auth/v2/programmatic/register/.
  • Создайте рабочий процесс в Business Console или вызовите POST /v3/workflows/.
  • Зарегистрируйте целевой вебхук через консоль или вызовите POST /v3/webhook/destinations/ (Didit возвращает секрет подписи в ответе).
  • Создайте сессию с помощью POST /v3/session/, передав workflow_id и vendor_data (ваш идентификатор пользователя). Перенаправьте пользователя на возвращенный URL — или вставьте нативный Software Development Kit (SDK) в тот же контракт /v3/.
  • Получите вердикт по подписанному вебхуку или опросите GET /v3/session/:session_id/decision/.

Один Application Programming Interface (API) /v3/ охватывает Know Your Customer (KYC), Know Your Business (KYB), мониторинг транзакций и проверку кошельков (KYT — знай свою транзакцию). 500 проверок бесплатно каждый месяц, навсегда, без кредитной карты.

Есть ли песочница, с которой я могу поиграть прямо сейчас?

Да — менее чем за шестьдесят секунд, без кредитной карты. Зарегистрируйтесь на business.didit.me (или зарегистрируйтесь программно с помощью POST https://apx.didit.me/auth/v2/programmatic/register/) и вы попадете в рабочее пространство песочницы с реальным ключом Application Programming Interface (API).

  • Та же форма, что и в производстве — детерминированные решения, каждый модуль разблокирован.
  • Реальные конечные точки /v3/, реальные вебхуки, реальные образцы документов.
  • Переключитесь на "живой" режим, когда будете готовы — те же ключи, те же Uniform Resource Locators (URL), тот же контракт.
Какие Software Development Kits (SDK) вы поставляете?

Пять собственных SDK, все с открытым исходным кодом, все в общедоступной документации:

  • Web — JavaScript / TypeScript, независимый от фреймворка, встраивание iframe или перенаправление на размещенный поток.
  • iOS — Swift, распространяется как XCFramework.
  • Android — Kotlin, через Maven Central.
  • React Native — привязки TypeScript поверх нативных модулей (TurboModules).
  • Flutter — оболочка Dart вокруг тех же нативных SDK.

Каждый SDK вызывает один и тот же контракт /v3/ под капотом, поэтому вы можете смешивать и сочетать — Web на вашем сайте, нативный на мобильном устройстве. Ссылка на docs.didit.me/integration/web-sdks/overview.

Как работают вебхуки?

Зарегистрируйте одну цель; Didit подписывает каждую доставку.

  • Настройте свою конечную точку через Business Console — или вызовите POST /v3/webhook/destinations/ с label, url и subscribed_events.
  • Didit возвращает secret_shared_key в ответе. Используйте его для проверки подписи Hash-based Message Authentication Code (HMAC)-SHA256 на каждом входящем вебхуке (заголовок: X-Signature-V2).
  • Каждая полезная нагрузка содержит точный, чувствительный к регистру status"Approved", "Declined", "In Review", "Resubmitted" и другие. Полная конечная машина состояний на docs.didit.me/integration/verification-statuses.
  • Повторные попытки используют экспоненциальную задержку до тех пор, пока вы не вернете 2xx; каждая доставка регистрируется и может быть воспроизведена по запросу из консоли.

Полная справка на docs.didit.me/integration/webhooks.

Каковы ограничения скорости и что происходит при масштабировании?

Щедрые настройки по умолчанию для каждого плана, настраиваемые для каждой учетной записи.

  • Бесплатный уровень — песочница плюс 500 производственных проверок каждый месяц, навсегда.
  • Оплата по мере использования — лимиты автоматически масштабируются в зависимости от постоянного объема. Вы не столкнетесь с ограничениями в середине запуска.
  • Enterprise — настраиваемые ограничения скорости, выделенная мощность и обязательства по бесперебойной работе в Генеральном соглашении об услугах (MSA). Свяжитесь с нами по адресу support@didit.me.

Целевая мощность для каждого региона на status.didit.me. 100% реальное время бесперебойной работы за последние 6 месяцев при миллионах проверок в месяц.

Могу ли я интегрироваться с Claude Code, Cursor или другими инструментами AI-кодирования?

Да — вставьте один промпт и запустите. Вставьте канонический промпт интеграции с docs.didit.me/integration/integration-prompt в Claude Code, Cursor, Codex, Devin, Aider или Replit Agent. Агент настраивает рабочий процесс, подключает веб-хук и выполняет сквозное дымовое тестирование.

Сессии, инициированные агентом, оплачиваются по той же публичной цене, что и прямые вызовы API — $0.33 за полную проверку Know Your Customer (KYC), $0.15 за отдельную проверку удостоверения личности, $0.15 за проверку кошелька. Бесплатно, без дополнительной настройки, работает с любым клиентом, поддерживающим Model Context Protocol (MCP).

Где находится журнал изменений и как вы версионируете API?

Ежемесячные примечания к выпуску на `docs.didit.me/changelog` — каждый выпущенный модуль, каждое добавленное событие веб-хука, каждое критическое изменение указано.

  • Спецификация OpenAPI 3.1 на docs.didit.me/openapi-25.json версионируется вместе с документацией. Импортируйте ее в Postman или генерируйте клиенты на любом языке.
  • Версионирование по умолчанию является аддитивным. Новые поля, новые необязательные параметры и новые события веб-хуков поставляются без увеличения версии. Критические изменения получают новое пространство имен /v4/ и опубликованное окно устаревания.
  • Мы никогда не меняем значение поля без уведомления — если изменяется форма вердикта, схема подписи или перечисление статусов, это поставляется за заголовком и объявляется до перехода.
Как я могу отслеживать время безотказной работы и каков процесс обработки инцидентов?

`status.didit.me` публикует информацию о времени безотказной работы в реальном времени и историю инцидентов для каждого региона — проверка, веб-хуки, консоль, документация. Вход не требуется.

  • Подпишитесь через Really Simple Syndication (RSS), электронную почту или веб-хук для получения оповещений о сбоях.
  • История: 100% реальное время безотказной работы за последние 6 месяцев; целевой показатель доступности 99,99% в Соглашении об уровне обслуживания (SLA).
  • Каждый инцидент получает публичный анализ на той же странице.
  • Корпоративные контракты включают назначенного дежурного инженера, выделенный общий канал Slack или Microsoft Teams и целевые показатели уровня обслуживания по серьезности инцидентов в Генеральном соглашении об услугах (MSA).

Инфраструктура для идентификации и борьбы с мошенничеством.

Единый API для KYC, KYB, мониторинга транзакций и проверки кошельков. Интеграция за 5 минут.

Попросите ИИ обобщить эту страницу