تجاوز إلى المحتوى الرئيسي
Didit تجمع 2 مليون دولار وتنضم إلى Y Combinator (W26)
Didit
المطورون

أفضل طريقة لدمج
الهوية والاحتيال.

افتح بيئة الاختبار، الصق أمر curl واحد، وانشر في 5 دقائق. وثائق عامة، خمسة حزم تطوير برمجيات (SDKs)، وخادم بروتوكول سياق النموذج (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 في وكيل ترميز الذكاء الاصطناعي الخاص بك.
01 · التسجيل

أنشئ حساب Didit الخاص بك.

  • في وحدة تحكم الأعمال: سجل في business.didit.me في أقل من ستين ثانية — بدون بطاقة، بدون بوابة مبيعات.
  • عبر واجهة برمجة التطبيقات (API): اتصل بـ POST https://apx.didit.me/auth/v2/programmatic/register/، ثم POST .../verify-email/.

كلا المسارين يترك لك مفتاح API لبيئة الاختبار — بنفس شكل الإنتاج، كل وحدة مفتوحة.

واجهة برمجة تطبيقات التسجيل البرمجي
مفتاح API للإنتاج
مباشر
didit_sk_live_8f4c2a…9bf3

صدر للتو — لا بطاقة، لا عقد، لا مكالمة.

  • لا يوجد حد أدنى
  • لا يوجد عقد
  • 500 مجانًا / شهر
  • بيئة اختبار مفتوحة
02 · بناء سير العمل

اختر الوحدات. قم بتأليف سير العمل.

  • في وحدة تحكم الأعمال: اسحب وأفلت الوحدات في منشئ سير العمل — التحقق من وثيقة الهوية، الحيوية السلبية، مطابقة الوجه، مكافحة غسيل الأموال (AML)، فحص المحفظة، تحليل بروتوكول الإنترنت (IP)، و19 وحدة أخرى.
  • عبر API: اتصل بـ POST /v3/workflows/ على verification.didit.me بالوحدات التي تريدها.

كلا المسارين يعيد workflow_id الذي ستمرره في كل جلسة.

إنشاء واجهة برمجة تطبيقات سير العمل
سير العملkyc-onboarding-v3
أكثر من 220 دولة
  • ID Verification
  • Passive Liveness
  • Face Match 1:1
  • AML Screening
  • Device & IP Analysis
  • إثبات العنوان
  • قراءة NFC
  • التحقق من الهاتف
  • فحص المحفظة
  • استبيان مخصص
+ 15 وحدة إضافية · 1,000+ مصدر بيانات$0.33/session
03 · تسجيل الويب هوك

قم بتكوين وجهة خطاف ويب واحدة لكل حكم.

  • في وحدة تحكم الأعمال: أضف عنوان URL الخاص بالويب هوك، اختر الأحداث، وانسخ سر التوقيع الذي يولده Didit.
  • عبر API: اتصل بـ POST /v3/webhook/destinations/ مع label وurl وsubscribed_events. يعيد الرد secret_shared_key الذي يستخدمه Didit لتوقيع كل تسليم.
إنشاء واجهة برمجة تطبيقات وجهة خطاف الويب
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/

كل نقطة نهاية مفتوحة · كل webhook موقع بواسطة HMAC.

04 · الدمج في تطبيقك

أنشئ جلسة — حزمة تطوير البرامج (SDK) أو واجهة برمجة تطبيقات مباشرة.

  • باستخدام حزمة تطوير برمجيات (SDK): قم بإسقاط SDK الأصلي للويب، 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)، قم بالتوصيل بخادم بروتوكول سياق النموذج (MCP)، الصق موجه تكامل، أو انشر مهارة وكيل مسبقة البناء — كلها عامة، كلها مجانية.
الوثائق

ابحث عن كل وحدة ونقطة نهاية وخطاف ويب.

البدء السريع

أطلق تدفق KYC في 5 دقائق.

مرجع API

اقرأ مواصفات OpenAPI 3.1.

مجموعات تطوير البرامج (SDKs)

تضمين على الويب، iOS، Android، React Native، أو Flutter.

Webhooks

تلقي الأحداث الموقعة بواسطة HMAC عند كل تغيير في الحالة.

حالات التحقق

اقرأ آلة حالة الجلسة الكاملة.

موجه التكامل

الصق مطالبة واحدة. أطلق تكامل KYC.

خادم MCP

قم بتوصيل Didit بأي عميل MCP.

مهارات الوكيل

