Pular para o conteúdo principal
Didit Arrecada US$ 2 milhões e se Junta à Y Combinator (W26)
Didit
Desenvolvedores

A melhor forma de integrar
identidade e fraude.

Abra o sandbox, cole um curl e implemente em 5 minutos. Documentos públicos, cinco Software Development Kits (SDKs) e um servidor Model Context Protocol (MCP) para que um agente de codificação de Inteligência Artificial (IA) possa integrar o Didit para você. $0.33 por verificação KYC completa, 500 gratuitas por mês.

Apoiado por
Y Combinator
GBTC Finance
Bondex
Crnogorski Telekom
UCSF Neuroscape
Shiply
Adelantos

Confiado por mais de 2.000 organizações em todo o mundo.

Início rápido

De zero a verificado em cinco minutos.

Cinco passos do cadastro ao primeiro usuário verificado. Cada passo combina um caminho do Console de Negócios com um caminho programático da Interface de Programação de Aplicativos (API). Ou pule todas as etapas — cole o prompt de integração em docs.didit.me/integration/integration-prompt no seu agente de codificação de IA.
01 · Cadastre-se

Crie sua conta Didit.

  • No Console de Negócios: cadastre-se em business.didit.me em menos de sessenta segundos — sem cartão, sem barreira de vendas.
  • Por Interface de Programação de Aplicativos (API): chame POST https://apx.didit.me/auth/v2/programmatic/register/, depois POST .../verify-email/.

Qualquer caminho lhe dará uma chave de API de sandbox — com a mesma forma da produção, todos os módulos desbloqueados.

API de Registro Programático
Chave de API de produção
Ao vivo
didit_sk_live_8f4c2a…9bf3

Emitido agora — sem cartão, sem contrato, sem ligação.

  • Sem mínimo
  • Sem contrato
  • 500 grátis / mês
  • Sandbox aberto
02 · Crie o fluxo de trabalho

Escolha os módulos. Componha o fluxo de trabalho.

  • No Console de Negócios: arraste e solte os módulos no Construtor de Fluxo de Trabalho — Verificação de Documento de Identidade, Liveness Passiva, Correspondência Facial, Antilavagem de Dinheiro (AML), Rastreamento de Carteira, Análise de Protocolo de Internet (IP) e mais 19.
  • Por API: chame POST /v3/workflows/ em verification.didit.me com os módulos que você deseja.

Qualquer caminho retorna um workflow_id que você passará em cada sessão.

Criar API de Fluxo de Trabalho
Fluxo de trabalhokyc-onboarding-v3
Mais de 220 países
  • ID Verification
  • Passive Liveness
  • Face Match 1:1
  • AML Screening
  • Device & IP Analysis
  • Comprovante de Endereço
  • Leitura NFC
  • Verificação de Telefone
  • Triagem de Carteira
  • Questionário Personalizado
+ 15 módulos adicionais · mais de 1.000 fontes de dados$0.33/sessão
03 · Registre o webhook

Configure um destino de webhook para cada veredito.

  • No Console de Negócios: adicione sua Uniform Resource Locator (URL) do webhook, escolha os eventos e copie o segredo de assinatura que o Didit gera.
  • Por API: chame POST /v3/webhook/destinations/ com label, url e subscribed_events. A resposta retorna a secret_shared_key que o Didit usa para assinar cada entrega.
Criar API de Destino de Webhook
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/

Cada endpoint aberto · cada webhook assinado com HMAC.

04 · Integre em seu aplicativo

Crie uma sessão — Software Development Kit (SDK) ou API direta.

  • Com um Software Development Kit (SDK): insira o SDK nativo para Web, iOS, Android, React Native ou Flutter — o mesmo contrato /v3/ por baixo.
  • Por API: chame POST /v3/session/ com o workflow_id e um valor vendor_data (seu identificador de usuário).

A resposta fornece uma URL de verificação para redirecionar ou incorporar em seu aplicativo.

Ver os SDKs
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"
  }'
201Criado
{ "session_id": "4c5c7f3a-...", "url": "verify.didit.me/..." }
05 · Receba o veredito

