免费
每月 $0。无需信用卡。
- 免费 KYC 套件(身份验证 + 被动活体检测 + 人脸匹配 + 设备与 IP 分析), 每月 500 次,永久有效
- 黑名单用户
- 重复检测
- 每次会话 200+ 欺诈信号
- Didit 网络中可重复使用的 KYC
- 案件管理平台
- 工作流构建器
- 公开文档、沙盒、SDK、MCP(模型上下文协议)服务器
- 社区支持


全球2,000多家组织信赖。

防钓鱼登录
复用注册时已验证的身份,对回访用户进行身份验证。 防SIM卡互换、防钓鱼,每次调用仅需$0.10, 比市场上典型的短信往返验证更经济。
选择您需要的验证项, 身份、活体、人脸匹配、制裁名单、地址、年龄、电话、邮箱、自定义问题。在控制台中拖拽构建流程,或通过API提交。支持条件分支、A/B测试,无需代码。
通过我们的Web、iOS、Android、React Native或Flutter SDK进行原生嵌入。也可重定向到托管页面。或者,只需通过邮件、短信、WhatsApp等任何方式向用户发送链接。选择最适合您技术栈的方案。
Didit负责摄像头、光线提示、移动端切换和无障碍功能。在用户进行流程时,我们实时评估200多项欺诈信号,并根据权威数据源验证每个字段。两秒内即可出结果。
实时签名的Webhook确保用户通过、拒绝或需要审核时,您的数据库能即时同步。您也可以按需轮询API,或打开控制台检查每个会话、每个信号,并按您的方式管理案例。

