跳到主要内容
Didit 融资 750 万美元,打造身份与欺诈基础设施
Didit
可复用 KYC · 欧盟 eIDAS 2

一次验证。随处复用。

只需一次 $0.33 的 KYC。已验证用户可将这次 Didit 验证分享给任何其他使用 Didit 的应用,支持选择性披露,每次复用都免费。目前已上线五种国家 eID,EUDI 钱包接入即将推出。

投资方
Y CombinatorRobinhood Ventures
Firecrawl
Slash
Crnogorski Telekom
UCSF Neuroscape
Bit2Me

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

可复用身份解锁的价值

身份在用户手中。对所有接受者免费。

每次 Didit KYC 验证都可以作为已签名的可复用 KYC 验证,与其他 Didit 驱动的应用共享。每个接收平台均可免费读取。一次验证,适用于所有接受 Didit 的业务。免费开始。

工作原理

从注册到验证用户,仅需四步。

步骤 01 / 04

创建工作流

选择您需要的检查项, 身份、活体、人脸匹配、制裁名单、地址、年龄、电话、邮箱、自定义问题。在仪表盘中拖拽它们到流程中,或通过我们的 API 发布相同的流程。支持条件分支、A/B 测试,无需代码。

专为可复用身份构建 · 基础设施定价

一次 KYC。之后所有平台,免费。

真正的可复用身份并非单一功能,而是一个系统。签发、持有、出示、选择性披露、刷新、撤销。所有这些都在一个 /v3/ 会话中完成。
01 · 一次验证

一次 KYC。一个凭证。

首次使用时,用户完成标准的 $0.33 套餐:身份证件、被动活体检测、人脸比对、设备与 IP 分析。完成后,Didit 对这次验证进行签名,用户即可将其分享给其他使用 Didit 的应用。
用户验证模块
02 · 选择性披露

只披露验证者所需信息。

在不透露出生日期的情况下证明年龄超过 18 岁。在不透露地址的情况下证明国家。接收应用仅读取其请求的字段,并由 Didit 签名。
可复用 KYC 模块
03 · 国家 eID

五种国家 eID,现已上线。

MitID、瑞典 BankID、Finnish Trust Network、Smart-ID 和 Mobile-ID 已在同一工作流中上线。没有 eID 的用户走证件路线:NFC 芯片读取、活体检测和人脸比对。EUDI 钱包接入即将推出。
eID 验证
04 · 签发者 · 持有者 · 验证者

三种角色。一个凭证。

签发者在 KYC 后签署凭证。用户将其保存在钱包中。验证者仅验证披露字段上的签发者签名。标准的“可验证凭证信任三角”。
安全与合规
05 · 凭证时效性

凭证时效性,自动更新。

持续的 AML 每天重新筛选用户。证件过期、姓名变更、制裁命中, 所有这些都会自动在凭证上显示。过期的凭证在出示时会被拒绝。
AML 筛选模块
06 · 免费接收

对所有接收平台免费。

每次 KYC 都包含凭证签发。钱包存储在用户设备上。凭证出示、选择性披露和签名验证永久免费。高流量账户的持续 AML 刷新费用为每用户每年 $0.07。
可复用 KYC 模块
集成

两次调用。一次验证,共享使用。

从一个 Didit 应用共享已完成的会话,并在另一个应用中导入。接收方直接读取完整的决策结果,无需让用户再次验证。
POST /v3/session/{id}/share/共享
curl -X POST https://verification.didit.me/v3/session/$SESSION_ID/share/ \
  -H "x-api-key: $DIDIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "for_application_id": "<receiving-application-id>",
    "ttl_in_seconds": 3600
  }'
200OK{ "share_token": "eyJ…" }
适用于已完成的会话。只有您指定的应用可以兑换该令牌。文档 →
POST /v3/session/import-shared/导入
curl -X POST https://verification.didit.me/v3/session/import-shared/ \
  -H "x-api-key: $RECEIVING_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "share_token": "<share-token>",
    "trust_review": false,
    "workflow_id": "<receiving-workflow-uuid>",
    "vendor_data": "user-42"
  }'