Ouça o webhook — ou faça sondagem.

  • Webhook em tempo real: seu endpoint é acionado a cada mudança de estado. Leia o status ("Approved", "Declined", "In Review", "Resubmitted", …), atualize seu banco de dados, envie.
  • Por sondagem: chame GET /v3/session/:session_id/decision/ para o mesmo payload — útil quando sua pilha não pode aceitar tráfego de entrada.

As strings de status são exatas e diferenciam maiúsculas de minúsculas. Máquina de estado completa em docs.didit.me/integration/verification-statuses.

Status de Verificação
Eventos
live
  • session.verified2.4s ago200 OK
  • session.review_started12s ago200 OK
  • session.aml_hit1m ago200 OK
  • session.declined3m ago200 OK
Crie com Didit

Todas as superfícies, públicas. Zero chamadas de vendas.

Leia a documentação, chame a Interface de Programação de Aplicativos (API), conecte-se a um servidor Model Context Protocol (MCP), cole um prompt de integração ou envie uma habilidade de agente pré-construída — tudo público, tudo gratuito.
Documentação

Encontre cada módulo, endpoint e webhook.

Início rápido

Envie um fluxo KYC em 5 minutos.

Referência da API

Leia a especificação OpenAPI 3.1.

SDKs

Incorpore na Web, iOS, Android, React Native ou Flutter.

Webhooks

Receba eventos assinados por HMAC em cada mudança de estado.

Status de verificação

Leia a máquina de estado completa da sessão.

Prompt de integração

Cole um prompt. Envie a integração KYC.

Servidor MCP

Conecte o Didit a qualquer cliente MCP.

Habilidades do Agente

Habilidades pré-construídas de verificação, AML e KYB.

Integração em cinco minutos

Um curl. Cinco SDKs.

Inicie uma sessão de verificação com um curl, ou incorpore o fluxo na Web, iOS, Android, React Native ou Flutter — o mesmo contrato /v3/ por baixo.
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"
  }'
201Criado
{ "session_id": "4c5c7f3a-...", "url": "verify.didit.me/..." }
Webv1.4.0iOSv3.0.1Androidv2.6.2
React Nativev1.8.0Flutterv1.3.4
Para desenvolvedores · Para agentes de IA · Aberto por design

Construído para desenvolvedores e agentes de IA.

Integre as verificações de identidade e fraude do Didit com uma Interface de Programação de Aplicativos (API). Abra o sandbox, leia a documentação pública, conecte-se a um servidor Model Context Protocol (MCP) ou obtenha um Software Development Kit (SDK) para qualquer stack. Desenvolvedores implementam em uma tarde; agentes de codificação de IA implementam em um prompt — sem UI, sem intervenção humana, sem chamada de vendas, sem mínimos.
01 · Uma API

Uma API para identidade e fraude.

Uma Interface de Programação de Aplicativos (API) abrange todas as verificações de identidade e fraude — Know Your Customer (KYC), Know Your Business (KYB), Anti-Money Laundering (AML), monitoramento de transações, correspondência biométrica. Mesma chave, mesmo motor de fluxo de trabalho, encadeável em uma única sessão — sem trabalho extra de integração entre produtos.
Leia a documentação da 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"
  }'
201Criado
{ "session_id": "4c5c7f3a-...", "url": "verify.didit.me/..." }
02 · Nativo para agentes

Integre em um único prompt.

Nosso servidor Model Context Protocol (MCP) está ativo e as habilidades do agente foram publicadas. Peça ao Claude Code, Codex ou Cursor para integrar o Didit — o agente cria o espaço de trabalho, configura o fluxo de trabalho e envia a primeira chamada de API por conta própria. Sem painel, sem humano, sem ticket de suporte.
Leia o prompt de integração
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.
Cole no Claude Code, Codex ou Cursor · entrega a integração completa
03 · Modular

Qualquer fluxo. Qualquer país. Qualquer caso de uso.

Componha qualquer fluxo a partir de mais de 25 módulos, mais de 1.000 fontes de dados governamentais, mais de 220 países, mais de 14.000 tipos de documentos e mais de 48 idiomas. O mesmo orquestrador executa autenticação biométrica, KYC para um neobanco, KYB para uma fintech B2B, Travel Rule para uma exchange de criptomoedas ou AML contínuo para um marketplace — você escolhe as verificações e a ordem.
Veja todos os módulos
Fluxo de trabalhokyc-onboarding-v3
Mais de 220 países
  • ID Verification
  • Passive Liveness
  • Face Match 1:1
  • AML Screening
  • Device & IP Analysis
  • Comprovante de Endereço
  • Leitura NFC
  • Verificação de Telefone
  • Triagem de Carteira
  • Questionário Personalizado
