無料
月額$0。クレジットカード不要。
- 無料KYCバンドル(本人確認 + パッシブ・ライブネス + 顔照合 + デバイス&IP分析), 毎月500回まで
- ブロックリストユーザー
- 重複検出
- すべてのセッションで200以上の不正シグナル
- Diditネットワーク全体でのKYC再利用
- ケース管理プラットフォーム
- ワークフロービルダー
- 公開ドキュメント、サンドボックス、SDK、MCP (Model Context Protocol) サーバー
- コミュニティサポート


世界中の2,000以上の組織から信頼されています。
オンランプに求められること
規制対象のオンランプでは、購入ごとに、購入者のKYCと送金先ウォレットのKYTの両方が求められます。Diditはこれらを1つのワークフローとして提供します。 KYC $0.33 + トランザクション $0.17(ウォレットスクリーニング管理費込み)= 購入あたり$0.50です。 ウォレットプロバイダーにBYOKを適用すると$0.37に下がります。毎月500件まで無料で検証可能です。
ID、生体認証、顔照合、制裁リスト、住所、年齢、電話番号、メールアドレス、カスタム質問など、必要なチェック項目を選択します。ダッシュボードでフローにドラッグ&ドロップするか、同じフローをAPIにポストします。条件分岐やA/Bテストも、コード不要で実行できます。
Web、iOS、Android、React Native、Flutter SDKでネイティブに組み込むか、ホストされたページにリダイレクトします。または、メール、SMS、WhatsAppなど、どこからでもユーザーにリンクを送信するだけです。あなたのスタックに合った方法を選んでください。
Diditは、カメラ、照明の指示、モバイル連携、アクセシビリティをホストします。ユーザーがフローを実行している間、200以上の不正シグナルをリアルタイムでスコアリングし、すべてのフィールドを信頼できるデータソースと照合して検証します。2秒以内に結果が出ます。
リアルタイムの署名付き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_onramp_kyc",
"vendor_data": "buyer-42",
"metadata": { "destination_wallet": "0x2dc1...81f9" }
}'{ "session_url": "verify.didit.me/..." }$ curl -X POST https://verification.didit.me/v3/transactions/ \
-H "x-api-key: $DIDIT_API_KEY" \
-d '{
"transaction_id": "buy-42",
"transaction_details": { "direction": "OUTBOUND", "currency_kind": "crypto" },
"subject": { "vendor_data": "buyer-42", "full_name": "Jamie Example" },
"counterparty": { "full_name": "Destination wallet", "payment_method": { "account_id": "0x2dc1...81f9" }}
}'{ status APPROVED · IN_REVIEW · DECLINED · AWAITING_USER }You are integrating Didit into a fiat-to-crypto on-ramp. Two obligations on every buy:
1. Verify the buyer (KYC) — identity, liveness, face match, device + IP, AML against 1,300+ sanctions / PEP / adverse-media lists. ONE call to the Sessions API.
2. Screen the destination wallet (KYT) — risk-score the address against sanctioned wallets, mixers, high-risk counterparties BEFORE the crypto leaves. ONE call to the Transactions API with currency_kind: "crypto".
Bundle pricing (verified live against POST /v3/transactions/, 2026-05-16):
- KYC bundle: $0.33 per buyer (Sessions API)
- Transactions API call: $0.02 base (transaction-monitoring) + $0.15 wallet screening (Didit's default managed provider) = $0.17 per buy
- Total managed: $0.33 + $0.17 = $0.50 per fully-screened buy
- Total with BYOK on the wallet provider: $0.33 + $0.04 = $0.37 per buy
- First 500 KYC verifications free every month, forever
PRE-REQUISITES
- Production API key from https://business.didit.me (sandbox key in 60s, no card).
- Webhook endpoint with HMAC SHA-256 verification using the X-Signature-V2 header and your webhook secret.
- A workflow_id from the Workflow Builder that bundles ID Verification + Passive Liveness + Face Match 1:1 + Device & IP Analysis + AML Screening.
- Transaction Monitoring enabled in the Business Console (Transactions > Settings) with crypto screening turned on.
STEP 1 — Verify the buyer with the Sessions API
POST https://verification.didit.me/v3/session/
Headers:
x-api-key: <your api key>
Content-Type: application/json
Body:
{
"workflow_id": "<wf id with KYC + AML modules>",
"vendor_data": "<your buyer id, max 256 chars>",
"callback": "https://<your-app>/onramp/kyc/callback",
"metadata": {
"purpose": "crypto_onramp_buy",
"buy_id": "<your internal tx reference>"
}
}
Response: 201 Created with the hosted session URL. Redirect the buyer to it. Sub-2-second median verdict on completion.
STEP 2 — Read the signed webhook on KYC completion
Didit POSTs to your callback. Session statuses are Title Case With Spaces:
Body (excerpted):
{
"session_id": "<uuid>",
"vendor_data": "<your buyer id>",
"status": "Approved",
"id_verification": { "status": "Approved" },
"liveness": { "status": "Approved" },
"face": { "status": "Approved", "similarity_score": 0.94 },
"ip_analysis": { "status": "Approved" },
"aml": { "status": "Approved", "hits": [] }
}
Status enum (exact case): Approved | Declined | In Review | Resubmitted | Expired | Not Finished | Kyc Expired | Abandoned.
Verify the X-Signature-V2 header BEFORE reading the body — HMAC SHA-256 of the raw bytes with your webhook secret.
STEP 3 — Screen the destination wallet BEFORE crediting the buy
POST https://verification.didit.me/v3/transactions/
Headers:
x-api-key: <your api key>
Content-Type: application/json
Body (required fields verified live 2026-05-16):
{
"transaction_id": "<your internal buy reference>",
"transaction_category": "finance",
"include_crypto_screening": true,
"transaction_details": {
"direction": "OUTBOUND",
"amount": "0.25",
"currency": "ETH",
"currency_kind": "crypto",
"action_type": "withdrawal"
},
"subject": {
"entity_type": "individual",
"vendor_data": "<your buyer id>",
"full_name": "<buyer full name>"
},
"counterparty": {
"entity_type": "unhosted_wallet",
"full_name": "<destination wallet label>",
"payment_method": {
"method_type": "crypto_wallet",
"account_id": "<destination wallet address>"
}
}
}
REQUIRED fields the API rejects if missing:
- subject.vendor_data + subject.full_name
- counterparty.full_name
- transaction_details.direction + currency + currency_kind + amount
- For crypto: a wallet address on counterparty.payment_method.account_id (OUTBOUND) or subject.payment_method.account_id (INBOUND post-transfer)
Wallet screening runs server-side when currency_kind = "crypto" and there is a wallet address in the right participant. No separate endpoint.
Response shape (excerpted from a real successful 201):
{
"uuid": "<server transaction uuid>",
"txn_id": "<your transaction_id echoed back>",
"status": "APPROVED",
"score": 0,
"severity": null, // null when score is 0; LOW | MEDIUM | HIGH | CRITICAL | UNKNOWN otherwise
"props": {
"wallet_risk_score": 0,
"sanctions_hit": false,
"pep_counterparty": false,
"aml_provider": "<provider slug>", // identifies the screening provider used on this call
"aml_screening_type": "WALLET_SCREENING",
"aml_screening_status": "COMPLETED"
},
"provider_results": [{ "provider": "<provider slug>", "result_type": "WALLET_SCREENING", "status": "SCREENED", ... }],
"cost_breakdown": {
"total_price": 0.17,
"items": [
{ "usage_type": "transaction_aml_monitoring", "price": 0.15 },
{ "usage_type": "transaction_monitoring", "price": 0.02 }
]
}
}
Transaction status enum (exact case, UPPER_SNAKE_CASE): APPROVED | IN_REVIEW | DECLINED | AWAITING_USER.
When a transaction enters AWAITING_USER, Didit creates a linked remediation session automatically and returns a verification URL on the response.
Real per-transaction cost (verified live):
- Plain fiat transaction monitoring: $0.02
- Crypto transaction with managed wallet screening: $0.17 ($0.02 TM base + $0.15 wallet screen on Didit's managed flow)
- Crypto transaction with BYOK wallet screening: $0.04 ($0.02 TM base + $0.02 wallet screen)
Branch logic:
APPROVED → send the crypto.
IN_REVIEW → hold the buy, route to analyst queue.
DECLINED → refund the fiat, block the address.
AWAITING_USER → redirect the buyer to the remediation session URL.
STEP 4 — Ongoing AML monitoring is automatic
Any session with AML enabled is rescreened DAILY by Didit's continuous monitoring at $0.07 per user per year. There is NO separate endpoint to call — the same workflow does it.
When a previously-approved buyer crosses an AML threshold, the session status changes to "In Review" or "Declined" automatically and your webhook fires the update.
STEP 5 — Off-ramp uses the same two endpoints
Selling crypto for fiat:
- KYC the seller via POST /v3/session/ (same as Step 1).
- Screen the source wallet via POST /v3/transactions/ with direction: "INBOUND" and the source wallet address on subject.payment_method.account_id.
WEBHOOK EVENT NAMES
- Sessions: status changes flow through the standard session webhook.
- Transactions: transaction.created · transaction.updated · transaction.status.changed · transaction.alert.generated.
Verify X-Signature-V2 on every payload.
CONSTRAINTS
- Session statuses use Title Case With Spaces (Approved, In Review). Transaction statuses use UPPER_SNAKE_CASE (APPROVED, IN_REVIEW). They live in different APIs — don't mix them in the same code path.
- Wallet Screening MUST run BEFORE the crypto leaves — a post-transfer screen is useful for audit but useless for blocking.
- Default record retention is 5 years post-relationship per the EU AML package; extend per your supervisor's guidance.
- 200+ fraud signals are evaluated on every KYC session at no extra cost — surface the score via the session decision payload, don't re-query.
Read the docs:
- https://docs.didit.me/sessions-api/create-session
- https://docs.didit.me/transaction-monitoring/overview
- https://docs.didit.me/transaction-monitoring/aml-screening
- https://docs.didit.me/integration/webhooks
Start free at https://business.didit.me — sandbox key in 60 seconds, 500 verifications free every month, no credit card.月額$0。クレジットカード不要。
使った分だけお支払い。25以上のモジュール。モジュールごとの公開価格、月額最低料金なし。
カスタムMSA & SLA。大量利用や規制対象プログラム向け。
無料で開始 → チェック実行時のみ支払い → カスタム契約、SLA、データレジデンシーが必要な場合はエンタープライズプランへ。
Diditは本人確認と不正対策のためのインフラです。私たちが自社製品を開発していたときに「こんなプラットフォームがあれば」と願った、オープンで柔軟、そして開発者に優しいプラットフォームです。ブラックボックスとしてではなく、お客様のスタックの一部として機能します。
単一のAPIで、個人の本人確認(KYC、顧客確認)、企業の本人確認(KYB、企業確認)、暗号資産ウォレットのスクリーニング(KYT、取引確認)、およびリアルタイムの取引監視をカバーします。このスタックは、以下の特長を備えています。
基盤となるのは、48以上の言語に対応する14,000以上のドキュメントタイプ、1,000以上のデータソース、そして全セッションで200以上の不正シグナルです。Diditのインフラは、すべてのセッションから動的に学習し、日々改善されています。
オンランプとは、カードや銀行振込で支払い、ウォレットで暗号資産を受け取ることができるサービスです。MoonPay、Ramp、Transak、そしてAhoraCryptoやGBTC FinanceのようなDiditのお客様を想像してみてください。
購入ごとに2つの問題が発生する可能性があるため、2つのチェックが必要です。
クリーンな購入者でも不正なウォレットに資金を送金する可能性があり、クリーンなウォレットでも不正な購入者から資金を受け取る可能性があります。すべての購入で両方のチェックが必要です。Diditはこれらを1つのワークフローとして提供し、購入あたり$0.50(KYC $0.33 + ウォレットスクリーニング管理付き取引 $0.17)で利用できます。ご自身でウォレットスクリーニングキーをお持ちの場合は$0.37です。
KYCは、氏名、本人確認書類、顔、制裁リスト、ログイン元など、個人に関する情報です。通常、サインアップ時に一度実行し、その後必要に応じて更新します。
一方、KYTは、ウォレットがオンチェーングラフのどこに位置するか、誰と取引したか、フラグが立てられているかなど、ウォレットに関する情報です。これはすべての取引で実行されます。
規制対象のオンランプは、これら両方の確認が義務付けられています。Diditは、購入者のKYCと送金先ウォレットのKYTを同じフローで実行できる単一のワークフローを提供します。これにより、余分な手間を省けます。
通常、エンドツーエンドの全フローは30秒未満で完了します。IDの選択、書類の撮影、セルフィーの撮影で完了です。これは市場最速です。従来のKYCプロバイダーでは、同じフローで90秒以上かかることが一般的です。
バックエンドでは、Diditはユーザーがセルフィーを完了した瞬間からWebhookが発火するまでの時間を測定し、p99で2秒未満で結果を返します。モバイルキャプチャは、低速なスマートフォンやネットワーク向けに最適化されており、プログレッシブ画像圧縮、SDKの遅延ロード、ユーザーがWebから開始した場合のQRコードによるデスクトップからスマートフォンへのワンタップ連携が可能です。
同じ2つのチェックを逆方向に行います。
1つのワークフローで売買の両方を処理します。1つの契約、1つの請求書、両方向の1つの監査証跡。
すべてのセッションは7つの明確なステータスのいずれかに分類されるため、コードは常に適切な処理を実行できます。
Approved, すべてのチェックに合格しました。ユーザーを次のステップに進めます。Declined, 1つ以上のチェックに失敗しました。ユーザーは、フロー全体を再実行することなく、特定の失敗したステップ(例:セルフィーの再撮影)を再提出できます。In Review, コンプライアンスレビューのためにフラグが立てられました。コンソールでケースを開き、すべてのシグナルを確認し、承認または拒否を決定します。In Progress, ユーザーはフローの途中にいます。Not Started, リンクは送信されましたが、ユーザーはまだ開いていません。長時間放置されている場合はリマインダーを送信します。Abandoned, ユーザーはリンクを開きましたが、時間内に完了しませんでした。再エンゲージするか、期限切れにします。Expired, セッションリンクの有効期限が切れました。新しいセッションを作成します。ステータスが変更されるたびに署名付きWebhookが発火するため、データベースは常に同期されます。中断および拒否されたセッションは無料です。
本番データは、デフォルトで欧州連合内のAmazon Web Servicesで処理・保存されます。規制当局が要求する管轄区域については、エンタープライズ契約で代替リージョンをリクエストできます。
あらゆる場所で暗号化。すべてのデータベース、オブジェクトストレージ、バックアップにおいて、保存データはAES-256で暗号化されます。すべてのAPIコール、Webhook、ビジネスコンソールセッションにおいて、転送中のデータはTransport Layer Security 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をご覧ください。
3つの統合パスがあり、お客様のスタックに合ったものをお選びいただけます。
同じダッシュボード、同じ請求、同じ成功報酬型料金が3つのパスすべてに適用されます。ステップバイステップガイドはdocs.didit.me/integration/integration-promptをご覧ください。
はい。EUトラベルルール(資金移動規制)では、CASPはすべての暗号資産送金において、送金元と受取人のデータを交換する必要があります。EU内での暗号資産には最低しきい値はありません。
Diditは以下で対応しています。
1つのワークフローで両方の側面をカバーします。ユーザーのKYCと、送金に関するトラベルルールデータです。
Diditは、承認されたすべての購入者を、サインアップ時に使用した1,300以上のリストに対して毎日再チェックします。これは自動で行われ、別途呼び出すエンドポイントも、追加の設定も、ほとんどのプランで追加費用もかかりません(大容量アカウントではユーザーあたり年間$0.07)。
以前は問題なかった購入者がAMLのしきい値を超えた場合:
In ReviewまたはDeclinedに変更されます。100万人の購入者ベースの場合、これは購入者あたり年間数ドルであり、手動レビューキューよりも桁違いに安価です。
サンドボックスは5分。本番環境は週末で完了します。
POST /v3/session/)、購入ステップに1つの呼び出し(POST /v3/transactions/)を追加AIエージェント(Claude Code、Cursor、Codex、Devin、Aider、Replit Agent)に構築させたい場合は、上記のセクションから統合プロンプトを貼り付けると、エージェントがフローを構築します。Web、iOS、Android、React Native、Flutter用のネイティブSDKはすべて同じセッションモデルを共有しています。