201已创建{ "shared_from_session": "…" }
以新的会话 ID 返回完整的决策结果。将 trust_review 设为 false 可将其送入 In Review。文档 →
代理就绪集成

通过一个提示,实现可复用身份流程。

粘贴到 Claude Code、Cursor、Codex、Devin、Aider 或 Replit Agent 中。填写您的技术栈。智能体会构建工作流、会话、共享与导入调用,以及签名的 webhook。
didit-integration-prompt.md
# Didit Reusable KYC: verify a person once, share the finished session with another application

You are adding Reusable KYC to my_stack. A person completes one identity
verification; the finished session is then shared with a second Didit
application, which imports the full decision without running the checks
again. Every URL, header and enum value below is canonical. Do not paraphrase
or "improve" them.

## 0. What exists, and what does not
- Reuse is server to server, between two Didit applications: the source
  application mints a share token for a finished session, the receiving
  application redeems it. Both sides use their own x-api-key.
- There is NO reusable_identity object on the webhook or the decision, NO
  metadata.request_fields or other selective-disclosure parameter, NO
  workflow setting that "accepts" a credential, and NO revocation event. Do
  not invent them. metadata on a session is free-form JSON that Didit echoes
  back, nothing more. The receiving application gets the whole decision.
- This is not an EU Digital Identity (EUDI) Wallet integration. Didit does
  not issue or accept EUDI Wallet credentials through these calls.

## 1. Provision
- Sign up: https://business.didit.me
- Source application: its API key. Receiving application: its API key and its
  application id (a UUID: shown in the console, and sent as application_id
  on every webhook that application receives). They are different
  applications; sharing a session with the application that owns it is
  refused.

## 2. Create the workflow for the first verification
POST https://verification.didit.me/v3/workflows/
  -H "x-api-key: <source-api-key>"
  -H "Content-Type: application/json"

{
  "workflow_label": "KYC onboarding",
  "features": [
    { "feature": "OCR" },
    { "feature": "LIVENESS" },
    { "feature": "FACE_MATCH" },
    { "feature": "IP_ANALYSIS" }
  ]
}

OCR is the ID Verification feature (uppercase, strict: ID_VERIFICATION is
rejected). Add { "feature": "AML" } for sanctions and PEP screening; it is
priced separately. Response: 201. The workflow id is uuid (workflow_id carries
the same value) and features comes back as one string, "OCR + LIVENESS + ...".
Create the workflow once and keep the id: every call makes a new one.
Prices: https://didit.me/pricing

## 3. Create a session
POST https://verification.didit.me/v3/session/
  -H "x-api-key: <source-api-key>"
  -H "Content-Type: application/json"
  -d '{ "workflow_id": "<uuid from step 2>", "vendor_data": "<your user id>" }'

Response: 201 with session_id, session_token, url and status "Not Started".
Redirect the user to url (hosted flow) or open it in the Web, iOS, Android,
React Native or Flutter SDK. The field is named url on this response.
One unfinished session exists per workflow_id and vendor_data pair: calling
create again with the same pair answers 201 again with that same session.
Optional: callback, a URL the user's browser is sent back to when the flow
ends. It is a browser redirect, not a webhook: never trust its query string.

## 4. Webhook
Register a destination in the console (API & Webhooks), or over the API:

POST https://verification.didit.me/v3/webhook/destinations/
  -H "x-api-key: <your-api-key>"
  -H "Content-Type: application/json"
  -d '{
    "label": "Verification webhooks",
    "url": "https://<your-public-host>/webhooks/didit",
    "webhook_version": "v3",
    "subscribed_events": ["status.updated", "data.updated"]
  }'

label, url and subscribed_events are required. url must be a public HTTPS
address: Didit does not deliver to localhost or private addresses. Response:
201 with uuid and secret_shared_key. Store secret_shared_key as the webhook
secret (DIDIT_WEBHOOK_SECRET); it is unique to this destination. Remove a
destination with DELETE /v3/webhook/destinations/{uuid}/ (204).

