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


世界中の2,000以上の組織から信頼されています。

デバイス上で2秒未満
デバイス上での顔分析により、2秒未満で年齢推定結果を返します。本人確認書類の 写真も、最低限の個人データも不要です。プレゼンテーション攻撃検出でiBeta レベル1の認定を受けたエンジンと同じものを基盤としています。
本人確認書類、ライブネス、顔照合、制裁リスト、住所、年齢、電話番号、メールアドレス、カスタム質問など、必要なチェック項目を選択します。ダッシュボードでフローにドラッグ&ドロップするか、同じフローをAPIにPOSTします。条件分岐やA/Bテストもコード不要で実行できます。
Web、iOS、Android、React Native、Flutter SDKでネイティブに組み込むことができます。ホストされたページにリダイレクトすることも可能です。または、メール、SMS、WhatsAppなど、どこからでもユーザーにリンクを送信するだけです。お使いのスタックに合った方法をお選びください。
Diditがカメラ、照明の指示、モバイル連携、アクセシビリティをホストします。ユーザーがフローを実行している間、200以上の不正信号をリアルタイムでスコアリングし、すべてのフィールドを信頼できるデータソースと照合して検証します。結果は2秒未満で表示されます。
リアルタイムの署名付きWebhookにより、ユーザーが承認、拒否、またはレビューに送られた瞬間にデータベースを同期します。必要に応じてAPIをポーリングすることも可能です。または、コンソールを開いてすべてのセッション、すべての信号を検査し、独自の方法でケースを管理できます。
シングルパッシブフレーム · IDアップロード不要
平均絶対誤差 · ブラケットごと
全体MAE
±5年以内
±3年以内
軸ごとのMAE · 継続的な再学習
ワークフロー別・国別
セルフィー・ボーダーライン・IDフォールバック
iBeta L1 PAD・ISO/IEC 30107-3
$ 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_age_adaptive",
"vendor_data": "user-42"
}'{ "session_url": "verify.didit.me/..." }$ curl -X POST https://verification.didit.me/v3/age-estimation/ \
-H "x-api-key: $DIDIT_API_KEY" \
-F "user_image=@selfie.jpg" \
-F "age_estimation_decline_threshold=18"{ "status": "承認済み", "age_estimation": 27.33 }# Didit Age Estimation — integrate in 5 minutes
You are integrating Didit's Age Estimation module into <my_stack>. Follow
these steps exactly. 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. Two integration paths — pick one
### Path A — Workflow Builder (hosted UI)
Best when you want Didit to handle the camera, framing, low-light
fallback, mobile handoff, and accessibility for you. Required if you want
Adaptive Age Verification (auto-fall-back to ID for borderline cases).
1. Create a workflow that contains the AGE_ESTIMATION feature:
POST https://verification.didit.me/v3/workflows/
Authorization header: x-api-key: <your-api-key>
Body: workflow_label, features array with the single entry
{ feature: "AGE_ESTIMATION" } (UPPERCASE — strict enum)
Optional config:
- age_estimation_decline_threshold (default 18)
- face_liveness_score_decline_threshold (default 30)
- adaptive_id_verification (when true, borderline cases trigger ID
verification fallback governed by per-country age restrictions on
the ID Verification step)
- per_country_age_restrictions (map of country -> min / max age,
with optional state-level overrides)
2. Create a verification session for an end user:
POST https://verification.didit.me/v3/session/
Body: workflow_id (from step 1), vendor_data (your own user id).
Response: session_url — redirect the user to it.
3. Listen for webhook callbacks (see "Webhooks" below).
### Path B — Standalone server-to-server API
Best when you already have a selfie image (mobile SDK capture, native
onboarding app, reseller pipeline) and only need a numeric age estimate
plus passive-liveness verdict on it. No adaptive ID fallback on this
path — wire that yourself if you need it.
POST https://verification.didit.me/v3/age-estimation/
Content-Type: multipart/form-data
Body fields:
- user_image (required, file — single selfie)
- age_estimation_decline_threshold (optional integer 0-100, default 18)
- face_liveness_score_decline_threshold (optional integer 0-100, default 30)
- rotate_image (optional boolean, default false)
- save_api_request (optional boolean, default true)
- vendor_data (optional string, your user id)
Response: JSON with request_id, age_estimation block, created_at.
## 3. Webhooks (Path A only — Path B returns synchronously)
- Register a webhook destination once via
POST https://verification.didit.me/v3/webhook/destinations/
Body: url, subscribed_events: ["session.verified", "session.review_started",
"session.declined"]
- 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.
## 4. Reading the report
### Path A (session) — age_estimation lives on the liveness object
The liveness object on the session report includes age_estimation as a
number-of-years field on the same selfie capture:
- liveness.status "Approved" | "Declined" | "In Review" | "Not Finished"
- liveness.method "PASSIVE" | "FLASHING" | "ACTIVE_3D"
- liveness.score number 0-100 (normalized liveness score)
- liveness.reference_image signed URL to the captured selfie (60-minute TTL)
- liveness.age_estimation estimated age in years (e.g. 24.3)
- liveness.warnings Array of risk objects (see below)
### Path B (standalone) — top-level age_estimation block
- request_id uuid
- age_estimation.status "Approved" | "Declined" | "In Review"
- age_estimation.method "PASSIVE"
- age_estimation.score number 0-100 (passive-liveness score)
- age_estimation.age_estimation estimated age in years (e.g. 27.33)
- age_estimation.user_image.entities array of detected faces, each with
age, bbox, confidence, gender
- age_estimation.user_image.best_angle integer
- age_estimation.face_quality 0-100 face image quality score
- age_estimation.face_luminance 0-100 face luminance score
- age_estimation.warnings Array of risk objects (see below)
- created_at ISO8601
### Warning catalog (both paths)
- AGE_BELOW_MINIMUM estimated age below the configured threshold
- AGE_NOT_DETECTED unable to estimate age (quality / lighting)
- LOW_LIVENESS_SCORE passive-liveness score below threshold
- NO_FACE_DETECTED no face in the capture
- LIVENESS_FACE_ATTACK presentation attack suspected
- FACE_IN_BLOCKLIST face matches an entry in your blocklist
- POSSIBLE_DUPLICATED_FACE face matches a previously verified face
## 5. Hard rules — do not change
- Base URL for /v3/* endpoints is verification.didit.me (NOT apx.didit.me).
- Feature enum is UPPERCASE: AGE_ESTIMATION, LIVENESS, ID_VERIFICATION,
FACE_MATCH, AML, IP_ANALYSIS.
- 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).
- Reference image / video URLs are signed and expire in 60 minutes —
store only the verdict + score, never the biometric media.
## 6. Pricing reference (public)
- AGE_ESTIMATION standalone or bundled inside a workflow: $0.10 per check
- Adaptive fallback to ID Verification (when triggered): $0.15 per check
- Bundled in a full KYC workflow alongside Liveness + ID + IP: $0.33 per session
- 500 free verifications every month, forever, on every account.
## 7. Verify your integration
- Sandbox starts on signup at https://business.didit.me — no separate flag.
- Test images: deterministic synthetic faces returned in sandbox
(predictable estimated age band; trigger AGE_BELOW_MINIMUM by sending
the canonical "minor" test image).
- Switch to live: flip the application environment toggle in console.
When in doubt: https://docs.didit.me/core-technology/age-estimation/overview
月額$0。クレジットカード不要。
使った分だけお支払い。25以上のモジュール。モジュールごとの公開価格、月額最低料金なし。
カスタムMSA & SLA。大量利用や規制対象プログラム向け。
無料で開始 → チェック実行時のみ支払い → カスタム契約、SLA、データレジデンシーが必要な場合はエンタープライズプランへ。
Diditは本人確認と不正対策のためのインフラです。私たちが自分で製品を開発していたときに「こんなプラットフォームがあれば」と願った、オープンで柔軟、そして開発者に優しいプラットフォームです。ブラックボックスとしてではなく、スタックの真の構成要素として機能します。
1つのAPIで、個人の確認(KYC、顧客確認)、企業の確認(KYB、企業確認)、暗号資産ウォレットのスクリーニング(KYT、トランザクション確認)、およびリアルタイムでのトランザクション監視をカバーします。このスタックは以下を念頭に構築されています。
基盤となるフットプリント: 48以上の言語で14,000以上のドキュメントタイプ、1,000以上のデータソース、そしてすべてのセッションで200以上の不正シグナル。Diditのインフラは、すべてのセッションから動的に学習し、日々改善されています。
年齢推定は、1枚の自撮り写真からユーザーの年齢を推定します。受動的で、本人確認書類は不要、モーションチャレンジもありません。アクセスに年齢制限を設ける必要がある場合(アルコール、ギャンブル、アダルトコンテンツ、成熟したプラットフォームなど)に役立ちますが、ほとんどのユーザーにとって完全な本人確認書類の取得は過剰な負担となるでしょう。
全体の平均絶対誤差 (MAE) は±3.5年です。スタンドアロンのApplication Programming Interface (API) では1チェックあたり$0.10で、ワークフロー内にバンドルされている場合も同価格です。英国オンライン安全法および欧州連合の年齢制限要件に準拠しています。詳細なリファレンス: docs.didit.me/core-technology/age-estimation/overview。
POST /v3/age-estimation/エンドポイントでは1チェックあたり$0.10、またはLivenessと組み合わせてワークフロー内で使用する場合も$0.10です。アダプティブ年齢確認フォールバック(境界線上のケースで自動的に本人確認書類のアップロードがトリガーされる場合)は、通常の$0.15の本人確認書類検証料金が適用されます。これは境界線上の少数派にのみ適用され、すべてのセッションに適用されるわけではありません。公開価格: didit.me/pricing。通常、エンドツーエンドの全フローは30秒未満で完了します, IDを手に取り、書類を撮影し、自撮り写真を撮影すれば完了です。これは市場で最速です。従来のKYCプロバイダーでは、同じフローに90秒以上かかることがよくあります。
バックエンドでは、Diditはユーザーが自撮り写真を完了した瞬間からウェブフックが発火するまでの結果をp99で2秒未満で返します。モバイルキャプチャは、低速な電話やネットワーク向けに調整されています。プログレッシブ画像圧縮、遅延SDKロード、ユーザーがウェブから開始した場合のQRコードによるデスクトップから電話へのワンタップハンドオフなどです。
セッションApplication Programming Interface (API)では、年齢推定はlivenessオブジェクトのage_estimationとして存在します。同じ自撮りキャプチャで両方のシグナル(1回のキャプチャで2つの出力)が生成されます。
スタンドアロンApplication Programming Interface (API) (POST /v3/age-estimation/) では、レスポンスはトップレベルのage_estimationブロックを含みます。
status, Approved、Declined、In Review、Not Finished。method, PASSIVE。score、age_estimation(推定年齢(年))、face_quality、face_luminance、warnings。user_image.entities[], 顔ごとの年齢、バウンディングボックス、信頼度、性別。すべてのセッションは7つの明確なステータスのいずれかに分類されるため、コードは常に適切な処理を実行できます。
Approved, すべてのチェックに合格しました。ユーザーを次のステップに進めます。Declined, 1つ以上のチェックに失敗しました。ユーザーは、フロー全体を再実行することなく、失敗した特定のステップ(例:自撮り写真の再撮影)を再提出できます。In Review, コンプライアンスレビューのためにフラグが立てられました。コンソールでケースを開き、すべてのシグナルを確認し、承認または拒否を決定します。In Progress, ユーザーはフローの途中にいます。Not Started, リンクは送信されましたが、ユーザーはまだ開いていません。長時間放置されている場合はリマインダーを送信します。Abandoned, ユーザーはリンクを開きましたが、時間内に完了しませんでした。再エンゲージするか、期限切れにします。Expired, セッションリンクの有効期限が切れました。新しいセッションを作成します。すべてのステータス変更時に署名付きウェブフックが発火するため、データベースは常に同期されます。中断および拒否されたセッションは無料です。
本番データは、デフォルトでAmazon Web Services上の欧州連合内で処理および保存されます。規制当局が要求する管轄区域については、エンタープライズ契約で代替リージョンをリクエストできます。
あらゆる場所で暗号化。 すべてのデータベース、オブジェクトストレージ、バックアップにおいて、保存データはAES-256で暗号化されます。すべてのAPIコール、ウェブフック、ビジネスコンソールセッションにおいて、転送中のデータはTransport Layer Security 1.3で保護されます。生体認証データは、個別のカスタマーマスターキーで暗号化されます。
保持期間はお客様が管理できます。 デフォルトの保持期間は無期限(無制限)ですが、アプリケーションごとに30日から10年の間で短く設定することも可能です。また、ダッシュボードまたはAPIからいつでも個々のセッションを削除できます。
認証: SOC 2 Type 1(Type 2監査進行中)、ISO/IEC 27001:2022、iBeta Level 1 PAD、およびDiditのリモート本人確認が対面での本人確認よりも安全であることを示すスペインのTesoro / SEPBLAC / CNMVからの公式証明書。詳細レポートは/security-complianceをご覧ください。
Diditは、本人確認インフラストラクチャにとって重要な規制当局の要件にデフォルトで準拠しています。
詳細なメモ、すべての証明書、すべての規制当局からの書簡は/security-complianceをご覧ください。
3つの統合パス, お客様のスタックに合うものをお選びください。
すべてのパスで同じダッシュボード、同じ請求、成功ごとの同じ料金です。ステップバイステップガイドはdocs.didit.me/integration/integration-promptをご覧ください。