مهارات التحقق المسبق، ومكافحة غسل الأموال (AML)، ومعرفة عملائك من الشركات (KYB).

تكامل في خمس دقائق

أمر curl واحد. خمس حزم SDK.

ابدأ جلسة تحقق بأمر curl واحد، أو قم بتضمين التدفق على الويب، 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
للمطورين · لوكلاء الذكاء الاصطناعي · مفتوح بالتصميم

مصمم للمطورين ووكلاء الذكاء الاصطناعي.

ادمج فحوصات الهوية والاحتيال من Didit باستخدام واجهة برمجة تطبيقات (API) واحدة. افتح بيئة الاختبار، اقرأ الوثائق العامة، قم بالتوصيل بخادم بروتوكول سياق النموذج (MCP)، أو اسحب حزمة تطوير برمجيات (SDK) لأي مكدس. المطورون ينشرون في فترة ما بعد الظهر؛ وكلاء ترميز الذكاء الاصطناعي ينشرون في موجه واحد — لا واجهة مستخدم، لا تدخل بشري، لا مكالمة مبيعات، لا حدود دنيا.
01 · واجهة برمجة تطبيقات واحدة

واجهة برمجة تطبيقات واحدة للهوية والاحتيال.

تغطي واجهة برمجة التطبيقات (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 · أصلي للوكيل

التكامل في مطالبة واحدة.

خادم بروتوكول سياق النموذج (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، وقاعدة السفر لبورصة عملات مشفرة، أو AML مستمر لسوق — أنت تختار الفحوصات والترتيب.
شاهد كل وحدة
سير العملkyc-onboarding-v3
أكثر من 220 دولة
  • ID Verification
  • Passive Liveness
  • Face Match 1:1
  • AML Screening
  • Device & IP Analysis
  • إثبات العنوان
  • قراءة NFC
  • التحقق من الهاتف
  • فحص المحفظة
  • استبيان مخصص
+ 15 وحدة إضافية · 1,000+ مصدر بيانات$0.33/session
04 · خدمة ذاتية

لا يوجد جدار دفع. لا توجد مكالمة مبيعات. اذهب والعب بها.

صندوق الحماية مفتوح من الدقيقة الأولى. الوثائق وواجهة برمجة التطبيقات عامة، بدون بوابة عرض توضيحية بينك وبين الكود. اشترك، احصل على مفتاح، اشحن في نفس اليوم. فريق المبيعات لدينا موجود عندما تريده — ليس كبوابة أبدًا.
جرب صندوق الحماية
مفتاح API للإنتاج
مباشر
didit_sk_live_8f4c2a…9bf3

صدر للتو — لا بطاقة، لا عقد، لا مكالمة.

  • لا يوجد حد أدنى
  • لا يوجد عقد
  • 500 مجانًا / شهر
  • بيئة اختبار مفتوحة
05 · قائم على الاستخدام

ادفع مقابل ما تستخدمه. هذا كل شيء.

Didit أرخص بـ 3-5 مرات من بائعي KYC الحاليين، مع كل سعر معلن على /pricing — حزمة KYC كاملة بقيمة $0.33، فحص المحفظة بقيمة $0.15، تحليل الجهاز وعنوان IP بقيمة $0.03، 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 · بنية تحتية مفتوحة

واجهة برمجة تطبيقات مفتوحة. ابنِ عليها.

كل نقطة نهاية مفتوحة وموثقة — قم بتغيير حالة الجلسة، أو حظر وجه، أو تنزيل ملف PDF للقرار، أو تعديل سير العمل، أو الاستعلام عن سجل الأحداث. يتم توقيع Webhooks باستخدام رمز مصادقة الرسائل المستند إلى التجزئة (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/

كل نقطة نهاية مفتوحة · كل webhook موقع بواسطة HMAC.

07 · حزم تطوير البرامج (SDKs)

حزم تطوير البرمجيات لكل منصة.

حزمة تطوير البرمجيات (SDK) لكل مكدس — الويب، iOS، Android، React Native، Flutter. في الواجهة الخلفية، واجهة برمجة تطبيقات REST، وخطافات ويب موقعة، ومواصفات OpenAPI 3، وتكاملات جاهزة لـ Zapier وShopify وSalesforce. كل واجهة تأتي مع عينات وأنواع ودليل بدء التشغيل في 5 دقائق.
تصفح حزم تطوير البرمجيات
Webv1.4.0iOSv3.0.1Androidv2.6.2
React Nativev1.8.0Flutterv1.3.4
08 · بنية تحتية محسّنة للمقياس

أسرع عمليات التحقق في السوق.

تكتمل 99% من عمليات التحقق في أقل من ثانيتين، من البداية إلى النهاية — تم قياسها في الإنتاج، وليست مجرد ادعاء في عرض تقديمي. نستهدف اتفاقية مستوى خدمة (SLA) بنسبة 99.99%، وحققنا وقت تشغيل بنسبة 100% خلال الـ 12 شهرًا الماضية، ولم نتعرض لأي اختراق. تم ضبطها لكل جهاز وشبكة — iPhone، Android، سطح المكتب، الجهاز اللوحي، 5G أو 2G — وتجري بالفعل ملايين عمليات التحقق شهريًا.
اطلع على الحالة المباشرة
زمن الاستجابة الشامل · 30 يومًا
99.99% اتفاقية مستوى الخدمة
  • p500.82s
  • p951.42s
  • p991.89s

أسرع عمليات التحقق في السوق · iPhone، Android، سطح المكتب، الجهاز اللوحي، 5G أو 2G.

ثلاثة مستويات، قائمة أسعار واحدة

ابدأ مجانًا. ادفع حسب الاستخدام. توسع إلى Enterprise.

500 عملية تحقق مجانية كل شهر، إلى الأبد. الدفع حسب الاستخدام للإنتاج. عقود مخصصة، إقامة البيانات، واتفاقيات مستوى الخدمة (SLAs) على Enterprise.
مجاني

مجاني

0 دولار / شهر. لا يلزم بطاقة ائتمان.

  • حزمة KYC مجانية (التحقق من الهوية + التحقق السلبي من الحياة + مطابقة الوجه + تحليل الجهاز و IP) — 500 / شهر، كل شهر
  • المستخدمون المحظورون
  • اكتشاف التكرار
  • أكثر من 200 إشارة احتيال في كل جلسة
  • KYC قابل لإعادة الاستخدام عبر شبكة Didit
  • منصة إدارة الحالات
  • منشئ سير العمل
  • وثائق عامة، بيئة اختبار، حزم تطوير البرامج (SDKs)، خادم MCP (بروتوكول سياق النموذج)
  • دعم المجتمع
الأكثر شعبية
الدفع حسب الاستخدام

حسب الاستخدام

ادفع فقط مقابل ما تستخدمه. أكثر من 25 وحدة. تسعير عام لكل وحدة، بدون رسوم شهرية دنيا.

  • KYC كامل بسعر $0.33 (الهوية + القياسات الحيوية + IP / الجهاز)
  • أكثر من 10,000 مجموعة بيانات AML — عقوبات، PEPs، إعلامات سلبية
  • أكثر من 1,000 مصدر بيانات حكومي للتحقق من قاعدة البيانات
  • مراقبة المعاملات بسعر $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 المعادة — أو قم بإسقاط حزمة تطوير برامج (SDK) أصلية على نفس عقد /v3/.
  • استقبل الحكم على الويب هوك الموقع، أو استعلم عن GET /v3/session/:session_id/decision/.

تغطي واجهة برمجة تطبيقات (API) /v3/ واحدة "اعرف عميلك" (KYC)، و"اعرف عملك" (KYB)، ومراقبة المعاملات، وفحص المحفظة (KYT — اعرف معاملتك). 500 عملية تحقق مجانية كل شهر، إلى الأبد، بدون بطاقة ائتمان.

هل هناك بيئة اختبار يمكنني اللعب بها الآن؟

نعم — في أقل من ستين ثانية، بدون بطاقة ائتمان. سجل في business.didit.me (أو سجل برمجيًا باستخدام POST https://apx.didit.me/auth/v2/programmatic/register/) وستهبط في مساحة عمل تجريبية بمفتاح واجهة برمجة تطبيقات (API) حقيقي.

  • نفس شكل الإنتاج — قرارات حتمية، كل وحدة مفتوحة.
  • نقاط نهاية /v3/ حقيقية، وويب هوكس حقيقية، وعينات مستندات حقيقية.
  • انتقل إلى الوضع المباشر متى كنت مستعدًا — نفس المفاتيح، نفس عناوين URL، نفس العقد.
ما هي حزم تطوير البرامج (SDKs) التي تقدمونها؟

خمس حزم تطوير برامج (SDKs) من الطرف الأول، كلها مفتوحة المصدر، كلها على الوثائق العامة:

  • الويب — JavaScript / TypeScript، مستقل عن الإطار، تضمين iframe أو إعادة توجيه التدفق المستضاف.
  • iOS — Swift، موزعة كـ XCFramework.
  • Android — Kotlin، عبر Maven Central.
  • React Native — روابط TypeScript فوق الوحدات الأصلية (TurboModules).
  • Flutter — غلاف Dart حول نفس حزم تطوير البرامج (SDKs) الأصلية.

تستدعي كل حزمة تطوير برامج (SDK) نفس عقد /v3/ تحت الغطاء، لذا يمكنك المزج والمطابقة — الويب على موقعك، الأصلي على الهاتف المحمول. المرجع على docs.didit.me/integration/web-sdks/overview.

كيف تعمل الويب هوكس؟

سجل وجهة واحدة؛ Didit توقع كل تسليم.

  • قم بتكوين نقطة النهاية الخاصة بك عبر Business Console — أو اتصل بـ POST /v3/webhook/destinations/ مع label، url، وsubscribed_events.
  • تعيد Didit secret_shared_key في الاستجابة. استخدمه للتحقق من توقيع رمز مصادقة الرسالة المستند إلى التجزئة (HMAC)-SHA256 على كل ويب هوك وارد (الرأس: X-Signature-V2).
  • تحمل كل حمولة status دقيقًا وحساسًا لحالة الأحرف — "Approved"، "Declined"، "In Review"، "Resubmitted"، والمزيد. آلة الحالة الكاملة على docs.didit.me/integration/verification-statuses.
  • تستخدم إعادة المحاولات تراجعًا أسيًا حتى تعيد 2xx؛ يتم تسجيل كل تسليم ويمكن إعادة تشغيله عند الطلب من وحدة التحكم.

المرجع الكامل على docs.didit.me/integration/webhooks.

ما هي حدود المعدل، وماذا يحدث عند التوسع؟

إعدادات افتراضية سخية في كل خطة، يتم تعديلها تصاعديًا لكل حساب.

  • الطبقة المجانية — وضع الحماية بالإضافة إلى 500 فحص إنتاجي كل شهر، إلى الأبد.
  • الدفع حسب الاستخدام — تتوسع حدود الاندفاع تلقائيًا مع الحجم المستمر. لن تصل إلى طريق مسدود في منتصف الإطلاق.
  • المؤسسات — حدود معدل مخصصة، وسعة مخصصة، والتزامات وقت التشغيل في اتفاقية الخدمات الرئيسية (MSA). تحدث إلينا على support@didit.me.

السعة المستهدفة لكل منطقة على status.didit.me. 100% وقت تشغيل حقيقي خلال الأشهر الستة الماضية عبر ملايين عمليات التحقق شهريًا.

هل يمكنني التكامل مع Claude Code أو Cursor أو أدوات ترميز الذكاء الاصطناعي الأخرى؟

نعم — الصق مطالبة واحدة واشحن. أسقط مطالبة التكامل الأساسية على docs.didit.me/integration/integration-prompt في Claude Code أو Cursor أو Codex أو Devin أو Aider أو Replit Agent. يقوم الوكيل بتوفير سير العمل، وتوصيل الويب هوك، وتشغيل اختبار الدخان من البداية إلى النهاية.

تدفع الجلسات التي يبدأها الوكيل نفس السعر العام مثل استدعاءات API المباشرة — $0.33 لكل معرفة عميل (KYC) كاملة، $0.15 لكل تحقق مستقل من وثيقة الهوية، $0.15 لكل فحص محفظة. مجاني، بدون إعداد إضافي، يعمل مع أي عميل يدعم بروتوكول سياق النموذج (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% وقت تشغيل حقيقي خلال الأشهر الستة الماضية؛ هدف توفر بنسبة 99.99% في اتفاقية مستوى الخدمة (SLA).
  • تحصل كل حادثة على تقرير ما بعد الوفاة عام في نفس الصفحة.
  • تضيف عقود المؤسسات مهندسًا مخصصًا تحت الطلب، وقناة مشتركة مخصصة على Slack أو Microsoft Teams، وأهداف مستوى الخدمة لشدة الحوادث في اتفاقية الخدمات الرئيسية (MSA).

البنية التحتية للهوية والاحتيال.

واجهة برمجة تطبيقات واحدة لـ KYC و KYB ومراقبة المعاملات وفحص المحفظة. ادمج في 5 دقائق.

اطلب من الذكاء الاصطناعي تلخيص هذه الصفحة