What arrives:
  - webhook_type is "status.updated" (the session changed status) or
    "data.updated" (verification data was corrected after the fact)
  - a destination receives the events of every session of the application,
    so filter on workflow_id or vendor_data when several flows share it
  - creating a session already sends status.updated with status
    "Not Started". The decision key is present only when status is Approved,
    Declined, In Review or Abandoned.

Verify every delivery:

  Header:      X-Signature-V2 (not X-Signature, not X-Signature-Simple)
  Algorithm:   HMAC-SHA256, hex digest, over the canonical JSON of the payload
               (Python json.dumps(sort_keys=True, separators=(",", ":"),
               ensure_ascii=False) after whole-valued floats become ints).
               Never hash the raw request bytes under this header: that is
               the older X-Signature.
  Freshness:   the signed body field timestamp is the dispatch time (Unix
               seconds). Reject when abs(now - timestamp) > 300 seconds, and
               reject when the X-Timestamp header does not equal it.
  Idempotency: event_id is the same on every retry of one event, so store it
               and skip a delivery you already processed. One session can
               still send the same status under two event ids, and the
               console's Try Webhook test deliveries carry no event_id, so
               also make the handler safe to run twice for one
               (session_id, status, webhook_type).
  Compare:     constant-time (crypto.timingSafeEqual)

Reference handler (Express). Keep the verification lines as written.
The handler is a fragment. Put this above it and app.listen(process.env.PORT)
below it. It needs Express and Node 21 or newer (an older Node rejects
every delivery). It expects a JSON body: answer 400 yourself if you accept
anything else on this route, and refuse to start without the secret.

const express = require("express");
const app = express();
const SECRET = process.env.DIDIT_WEBHOOK_SECRET; // secret_shared_key of the destination

// Your endpoint receives a signed payload
const crypto = require("node:crypto"); // ESM: import crypto from "node:crypto"
// X-Signature-V2 = HMAC over the canonical JSON, never the raw bytes. Match the sender byte for
// byte: keys sorted by code point, integers digit for digit, floats in Python's repr.
class Num { constructor(src) { this.src = src; } } // a number as written on the wire, not a double
const num = (s) => { if (/^-?\d+$/.test(s)) return BigInt(s).toString(); const n = +s; // ints stay exact
  if (Number.isInteger(n)) return BigInt(n).toString(); const [m, e] = n.toExponential().split("e"); // 27.0 -> 27
  return +e >= -4 ? String(n) : `${m}e-${String(-e).padStart(2, "0")}`; }; // 1e-05, not 0.00001
const byCodePoint = (a, b) => Buffer.compare(Buffer.from(a), Buffer.from(b)); // UTF-8 order = Python's
const canon = (v) => Array.isArray(v) ? `[${v.map(canon)}]` : v instanceof Num ? num(v.src)
  : v && typeof v === "object" ? `{${Object.keys(v).sort(byCodePoint).map((k) => `${JSON.stringify(k)}:${canon(v[k])}`)}}`
  : JSON.stringify(v);
// Read the body as text: express.json() would round 1000000000000000129 to a double first.
// Register this route ABOVE any global app.use(express.json()): the first parser to run
// consumes the stream, and a body it already parsed has lost the digits the signature covers.
app.post("/webhooks/didit", express.text({ type: "application/json" }), (req, res) => {
  const exact = JSON.parse(req.body, (k, v, c) => typeof v === "number" ? new Num(c.source) : v); // Node 21+
  const body = JSON.parse(req.body);
  const mac = crypto.createHmac("sha256", SECRET).update(canon(exact), "utf8").digest("hex");
  const sig = Buffer.from(String(req.headers["x-signature-v2"] ?? ""));
  // Freshness comes from the signed body timestamp; the header alone is unsigned and replayable.
  const ts = body.timestamp, fresh = String(ts) === req.headers["x-timestamp"]
    && Math.abs(Date.now() / 1000 - ts) <= 300;
  if (!fresh || sig.length !== mac.length
    || !crypto.timingSafeEqual(sig, Buffer.from(mac))) return res.sendStatus(401);
  const { session_id, status, webhook_type, vendor_data, decision } = body;
  // decision is present on Approved, Declined, In Review and Abandoned.
  res.sendStatus(200);
});