+ 15 módulos adicionais · mais de 1.000 fontes de dados$0.33/sessão
04 · Autoatendimento

Sem paywall. Sem ligação de vendas. Vá brincar com ele.

O sandbox está aberto desde o primeiro minuto. A documentação e a API são públicas, sem portão de demonstração entre você e o código. Inscreva-se, pegue uma chave, envie no mesmo dia. Nossa equipe de vendas está disponível quando você quiser — nunca como um obstáculo.
Experimente o sandbox
Chave de API de produção
Ao vivo
didit_sk_live_8f4c2a…9bf3

Emitido agora — sem cartão, sem contrato, sem ligação.

  • Sem mínimo
  • Sem contrato
  • 500 grátis / mês
  • Sandbox aberto
05 · Baseado no uso

Pague pelo que usar. É isso.

Didit é 3 a 5 vezes mais barato que os fornecedores de KYC existentes, com todos os preços públicos em /pricing — $0.33 pacote completo de KYC, $0.15 triagem de carteira, $0.03 análise de Dispositivo e IP, 500 verificações gratuitas todos os meses. Sem mínimos, sem contratos anuais, sem surpresas de excesso — o preço na página é o preço na fatura.
Veja todos os preços
Lista de preços pública
/pricing
  • ID Verification$0.15
  • Passive Liveness$0.10
  • Face Match 1:1$0.05
  • AML Screening$0.20
  • Device & IP Analysis$0.03
  • Triagem de Carteira (KYT)$0.15
Pacote KYC completo$0.33

500 grátis / mês · sem mínimo · sem contrato anual.

06 · Infraestrutura aberta

API aberta. Construa em cima.

Cada endpoint é aberto e documentado — altere o status de uma sessão, bloqueie um rosto, baixe um PDF de decisão, edite um fluxo de trabalho ou consulte o log de eventos. Os webhooks são assinados com Hash-based Message Authentication Code (HMAC), para que você possa provar que cada evento veio de nós. Didit é infraestrutura, não um aplicativo fechado.
Navegue pela 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/

Cada endpoint aberto · cada webhook assinado com HMAC.

07 · SDKs

SDKs para todas as plataformas.

Um Software Development Kit (SDK) para cada stack — Web, iOS, Android, React Native, Flutter. No backend, uma API REST, webhooks assinados, uma especificação OpenAPI 3 e integrações prontas para Zapier, Shopify e Salesforce. Cada superfície é fornecida com exemplos, tipos e um guia de introdução de 5 minutos.
Navegar pelos SDKs
Webv1.4.0iOSv3.0.1Androidv2.6.2
React Nativev1.8.0Flutterv1.3.4
08 · Infraestrutura otimizada para escala

As verificações mais rápidas do mercado.

99% das verificações são concluídas em menos de 2 segundos, de ponta a ponta — medido em produção, não apenas declarado em uma apresentação. Nosso objetivo é um Acordo de Nível de Serviço (SLA) de 99,99%, mantivemos 100% de tempo de atividade nos últimos 12 meses e nunca fomos violados. Otimizado para todos os dispositivos e redes — iPhone, Android, desktop, tablet, 5G ou 2G — e já realizando milhões de verificações por mês.
Ver status ao vivo
Latência de ponta a ponta · 30d
SLA de 99,99%
  • p500.82s
  • p951.42s
  • p991.89s

Verificações mais rápidas do mercado · iPhone, Android, desktop, tablet, 5G ou 2G.

Três níveis, uma lista de preços

Comece grátis. Pague pelo uso. Escale para o Enterprise.

500 verificações gratuitas todos os meses, para sempre. Pague conforme o uso para produção. Contratos personalizados, residência de dados e SLAs (Service Level Agreements) no Enterprise.
Grátis

Grátis

