無料
開発、テスト、そして最初のユーザー向け。
- 毎月500件のフルKYC認証
- 本人確認、生体認証、顔照合、デバイス&IP
- 200以上の不正検知シグナル、ブロックリスト、重複チェック
- Diditネットワーク全体でKYCを再利用可能
- ワークフロービルダー、ケース管理、SDK
- AIサポート コンソール内AIエージェント、ドキュメント、コミュニティ。
世界中の3,000以上の組織から信頼されています。

$0.15 per check
1つのAPIで、Bitcoin、Ethereum、Solana、Polygon、BNB Smart Chain、Base、Optimism、Arbitrum Oneを含む13のマネージドブロックチェーンネットワークをカバーします。ウォレットとトランザクションを実際のネットワーク上でスクリーニングするか、独自のスクリーニングプロバイダーをDidit内で実行することも可能です。
ID、生体認証、顔照合、制裁リスト、住所、年齢、電話番号、メールアドレス、カスタム質問など、必要なチェック項目を選択します。ダッシュボードでフローにドラッグ&ドロップするか、同じフローをAPIにPOSTするだけです。条件分岐や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、取引確認)、およびリアルタイムでの取引監視をカバーします。このスタックは以下の特長を備えています。
基盤となるフットプリントは、48以上の言語に対応する14,000以上のドキュメントタイプ、1,000以上のデータソース、そして全セッションで200以上の不正シグナルです。Diditのインフラは、すべてのセッションから動的に学習し、日々改善されています。
ウォレットスクリーニング(Know Your Transaction (KYT) とも呼ばれます)は、暗号資産ウォレットアドレスまたはトランザクションハッシュのオンチェーンリスクを評価します。制裁対象への露出、ダークネット市場、ランサムウェアウォレット、ミキサー、盗難資金の取引相手、詐欺ウォレット、テロ資金供与などを、リスクスコア、深刻度レベル、資金源の内訳、およびリアルタイムでルーティング可能な個別のフラグとして表示します。
Didit内でエンドツーエンドでスクリーニングされるチェック1回あたり$0.15です。または、独自のスクリーニングプロバイダーをDidit内で利用することも可能で、同じ/v3/ Application Programming Interface (API) コントラクトで、統一されたケースワークと監査が提供されます。
詳細なリファレンス: docs.didit.me/core-technology/wallet-screening/overview。
Didit内でエンドツーエンドでスクリーニングされるチェック1回あたり$0.15です。単一の公開価格で、別途分析契約を管理する必要はありません。
既にお好みのスクリーニングプロバイダーがある場合は、独自のスクリーニングプロバイダーをDidit内で利用できます。プロバイダーキーをビジネスコンソールに貼り付けるだけで、Diditがディスパッチするすべてのスクリーニングがお客様のキーを使用し、既存のプロバイダー契約にカウントされます。
最低利用料金、契約、超過料金の心配はありません。ワークスペースごとにモードを切り替えるには、Transactions → Settings → Provider Preferences をご利用ください。
マネージドウォレットおよびトランザクションスクリーニングは13のネットワークに対応しています。 Bitcoin (BTC)、Ethereum (ETH)、Litecoin (LTC)、XRP Ledger (XRP)、Bitcoin Cash (BCH)、Dogecoin (DOGE)、Tron (TRX)、Solana (SOL)、Polygon (MATIC)、BNB Smart Chain (BNB)、Base (BASE)、Optimism (OP)、Arbitrum One (ARB)です。
各ルックアップでは実際のネットワークを選択してください。同じアドレスでも、チェーンによってアクティビティやリスクが異なる場合があります。Celo、Mode、Plumeは現在、マネージド連携ではサポートされていません。連携済みのスクリーニングプロバイダーには独自のカバー範囲があり、Lightningにはサポート対象の連携プロバイダーが必要です。
詳細はサポート対象ブロックチェーンとAPI値をご覧ください。
背後にあるプロバイダーに関わらず、標準化されたペイロードです。
risk_score, 0~100、数値が高いほどリスクが高いことを示します。severity, LOW、MEDIUM、HIGH、CRITICAL。source_of_funds, 14以上のカテゴリ(制裁対象ウォレット、テロ資金供与、児童搾取、ランサムウェア、盗難資金、ダークネット市場、ミキサー、詐欺、高リスク取引所、ギャンブル、規制対象取引所、P2P、未識別サービス)にわたる内訳。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値はレガシーなEthereumエイリアスであり、マルチチェーン検索ではありません。アセットとネットワーク選択ガイドに従ってください。
本番データは、デフォルトでAmazon Web Services上の欧州連合内で処理・保存されます。規制当局が要求する管轄区域については、エンタープライズ契約で代替リージョンをリクエストできます。
あらゆる場所で暗号化。すべてのデータベース、オブジェクトストレージ、バックアップにおいて、保存データはAES-256で暗号化されます。すべてのAPIコール、Webhook、Business Consoleセッションにおける転送データは、Transport Layer Security 1.3で暗号化されます。生体認証データは、個別のカスタマーマスターキーで暗号化されます。
データ保持期間はお客様が管理できます。デフォルトの保持期間は無期限(無制限)ですが、アプリケーションごとに30日から10年の間で短縮設定が可能です。また、ダッシュボードまたはAPIからいつでも個別のセッションを削除できます。
認証: SOC 2 Type 1 & Type 2、ISO/IEC 27001:2022、iBeta Level 1 Presentation Attack Detection (PAD)、およびスペインのTesoro / SEPBLAC / CNMVによる、Diditのリモート本人確認が対面確認よりも安全であるという公式認定。詳細レポートは/security-complianceをご覧ください。
Diditは、本人確認インフラにとって重要な規制当局の要件にデフォルトで準拠しています。
詳細なメモ、すべての証明書、すべての規制当局からの書簡は/security-complianceをご覧ください。
3つの統合パスがあります。お客様のスタックに合ったものをお選びください。
これら3つすべてで、同じダッシュボード、同じ請求、同じ成功報酬型料金が適用されます。ステップバイステップガイドはdocs.didit.me/integration/integration-promptをご覧ください。