Status values (exact strings): Not Started, In Progress, Approved, Declined,
In Review, Resubmitted, Expired, Abandoned, Kyc Expired. Awaiting User only
appears on business verification sessions.

## 5. Read the decision
The same V3 decision reaches you two ways:
  - webhook body: body.decision.id_verifications[]
  - GET https://verification.didit.me/v3/session/{session_id}/decision/
      -H "x-api-key: <your-api-key>"
    This response IS the decision object. Read id_verifications at the top
    level: there is no decision wrapper here.
Until the user finishes the ID step, status is "Not Started" or "In Progress"
and id_verifications is null, not an empty array. Guard for it.
The other feature results sit next to it as plural arrays: liveness_checks[],
face_matches[], ip_analyses[], aml_screenings[]. shared_from_session is null
on a session the person completed here.

## 6. Share the finished session (source application)
Only a session whose status is Approved, Declined or In Review can be shared.

POST https://verification.didit.me/v3/session/{session_id}/share/
  -H "x-api-key: <source-api-key>"
  -H "Content-Type: application/json"
  -d '{ "for_application_id": "<receiving application id>", "ttl_in_seconds": 3600 }'

Response: 200 with share_token, for_application_id and session_kind ("user").
ttl_in_seconds: 60 to 86400, default 3600. Each call mints a new token; a
token cannot be revoked, it only expires. Send it to the receiving
application's backend, never to a browser.

## 7. Import it (receiving application)
POST https://verification.didit.me/v3/session/import-shared/
  -H "x-api-key: <receiving-api-key>"
  -H "Content-Type: application/json"
  -d '{
    "share_token": "<share_token from step 6>",
    "trust_review": false,
    "workflow_id": "<a workflow id of the receiving application>",
    "vendor_data": "<user id on the receiving side>"
  }'

share_token, trust_review and workflow_id are required. trust_review true
keeps the source status (Approved stays Approved); false puts the imported
session In Review so the receiving team decides. Response: 201 with the same
decision shape as step 5, a new session_id, and shared_from_session pointing
at the source session.

## 8. Errors to handle
The message is under detail for some errors and under the field name
(for_application_id, share_token) for others: read both.
  - share, 400: "Cannot share a session with the same application."
  - share, 400: "Target application does not exist."
  - share, 400: "Only finished sessions ("Approved", "Declined", "In Review")
    can be shared."
  - import, 400 on share_token: "Invalid share token.", "Share token has
    expired.", "This token is not valid for this application."
  - import, 400: share_token, trust_review or workflow_id missing
  - import, 403: "This session has already been shared with your
    application." Mint a new token.
  - import, 404: "Workflow does not exist for this application."

## 9. Hard rules
  - base URL for v3 endpoints: verification.didit.me
  - auth header: x-api-key, one key per application
  - feature enum: OCR, LIVENESS, FACE_MATCH, IP_ANALYSIS, AML (uppercase)
  - result path: decision.id_verifications[] in the webhook body and
    id_verifications[] on the GET decision response
  - webhook: X-Signature-V2 plus X-Timestamp, canonical JSON, freshness from
    the signed body timestamp

## 10. Verify your integration
Sandbox (an application in sandbox mode: nothing is billed).
https://docs.didit.me/integration/sandbox-testing
  - create the workflow, create a session, and read its decision: expect 201,
    201 with url, and 200 with status "Not Started"
  - to get a finished session without a person, call
    POST https://verification.didit.me/v3/session/{session_id}/simulate/ with
    your x-api-key and { "new_status": "Approved" }. It sets the status and
    sends the webhook; the feature arrays stay null.
  - share that session. With no second application yet, send a random UUID
    as for_application_id and expect the 400 "Target application does not
    exist.": that proves the call is wired. A full share and import needs
    the second application's id and API key; do not fake that step.
  - assert the webhook accepts a correctly signed payload and rejects a wrong
    X-Signature-V2, a changed body, and a payload whose signed timestamp is
    older than 300 seconds, even when X-Timestamp is refreshed