$0 / mês. Não é necessário cartão de crédito.

  • Pacote KYC gratuito (Verificação de ID + Prova de Vida Passiva + Correspondência Facial + Análise de Dispositivo e IP) — 500 / mês, todos os meses
  • Usuários Bloqueados
  • Detecção de Duplicidade
  • Mais de 200 sinais de fraude em cada sessão
  • KYC reutilizável em toda a rede Didit
  • Plataforma de Gerenciamento de Casos
  • Construtor de Fluxo de Trabalho
  • Documentos públicos, sandbox, SDKs, servidor MCP (Model Context Protocol)
  • Suporte da comunidade
Mais popular
Pague pelo uso

Baseado em Uso

Pague apenas pelo que usar. Mais de 25 módulos. Preços públicos por módulo, sem taxa mínima mensal.

  • KYC completo por $0.33 (ID + Biometria + IP / Dispositivo)
  • Mais de 10.000 conjuntos de dados AML — sanções, PEPs, mídias adversas
  • Mais de 1.000 fontes de dados governamentais para Validação de Banco de Dados
  • Monitoramento de Transações por $0.02 por transação
  • KYB ao vivo por $2.00 por empresa
  • Triagem de Carteira por $0.15 por verificação
  • Fluxo de verificação Whitelabel — sua marca, nossa infraestrutura
Empresarial

Empresarial

MSA e SLA personalizados. Para grandes volumes e programas regulamentados.

  • Contratos anuais
  • MSA, DPA e SLA personalizados
  • Canal dedicado no Slack e WhatsApp
  • Revisores manuais sob demanda
  • Termos de revenda e white-label
  • Recursos exclusivos e integrações de parceiros
  • CSM nomeado, revisão de segurança, suporte de conformidade

Comece grátis → pague apenas quando uma verificação for executada → desbloqueie o Enterprise para um contrato personalizado, SLA ou residência de dados.

FAQ

Perguntas de desenvolvedores, respondidas.

As mesmas respostas que enviamos às equipes de engenharia durante uma chamada de integração. Qualquer outra coisa — support@didit.me.
Como eu integro o Didit?

Cinco passos do cadastro ao primeiro veredito.

  • Crie sua conta em business.didit.me, ou chame POST https://apx.didit.me/auth/v2/programmatic/register/.
  • Crie um fluxo de trabalho no Business Console, ou chame POST /v3/workflows/.
  • Registre um destino de webhook via console, ou chame POST /v3/webhook/destinations/ (Didit retorna o segredo de assinatura na resposta).
  • Crie uma sessão com POST /v3/session/, passando workflow_id e vendor_data (seu identificador de usuário). Redirecione o usuário para a URL retornada — ou insira um Software Development Kit (SDK) nativo no mesmo contrato /v3/.
  • Receba o veredito no webhook assinado, ou consulte GET /v3/session/:session_id/decision/.

Uma Application Programming Interface (API) /v3/ abrange Know Your Customer (KYC), Know Your Business (KYB), Monitoramento de Transações e Triagem de Carteiras (KYT — know your transaction). 500 verificações gratuitas por mês, para sempre, sem cartão de crédito.

Existe um sandbox com o qual eu possa brincar agora?

