免费
适用于构建、测试和您的首批用户。
- 每月500次完整KYC验证
- 身份、活体、人脸匹配、设备和IP验证
- 200+欺诈信号、黑名单、重复项检测
- Didit网络内可复用KYC
- 工作流构建器、案件管理、SDK
- AI 支持 控制台内 AI 助手、文档和社区支持。
全球3,000多家组织信赖。

$0.15 per check
一个 API 覆盖 13 个受管区块链网络,包括比特币、以太坊、Solana、Polygon、BNB 智能链、Base、Optimism 和 Arbitrum One。在其实际网络上筛选钱包和交易,或接入您自己的筛选服务提供商并在 Didit 中运行。
选择您需要的检查项, 身份、活体、人脸匹配、制裁、地址、年龄、电话、电子邮件、自定义问题。在仪表盘中拖拽到工作流,或通过我们的 API 发布相同的工作流。根据条件分支、运行 A/B 测试,无需代码。
$ curl -X POST https://verification.didit.me/v3/wallet-screening/ \
-H "x-api-key: $DIDIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"wallet_address": "0xRecipient...",
"blockchain": "ETH",
"direction": "OUTBOUND"
}'{ "risk_score": 87, "severity": "CRITICAL" }// Your endpoint receives a signed wallet-screening result
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 { status, decision, txn_id } = body;
// status: APPROVED | IN_REVIEW | DECLINED | AWAITING_USER
res.sendStatus(200);
});{ webhook_type: "transaction.status.updated", status: "APPROVED" }# Didit Wallet Screening (KYT) — integrate in 5 minutes
You are integrating Didit's Wallet Screening / Know Your Transaction (KYT)
module into <my_stack>. Follow these steps exactly. Every URL, header,
and enum value below is canonical — do not paraphrase or "improve" them.
Wallet Screening produces a standardised risk payload regardless of
which underlying provider sits behind it:
- Risk score 0-100 + severity (LOW, MEDIUM, HIGH, CRITICAL)
- Source of funds breakdown across 14+ categories
- Exposure table (counterparty entities, direct vs indirect hops)
- Network graph metrics
- Sanctions / darknet / mixer flags as discrete signals
## 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/
## 2. Choose a screening source
- Wallet Screening runs at $0.15 per check on Didit's own on-chain
risk data — nothing to configure, it works out of the box.
- Or bring your own screening provider and run it inside Didit: open
Transactions > Settings > Provider Preferences in the Business
Console (https://business.didit.me) and paste your existing
provider API key. The screening result payload is identical
whichever source you use.
## 3. Two integration paths — pick one
### Path A — Workflow / Transactions API (recommended)
Best when you want Wallet Screening chained into the Transaction
Monitoring rules engine so flagged transactions automatically generate
review cases.
POST https://verification.didit.me/v3/transactions/
Headers:
x-api-key: <your-api-key>
Content-Type: application/json
Body (outbound pre-transfer screen, screens the destination wallet):
{
"transaction_id": "withdrawal-001",
"transaction_category": "finance",
"include_crypto_screening": true,
"transaction_details": {
"direction": "OUTBOUND",
"amount": "0.25",
"currency": "ETH",
"currency_kind": "crypto",
"crypto_params": { "crypto_chain": "ETH" },
"action_type": "withdrawal"
},
"subject": {
"entity_type": "individual",
"vendor_data": "user-123",
"full_name": "John Doe"
},
"counterparty": {
"entity_type": "unhosted_wallet",
"full_name": "John Doe",
"payment_method": {
"method_type": "crypto_wallet",
"account_id": "0xRecipientWallet..."
}
}
}
Direction rules — required:
- INBOUND pre-transfer -> screens counterparty.payment_method.account_id
- INBOUND post-transfer -> screens the tx hash scoped to subject.payment_method.account_id
- OUTBOUND pre-transfer -> screens counterparty.payment_method.account_id
- OUTBOUND post-transfer -> screens the tx hash scoped to counterparty.payment_method.account_id
For post-transfer screening, also include
transaction_details.payment_reference_id -> the blockchain tx hash
### Path B — Standalone wallet-screening API
Best when you want a one-off wallet-risk lookup without writing a full
transaction. Same screening source, same $0.15 per check price.
POST https://verification.didit.me/v3/wallet-screening/
Headers:
x-api-key: <your-api-key>
Content-Type: application/json
Body:
{
"wallet_address": "0xRecipientWallet...",
"blockchain": "ETH",
"direction": "OUTBOUND"
}
Synchronous JSON response — no webhook required for the standalone call.
Use Path A whenever the screening result needs to flow into the rules
engine, case management, or the auto-remediation loop.
### Select the actual network
Managed wallet and transaction screening accepts BTC, ETH, LTC, XRP, BCH,
DOGE, TRX, SOL, MATIC, BNB, BASE, OP and ARB.
BASE is Base, OP is Optimism and ARB is Arbitrum One.
Celo, Mode and Plume are not supported by the managed integration.
Connected providers have their own coverage; Lightning requires a supported connection.
For tokens, currency is the asset symbol and crypto_params.crypto_chain is
its network. Always set the chain explicitly, including for USDT and USDC.
The standalone USDT and USDC values are legacy Ethereum aliases.
Never send ETH as a substitute for another EVM network.
Custom-token transfer indexing must be verified with the token contract.
## 4. Webhooks
Register one webhook destination per workspace:
POST https://verification.didit.me/v3/webhook/destinations/
Body: { "url": "https://yourapp.com/didit/webhooks",
"events": ["transaction.status.updated"] }
Every delivery carries an X-Signature-V2 Hash-based Message Authentication
Code (HMAC) header. 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.Verify it before trusting the payload:
signature = hmac_sha256(secret, raw_body).hex()
if signature != request.headers["X-Signature-V2"]:
return 401
## 5. Reading the result
Every screening returns a standardised risk object:
- risk_score (0-100, higher = more exposure)
- severity ("LOW", "MEDIUM", "HIGH", "CRITICAL")
- source_of_funds (array of { category, percentage })
- exposure (array of { entity, hop_distance, received, sent, risk })
- flags (array including "sanctioned", "darknet_market", "mixer",
"ransomware", "child_exploitation", "scam", and others)
- network_graph (nodes, edges, centrality, depth)
Feed flagged transactions into the Transaction Monitoring rules engine
so high-risk hits automatically generate cases at the published
$0.02 per transaction inspection rate.
## 6. Travel Rule (FATF Recommendation 16)
For Virtual Asset Service Provider (VASP) to VASP transfers, include
the Travel Rule payload alongside the transaction body:
"travel_rule": {
"originator_vasp": {...},
"beneficiary_vasp": {...},
"originator": { "full_name", "date_of_birth", ... },
"beneficiary": { "full_name", "wallet_address" }
}
Didit handles the structured-message exchange with supported counterparty
VASPs. Reference: https://docs.didit.me/transaction-monitoring/travel-rule
## 7. Hard rules — do not change
- Base URL stays https://verification.didit.me (NOT apx.didit.me).
- Auth header stays x-api-key (lowercase, hyphenated).
- Webhook signature header stays X-Signature-V2 (NOT X-Signature).
- currency_kind is always "crypto" for wallet screening.
- direction is always UPPERCASE ("INBOUND" or "OUTBOUND").
- severity casing stays UPPERCASE: LOW, MEDIUM, HIGH, CRITICAL.
## 8. Pricing reference
- $0.15 per wallet screening on Didit's own on-chain risk data — or
bring your own screening provider and run it inside Didit.
- $0.02 per transaction inspected by the Transaction Monitoring rule
engine. AML on flagged transactions at $0.20 per check.
- 500 free verifications every month on every account, forever.
- No minimums, no contracts. Volume discounts above 100k screenings
per month — see https://didit.me/pricing.
## 9. Verify your integration
1. Create a sandbox API key at https://business.didit.me.
2. Post the example outbound transaction above against a known-flagged
tutorial wallet — the response should have severity "CRITICAL" and
carry a "sanctioned" flag.
3. Confirm the webhook fires with transaction.status.updated and the
X-Signature-V2 header verifies cleanly.
4. Open Case Management in the console — the transaction should land
in the queue with source PROVIDER and severity CRITICAL.
Done. Wallet Screening is live. Reach out to support@didit.me with the
workspace id if you hit a wall.适用于构建、测试和您的首批用户。
25+ 模块,价格公开透明。自动享受批量折扣。
适用于大批量和受监管项目。
使用量增长时自动享受批量折扣——无需谈判,无需销售电话。
Didit 是身份和欺诈基础设施,是我们自己构建产品时所期望的平台:开放、灵活且对开发者友好,因此它能真正融入您的技术栈,而不是一个需要您围绕其进行集成的黑盒。
一个 API 涵盖了个人验证(KYC,了解您的客户)、企业验证(KYB,了解您的业务)、加密钱包筛选(KYT,了解您的交易)以及实时交易监控,其技术栈旨在实现:
底层支持:14,000 多种文档类型,支持 48 种以上语言,1,000 多个数据源,每次会话提供 200 多个欺诈信号。Didit 基础设施通过每次会话动态学习,并日益完善。
钱包筛查, 也称为了解您的交易 (KYT), 用于评估加密钱包地址或交易哈希的链上风险。制裁风险、暗网市场、勒索软件钱包、混币器、被盗资金交易对手、诈骗钱包、恐怖主义融资, 这些风险会以风险评分、严重性等级、资金来源细分和离散标记的形式呈现,您可以据此进行实时路由。
在 Didit 内部端到端筛查,每次检查仅需 $0.15, 或者接入您自己的筛查服务商,并在 Didit 内部通过相同的 `/v3/` 应用程序编程接口 (API) 契约运行,实现统一的案件处理和审计。
完整参考文档:docs.didit.me/core-technology/wallet-screening/overview。
在 Didit 内部端到端筛查,每次检查仅需 $0.15, 公开透明的价格,无需管理单独的分析合同。
如果您已有偏好的筛查服务商,可以接入您自己的筛查服务商,并在 Didit 内部运行, 将您的服务商密钥粘贴到业务控制台,Didit 每次派发的筛查都将使用您的密钥,并计入您现有的服务商合同。
无最低消费,无合同,无超额费用惊喜。在 Transactions → Settings → Provider Preferences 中,您可以按工作区切换模式。
Didit 钱包和交易筛选支持 13 个网络: 比特币 (BTC)、以太坊 (ETH)、莱特币 (LTC)、XRP Ledger (XRP)、比特币现金 (BCH)、狗狗币 (DOGE)、波场 (TRX)、Solana (SOL)、Polygon (MATIC)、BNB 智能链 (BNB)、Base (BASE)、Optimism (OP) 和 Arbitrum One (ARB)。
每次查询请选择实际网络。同一地址在不同链上可能存在不同的活动和风险。Celo、Mode 和 Plume 目前不受 Didit 集成支持。已连接的筛选服务提供商有其自己的覆盖范围,而 Lightning 网络需要受支持的已连接提供商。
请参阅支持的区块链和 API 值。
无论后端连接哪个服务商,都提供标准化的负载。
risk_score, 0–100,分数越高表示风险敞口越大。severity, LOW(低)、MEDIUM(中)、HIGH(高)、CRITICAL(严重)。source_of_funds, 14 种以上类别的细分(受制裁钱包、恐怖主义融资、儿童剥削、勒索软件、被盗资金、暗网市场、混币器、诈骗、高风险交易所、赌博、受监管交易所、点对点交易、未识别服务)。exposure, 交易对手实体,包括直接与间接跳数,以及接收和发送的金额。network_graph, 中心性和深度指标。flags, 离散信号,如 sanctioned(受制裁)、darknet_market(暗网市场)、mixer(混币器)、ransomware(勒索软件)。交易监控响应中也会包含相同的结构。
可以,在支持的网络上。 在活动发生的链上筛选钱包。USDT 和 USDC 是代币符号,而非独特的区块链网络。
对于独立的钱包查询,请在 blockchain 中发送实际网络。在交易中,将代币符号保留在 transaction_details.currency 中,并在 transaction_details.crypto_params.crypto_chain 中发送网络,例如 BASE、OP 或 ARB。自定义代币转账的覆盖范围还取决于代币合约是否已编入索引。
独立的 USDT 和 USDC 值是旧版以太坊别名,并非多链搜索。请遵循资产和网络选择指南。
生产数据默认在欧盟的 Amazon Web Services 上处理和存储。企业合同可根据监管机构要求,申请在其他区域存储。
全面加密。 所有数据库、对象存储和备份均采用 AES-256 静态加密。所有 API 调用、webhook 和业务控制台会话均采用传输层安全协议 1.3 (TLS 1.3) 进行传输加密。生物识别数据在独立的客户主密钥下加密。
数据保留期限由您控制。 默认保留期限为无限期(无限制),除非您配置更短的期限,可在每个应用程序 30 天至 10 年之间选择,并且您可以随时通过仪表板或 API 删除任何单个会话。
认证:SOC 2 Type 1 & Type 2、ISO/IEC 27001:2022、iBeta Level 1 Presentation Attack Detection (PAD),以及来自西班牙财政部 / SEPBLAC / CNMV 的公开证明,表明 Didit 的远程身份验证比亲自验证更安全。完整报告请访问 /security-compliance。
Didit 默认符合对身份基础设施至关重要的监管机构要求:
详细备忘录、所有证书、所有监管机构函件:/security-compliance。
三种集成路径, 选择最适合您技术栈的方式:
相同的仪表板、相同的计费、相同的按成功付费价格适用于所有三种方式。分步指南请访问 docs.didit.me/integration/integration-prompt。