Docs:
  - https://docs.didit.me/core-technology/reusable-kyc/overview
  - https://docs.didit.me/sessions-api/create-session
  - https://docs.didit.me/sessions-api/retrieve-session
  - https://docs.didit.me/integration/webhooks
合规性设计

一键开启新国家/地区业务。 我们为您解决难题。

我们负责设立当地子公司、获取许可证、进行渗透测试、获得认证,并与所有新法规保持一致。要在新国家/地区发布验证服务,只需轻点开关。已覆盖220多个国家/地区,每个季度进行审计和渗透测试, 是唯一一个被欧盟成员国政府正式认定比线下验证更安全的身份提供商。
阅读安全与合规性档案
SOC 2 · Type II — AICPA · 2026
SOC 2 · Type I — AICPA · 2026
ISO/IEC 27001 — 信息安全 · 2026
欧盟金融沙盒 — Tesoro · SEPBLAC · BdE
FIDO Alliance — 准会员 · 2026
iBeta Level 1 PAD — NIST / NIAP · 2026
GDPR — EU 2016/679
HIPAA — 45 CFR §160 · §164
DORA — EU 2022/2554
MiCA — EU 2023/1114
EBA 远程入驻 — EBA/GL/2022/15
AMLD6 · eIDAS 2.0 — 原生符合欧盟标准
Jugendschutz geprüft — FSM · JMStV §4(2) · 2026

数据证明

数据证明
  • $0.33
    首次验证费用, 用户仅在首次使用 Didit KYC 套件时付费。
  • Free
    在每个接收平台。每次复用、每次出示、每次选择性披露。
  • 27
    欧盟成员国。每个成员国须在 2026 年 12 月 24 日前提供 EUDI 钱包,Didit 的 EUDI 钱包接入即将推出。
  • 5
    目前已支持的国家 eID:MitID、BankID Sweden、Finnish Trust Network、Smart-ID 和 Mobile-ID。
三个层级,一份价目表

免费开始,按需付费,可扩展至企业版。

每月500次免费验证,永久有效。之后仅按模块运行付费。企业版提供定制合同、数据驻留和SLA服务。

免费

$0/ 月 · 无需信用卡

适用于构建、测试和您的首批用户。

开始所需的一切:
  • 每月500次完整KYC验证
  • 身份、活体、人脸匹配、设备和IP验证
  • 200+欺诈信号、黑名单、重复项检测
  • Didit网络内可复用KYC
  • 工作流构建器、案件管理、SDK
  • AI 支持 控制台内 AI 助手、文档和社区支持。
最受欢迎

按需付费

$0.33每次完整 KYC

25+ 模块,价格公开透明。自动享受批量折扣。

包含 免费 的所有功能,以及:
  • AML 筛选和监控,低至 $0.07
  • 按国家/地区和数据层级划分的商业注册定价
  • 交易监控 $0.02 / 次
  • 钱包筛选 $0.15 / 次
  • 自有品牌白标流程
  • AI 支持 控制台内 AI 助手、文档和社区支持。

企业版

定制年度合同

适用于大批量和受监管项目。

包含 按需付费 的所有功能,以及:
  • 年度合同,承诺用量定价
  • 定制法律条款和99.99%正常运行时间SLA
  • 数据驻留、保留、安全审查
  • 按需提供人工审核员
  • 经销商和白标条款
  • 优先人工支持 24/7 共享 Slack 频道,专属客户成功经理。

使用量增长时自动享受批量折扣——无需谈判,无需销售电话。

FAQ

常见问题

Didit是什么?

Didit 是身份和欺诈基础设施,是我们自己构建产品时所期望的平台:开放、灵活且对开发者友好,因此它能真正融入您的技术栈,而不是一个需要您围绕其进行集成的黑盒。

一个 API 即可涵盖个人验证(KYC,了解您的客户)、企业验证(KYB,了解您的业务)、加密钱包筛选(KYT,了解您的交易)以及实时交易监控。该技术栈旨在实现:

  • 快速:每次会话的 p99 响应时间低于 2 秒
  • 可靠:已在 220 多个国家/地区的 3,000 多家公司中投入生产
  • 安全:通过 SOC 2 Type 1 和 Type 2 认证、ISO 27001 认证、GDPR 原生,并经西班牙金融监管机构正式证明比线下验证更安全