$ curl -X POST https://verification.didit.me/v3/session/ \
-H "x-api-key: $DIDIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"workflow_id": "wf_bio_auth",
"vendor_data": "user-42",
// base64-encoded reference selfie, ≤ 1MB
// omit this field for liveness-only mode
"portrait_image": "/9j/4AAQSkZJRgABAQE..."
}'{ "session_url": "verify.didit.me/..." }// Your endpoint receives a signed payload
app.post("/webhooks/didit", (req, res) => {
const sig = req.headers["x-signature-v2"];
const expected = crypto.createHmac("sha256", SECRET)
.update(req.rawBody).digest("hex");
if (sig !== expected) return res.sendStatus(401);
const { status, decision, vendor_data } = req.body;
// status: Approved | Declined | In Review | ...
res.sendStatus(200);
});webhook_type: "status.updated", status: "Approved"# Didit Biometric Authentication — integrate in 5 minutes
You are integrating Didit's Biometric Authentication module into <my_stack>.
This is a returning-user passwordless re-verification flow — a drop-in
replacement for SMS or email 2FA at high-value actions (large transfers,
password reset, large withdrawals, sensitive setting changes). It is NOT
the first-time KYC sign-up flow — for that, see Didit Liveness at
docs.didit.me/core-technology/liveness/overview.
Every URL, header, and enum value below is canonical — do not paraphrase
or "improve" them.
## 1. Provision an account
- Sign up: https://business.didit.me (no credit card required).
- Or provision programmatically: POST https://apx.didit.me/auth/v2/programmatic/register/
(returns an API key bound to the workspace + application).
## 2. Create the biometric_authentication workflow (one time)
Biometric Authentication is a workflow_type, not a feature flag. Create
the workflow once, reuse the workflow_id for every authentication.
POST https://verification.didit.me/v3/workflows/
Header: x-api-key: <your-api-key>
Body:
- workflow_label (your label, e.g. "step-up-2fa")
- workflow_type "biometric_authentication" (snake_case enum)
- features the array
[{ feature: "LIVENESS" }] (liveness-only mode)
OR
[{ feature: "LIVENESS" }, { feature: "FACE_MATCH" }] (face-match mode)
- liveness_method "PASSIVE" | "FLASHING" | "ACTIVE_3D" (PASSIVE recommended for low-friction step-up)
Store the returned workflow_id — you will reuse it on every auth.
## 3. Authenticate a returning user
POST https://verification.didit.me/v3/session/
Header: x-api-key: <your-api-key>
Header: Content-Type: application/json
Body:
- workflow_id (from step 2)
- vendor_data (your own user id, e.g. "user-42")
- callback (optional URL we redirect the user to after capture)
- metadata (optional JSON, surfaced back on the webhook)
- portrait_image (Base64 JPEG, REQUIRED when the workflow has FACE_MATCH;
OMIT for liveness-only mode)
The portrait_image is the stored reference photo from the user's original
KYC verification (you already have it as id_verification.portrait_image in
the original session response). Send it as a Base64-encoded JPEG, max 1 MB.
Response: session_url — redirect the user to it. Didit hosts the capture
(camera, motion prompts, low-light fallback, accessibility) and posts the
verdict back via webhook.
## 4. Webhooks
- Register a webhook destination once via
POST https://verification.didit.me/v3/webhook/destinations/
Body: url, subscribed_events: ["session.verified", "session.declined",
"session.review_started"]
- Response includes secret_shared_key — store it.
- Every webhook delivery carries an X-Signature-V2 header you MUST verify
before trusting the payload. HMAC-SHA256 verification MUST run against the raw body bytes (the raw payload as Didit sent it) BEFORE any JSON parsing — re-serialising the parsed body changes whitespace and key order, which invalidates the signature.Algorithm:
1. sortKeys(payload) recursively
2. shortenFloats (truncate trailing zeros after the decimal point)
3. JSON.stringify the result
4. HMAC-SHA256 with the secret_shared_key
5. Hex-encode, compare to the X-Signature-V2 header.
## 5. Reading the report
The webhook payload (and the GET /v3/session/{id}/decision/ response)
returns the combined biometric_authentication shape:
status "Approved" | "Declined" | "Not Finished"
workflow_id string
session_id uuid
session_number integer
vendor_data your user id
liveness:
status "Approved" | "Declined" | "Not Finished"
method "PASSIVE" | "FLASHING" | "ACTIVE_3D"
score number 0-100
reference_image signed URL to the captured selfie (expires in 1 hour)
video_url signed URL (FLASHING and ACTIVE_3D only, expires in 1 hour)
warnings array
face_match: (only present in face-match mode)
status "Approved" | "Declined" | "Not Finished"
score number 0-100 (similarity %)
source_image signed URL to the captured selfie
target_image signed URL to the supplied portrait_image
warnings array
Overall status is "Approved" only when liveness.status == "Approved" AND
(face_match is absent OR face_match.status == "Approved").
Auto-decline triggers (always enforced by Didit, not configurable):
FACE_IN_BLOCKLIST, NO_FACE_DETECTED, LIVENESS_FACE_ATTACK, NO_REFERENCE_IMAGE
Configurable risks (action per workflow — Decline, Review, or Approve):
LOW_LIVENESS_SCORE, LOW_FACE_MATCH_SIMILARITY
## 6. Hard rules — do not change
- Base URL for /v3/* endpoints is verification.didit.me (NOT apx.didit.me).
- workflow_type is snake_case: biometric_authentication.
- Feature enums inside the workflow are UPPERCASE: LIVENESS, FACE_MATCH.
- Liveness method enum is UPPERCASE: PASSIVE, FLASHING, ACTIVE_3D.
- Auth header is x-api-key (lowercase, hyphenated).
- Webhook signature header is X-Signature-V2 (NOT X-Signature).
- Always verify webhook signatures before trusting payload data.
- Status casing matches exactly: "Approved", "Declined", "In Review",
"Not Finished" (title-cased, space-separated).
- portrait_image is Base64 JPEG, max 1 MB, required only in face-match mode.
## 7. Pricing reference (public)
- Biometric Authentication: $0.10 per authentication (passwordless re-auth).
- 500 free authentications every month, forever, on every account.
- For the original sign-up KYC, see https://didit.me/pricing (full KYC
bundle is $0.33 per onboarded user, which includes Liveness + Face Match +
ID Verification + Device & IP Analysis).
## 8. When to use this versus Liveness directly
- First-time KYC sign-up: use Liveness (the feature) inside an ID
Verification workflow. See docs.didit.me/core-technology/liveness/overview.
- Step-up at sensitive actions (transfer, password reset, large
withdrawal): use this Biometric Authentication workflow.
- High-volume passive monitoring (any login): use this workflow with
liveness-only mode (no portrait_image) — fastest, lowest friction.
## 9. Verify your integration
- Sandbox starts on signup at https://business.didit.me — no separate flag.
- Test images: deterministic synthetic faces returned in sandbox
(Approved by default; trigger Declined by sending the canonical "spoof"
test image).
- Switch to live: flip the application's environment toggle in console.
When in doubt: https://docs.didit.me/core-technology/biometric-auth/overview
每月 $0。无需信用卡。
按实际用量付费。25+模块。公开的模块定价,无每月最低费用。
定制MSA和SLA。适用于大批量和受监管项目。
免费开始 → 仅在检查运行时付费 → 解锁企业版以获取定制合约、SLA 或数据驻留。
Didit 是身份和欺诈基础设施, 这是我们自己构建产品时希望存在的平台:开放、灵活且对开发者友好,因此它可以作为您技术栈的真正一部分,而不是一个您需要围绕其进行集成的黑盒。
一个 API 涵盖了人员验证(KYC,了解您的客户)、企业验证(KYB,了解您的企业)、加密钱包筛选(KYT,了解您的交易)以及实时监控交易, 构建在以下技术栈之上:
底层支持:48 种以上语言的 14,000 多种文档类型、1,000 多个数据源以及每个会话的 200 多个欺诈信号。Didit 基础设施从每个会话中动态学习并每天都在改进。
workflow_type(蛇形命名法:biometric_authentication),结合了 LIVENESS 功能和可选的 FACE_MATCH 功能。活体检测本身是注册功能, 有关首次了解您的客户 (KYC) 流程,请参阅 /products/liveness。两者都使用相同的 iBeta Level 1 演示攻击检测 (PAD) 认证引擎,因此用户在注册时通过的模型与每次登录时检查他们的模型是相同的。status(Approved、Declined、Not Finished)、一个包含 status、method(PASSIVE、FLASHING 或 ACTIVE_3D)、score 0-100、reference_image、video_url 和 warnings 的 liveness 块,以及一个 face_match 块(仅当工作流包含 FACE_MATCH 时存在),其中包含 status、score 0-100、source_image、target_image 和 warnings。签名的图像和视频 URL 在60 分钟后过期。只有当活体检测通过且(人脸匹配不存在或人脸匹配通过)时,总 status 才为 Approved。整个流程通常在 30 秒内完成, 拿起身份证,拍摄证件,拍摄自拍,完成。这是市场上最快的速度。传统的 KYC 提供商完成相同流程通常需要超过 90 秒。
在后端,Didit 在 p99 情况下两秒内返回结果,时间从用户完成自拍到您的 webhook 触发计算。移动端捕获针对慢速手机和慢速网络进行了优化:渐进式图像压缩、延迟加载 SDK,以及如果用户从网页端开始,通过二维码实现桌面到手机的一键切换。
FACE_IN_BLOCKLIST、NO_FACE_DETECTED、LIVENESS_FACE_ATTACK 和 NO_REFERENCE_IMAGE。可配置的警告(LOW_LIVENESS_SCORE 和 LOW_FACE_MATCH_SIMILARITY)允许您根据应用程序调整审核和拒绝阈值。每个会话都会进入七种明确状态之一,因此您的代码始终知道如何处理:
Approved, 所有检查通过。用户可以继续。Declined, 一项或多项检查失败。您可以允许用户重新提交特定的失败步骤(例如,重新拍摄自拍),而无需重新运行整个流程。In Review, 标记为合规性审核。在控制台中打开案例,查看所有信号,决定批准或拒绝。In Progress, 用户正在进行中。Not Started, 链接已发送,用户尚未打开。如果长时间未打开,请发送提醒。Abandoned, 用户打开了链接但未及时完成。重新激活或使其过期。Expired, 会话链接已过期。创建新会话。每次状态更改都会触发一个签名的 webhook,因此您的数据库始终保持同步。放弃和拒绝的会话是免费的。
生产数据默认在欧盟通过 Amazon Web Services 进行处理和存储。企业合同可以为监管机构有要求的司法管辖区申请替代区域。
全面加密。 所有数据库、对象存储和备份中的静态数据均采用 AES-256 加密。所有 API 调用、webhook 和业务控制台会话中的传输数据均采用传输层安全协议 1.3。生物识别数据使用单独的客户主密钥加密。
保留期限由您控制。 默认保留期限为无限期(无限制),除非您配置更短的期限(每个应用程序30 天到 10 年之间),并且您可以随时从仪表板或 API 删除任何单个会话。
认证:SOC 2 Type 1(Type 2 审计进行中)、ISO/IEC 27001:2022、iBeta Level 1 PAD,以及来自西班牙 Tesoro / SEPBLAC / CNMV 的公开证明,表明 Didit 的远程身份验证比亲自验证更安全。完整报告请访问 /security-compliance。
Didit 默认符合对身份基础设施至关重要的监管机构要求:
详细备忘录、所有证书、所有监管机构函件:/security-compliance。
三种集成路径, 选择最适合您技术栈的:
相同的仪表板、相同的计费、相同的按成功付费价格。分步指南请访问 docs.didit.me/integration/integration-prompt。