Sim — em menos de sessenta segundos, sem cartão de crédito. Cadastre-se em business.didit.me (ou registre-se programaticamente com POST https://apx.didit.me/auth/v2/programmatic/register/) e você entrará em um espaço de trabalho sandbox com uma chave de Application Programming Interface (API) real.

  • Mesma estrutura da produção — decisões determinísticas, todos os módulos desbloqueados.
  • Endpoints /v3/ reais, webhooks reais, exemplos de documentos reais.
  • Mude para o modo ativo quando estiver pronto — mesmas chaves, mesmas Uniform Resource Locators (URLs), mesmo contrato.
Quais Software Development Kits (SDKs) vocês fornecem?

Cinco SDKs de primeira parte, todos de código aberto, todos na documentação pública:

  • Web — JavaScript / TypeScript, agnóstico de framework, incorporação de iframe ou redirecionamento de fluxo hospedado.
  • iOS — Swift, distribuído como XCFramework.
  • Android — Kotlin, via Maven Central.
  • React Native — bindings TypeScript sobre módulos nativos (TurboModules).
  • Flutter — wrapper Dart em torno dos mesmos SDKs nativos.

Cada SDK chama o mesmo contrato /v3/ por baixo dos panos, então você pode misturar e combinar — Web em seu site, nativo no celular. Referência em docs.didit.me/integration/web-sdks/overview.

Como funcionam os webhooks?

Registre um destino; Didit assina cada entrega.

  • Configure seu endpoint via Business Console — ou chame POST /v3/webhook/destinations/ com label, url e subscribed_events.
  • Didit retorna uma secret_shared_key na resposta. Use-a para verificar a assinatura Hash-based Message Authentication Code (HMAC)-SHA256 em cada webhook de entrada (cabeçalho: X-Signature-V2).
  • Cada payload carrega um status exato e sensível a maiúsculas e minúsculas — "Approved", "Declined", "In Review", "Resubmitted" e mais. Máquina de estados completa em docs.didit.me/integration/verification-statuses.
  • As retentativas usam backoff exponencial até que você retorne 2xx; cada entrega é registrada e reproduzível sob demanda do console.

Referência completa em docs.didit.me/integration/webhooks.

Quais são os limites de taxa e o que acontece em escala?

Padrões generosos em todos os planos, ajustados para cima por conta.

  • Nível gratuito — sandbox mais 500 verificações de produção por mês, para sempre.
  • Pagamento por uso — os limites de pico escalam automaticamente com o volume sustentado. Você não vai bater em uma parede no meio do lançamento.
  • Empresarial — limites de taxa personalizados, capacidade dedicada e compromissos de tempo de atividade no Contrato de Serviços Mestre (MSA). Fale conosco em support@didit.me.

Capacidade alvo por região em status.didit.me. 100% de tempo de atividade real nos últimos 6 meses em milhões de verificações por mês.

Posso integrar com Claude Code, Cursor ou outras ferramentas de codificação de IA?

Sim — cole um prompt e envie. Insira o prompt de integração canônico em docs.didit.me/integration/integration-prompt no Claude Code, Cursor, Codex, Devin, Aider ou Replit Agent. O agente provisiona o fluxo de trabalho, conecta o webhook e executa um teste de fumaça de ponta a ponta.

As sessões iniciadas por agente pagam o mesmo preço público que as chamadas diretas da API — $0.33 por Know Your Customer (KYC) completo, $0.15 por Verificação de Documento de Identidade autônoma, $0.15 por verificação de carteira. Gratuito, sem configuração extra, funciona com qualquer cliente compatível com Model Context Protocol (MCP).

Onde está o changelog e como vocês versionam a API?

Notas de lançamento mensais em `docs.didit.me/changelog` — cada módulo enviado, cada evento de webhook adicionado, cada mudança disruptiva destacada.

  • A especificação OpenAPI 3.1 em docs.didit.me/openapi-25.json é versionada junto com a documentação. Importe-a para o Postman ou gere clientes em qualquer idioma.
  • O versionamento é aditivo por padrão. Novos campos, novos parâmetros opcionais e novos eventos de webhook são enviados sem um aumento de versão. Mudanças disruptivas recebem um novo namespace /v4/ e uma janela de descontinuação publicada.
  • Nós nunca mudamos silenciosamente o significado de um campo — se a forma de um veredito, esquema de assinatura ou enum de status mudar, ele é enviado por trás de um cabeçalho e anunciado antes da transição.
Como monitoro o tempo de atividade e qual é o processo de incidente?

`status.didit.me` publica o tempo de atividade em tempo real e o histórico de incidentes por região — verificação, webhooks, console, documentos. Não é necessário fazer login.

  • Assine via Really Simple Syndication (RSS), e-mail ou webhook para alertas de interrupção.
  • Histórico: 100% de tempo de atividade real nos últimos 6 meses; meta de disponibilidade de 99,99% no Acordo de Nível de Serviço (SLA).
  • Cada incidente recebe um post-mortem público na mesma página.
  • Contratos empresariais adicionam um engenheiro de plantão nomeado, um canal compartilhado dedicado no Slack ou Microsoft Teams e Objetivos de Nível de Serviço de gravidade de incidente no Contrato de Serviços Mestre (MSA).

Infraestrutura para identidade e fraude.

Uma API para KYC, KYB, Monitoramento de Transações e Triagem de Carteira. Integre em 5 minutos.

Peça a uma IA para resumir esta página