底层支持:14,000 多种文档类型,支持 48 种以上语言,1,000 多个数据源,以及每次会话的 200 多个欺诈信号。Didit 基础设施通过每次会话动态学习,并日益完善。

用通俗易懂的语言解释一下什么是eIDAS 2.0?

eIDAS 2.0, 全称电子身份识别、认证和信任服务, 是欧盟2024年对其身份规则手册的更新。主要变化是欧洲数字身份钱包(通常简称EUDI钱包):到2026年底,每个欧盟公民和居民都将有权拥有一个智能手机应用程序。

该钱包存储可验证凭证, 数字驾驶执照、已验证身份证明、学术文凭, 由受信任方签发,并以加密证明形式提交给依赖方,可选择选择性披露(证明您已满18岁,而无需透露您的完整出生日期)。

对于企业而言,eIDAS 2.0既涉及接受钱包出示的凭证,也涉及签发用户携带的凭证。

谁必须接受 EUDI 钱包,何时开始?

《欧盟法规 (EU) 2024/1183 (eIDAS 2)》规定:

  • 成员国必须在 2026 年 12 月 24 日前各自提供至少一个欧洲数字身份钱包 (EUDI Wallet)。
  • 法律或合同要求在线身份验证使用强用户认证的私人依赖方,必须在 2027 年 12 月 24 日前根据用户请求接受 EUDI 钱包(第 5f(2) 条)。微型和小型企业可豁免。
  • 要求用户认证的超大型在线平台也必须根据用户的自愿请求接受 EUDI 钱包(第 5f(3) 条)。该条款未设定此义务的单独日期。

其他企业可自愿接受该钱包。Didit 即将支持 EUDI 钱包:请阅读企业接受 EUDI 钱包所需了解的信息。

我的终端用户验证速度有多快?

整个流程通常在 30 秒内完成, 拿起身份证,拍摄文件,拍摄自拍,完成。这是市场上最快的。传统的 KYC 提供商通常需要超过 90 秒才能完成相同的流程。

在后端,Didit 在 p99 下两秒内返回结果,从用户完成自拍到您的 webhook 触发的那一刻开始计算。移动捕获针对慢速手机和慢速网络进行了优化:渐进式图像压缩、延迟软件开发工具包加载,以及如果用户从网页开始,通过二维码从桌面到手机的一键式切换。

可重用身份与联合登录(使用 Apple、Google 登录)有何不同?

联邦登录证明身份提供商处存在账户,接收方企业可获得电子邮件地址和可能有的姓名。但这并非监管级别的身份验证。

可复用身份包含:

  • 政府文件级别的验证(护照、国民身份证扫描和 OCR 识别)
  • 生物识别关联,将出示凭证的人与生物特征(自拍照与证件照片匹配)关联起来
  • 活体检测,可识别深度伪造、面具和重放攻击
  • AML 状态,对照制裁、PEP 和负面媒体名单进行筛选
  • 受监管提供商的签名证明,带有时间戳和可验证的追踪记录

验证方可获得与自行运行 KYC 相同的监管保障,且无需承担成本、减少摩擦并避免转化率下降。

如果用户失败、放弃或过期,会发生什么?

每个会话都有七种明确状态之一,因此您的代码始终知道如何处理:

  • 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 是否符合我所在行业的规定?

Didit 默认符合对身份基础设施至关重要的监管机构要求:

  • GDPR + UK GDPR,控制者/处理者职责划分,已发布完整的《数据处理协议》,已指定主要监管机构(西班牙 AEPD)。
  • AMLD6 + EU AML Single Rulebook,实时筛查 1,300 多个制裁、政治公众人物和负面媒体名单。
  • eIDAS 2.0,已上线五种国家 eID(MitID、瑞典 BankID、Finnish Trust Network、Smart-ID 和 Mobile-ID);EUDI 钱包接入即将推出。
  • MiCA (Markets in Crypto-Assets),适用于加密货币入金通道(on-ramp)、交易所和托管机构。
  • DORA,Digital Operational Resilience Act,欧盟金融服务的运营韧性。
  • BIPA, CUBI, Washington HB 1493, CCPA / CPRA,美国生物识别隐私(伊利诺伊州、得克萨斯州、华盛顿州)和加州消费者隐私。
  • UK Online Safety Act,年龄限制和儿童安全义务。
  • FATF Travel Rule,加密货币转账的发起方和受益方数据,可与 IVMS-101 互操作。

详细备忘录、所有证书、所有监管机构函件:/security-compliance。

我能多快集成并开始验证用户?
  • 60 秒即可在 business.didit.me 获得沙盒账户, 无需信用卡。
  • 5 分钟即可通过 Claude Code、Cursor 或任何编码代理,通过我们的模型上下文协议 (MCP) 服务器完成工作验证。
  • 一个周末即可完成生产就绪的集成,包括签名 webhook 验证、重试以及用户被拒绝时的补救流程。

三种集成路径, 选择最适合您技术栈的:

  • 使用我们的 Web、iOS、Android、React Native 或 Flutter SDK 原生嵌入。
  • 将用户重定向到托管验证页面, 无需 SDK。
  • 通过电子邮件、短信、WhatsApp 或任何渠道发送链接, 无需前端工作。

所有三种方式都使用相同的仪表板、相同的计费和相同的按成功付费价格。分步指南请访问 docs.didit.me/integration/integration-prompt。

GDPR 下的隐私保护情况如何?

可复用身份是传统 KYC 堆栈的隐私升级:

  • 内置选择性披露, 验证者只看到所需字段,而非底层文档
  • 无中央注册表, 凭证存储在用户钱包中,而非 Didit 拥有的“谁向谁出示了什么”的账本上
  • 每次出示均需同意, 用户明确批准每次披露
  • 欧盟居民存储, 发行方证据包存储在欧盟数据中心;钱包本身在用户设备上
  • 被遗忘权, 当用户撤销凭证时,接收平台必须根据 GDPR 从其记录中删除;Didit 的平台级撤销 API 使这只需一次调用即可完成

接收方处理的法律依据是 GDPR 下的合法权益, 用户已明确出示凭证以访问服务。Didit 的标准数据处理协议 (DPA) 涵盖了联合控制者关系。

如果用户更改身份证明文件或搬迁国家,该怎么办?

三种触发类型:

  • 证件更新(护照过期、新国家身份证签发)→ 用户重新进行轻量级刷新;验证将使用新的证件指纹重新签发
  • 重大身份变更(新法定姓名、性别标记变更、居住国变更)→ 需进行完整的重新验证,费用为 $0.33;旧凭证将被撤销并签发新凭证
  • AML 状态变更(之前清白的用户成为 PEP 或被列入制裁名单)→ Didit 的持续监控会自动标记此变更,凭证的 AML 字段会更新,所有接收平台在下次出示时都会看到刷新的状态

接收平台无需追溯用户进行更新,凭证自带新鲜度信号,过期凭证在出示时将被拒绝。

监管机构如何查看复用验证的证据?

验证者(接收平台)将获得与原始验证者相同的每次出示证据包,以及签发链:

  • 原始 KYC 证据, 证件扫描、生物识别相似度、AML 命中、设备 + IP 风险信号、签名时间戳
  • 签发链, 哪个由 Didit 提供支持的平台签发了凭证,何时,通过哪个工作流
  • 出示日志, 该用户何时向您的平台出示,他们披露了哪些字段,您的验证者的裁决
  • 当前 AML 状态, 由 Didit 的持续监控每日刷新
  • 每个字段的 HMAC SHA-256 签名,因此可证明保管链

Didit 是唯一获得欧盟成员国政府正式证明的 KYC 平台, 西班牙财政部、西班牙银行和 SEPBLAC 联合证明该服务比亲自验证更安全。该证明适用于每次复用出示。

身份与欺诈基础设施。

一个 API 即可实现 KYC、KYB、交易监控和钱包筛选。5 分钟即可集成。

让 AI 总结此页面