mcpField
D
didit-email-verification

didit-email-verification

github.com/didit-protocolセキュリティ29200 回インストール2 週間前に更新
リポジトリ

didit-email-verification について

メールコードの送信・確認とアドレスのリスク検査を扱う Didit API のスキルです。到達性、既知の漏えい、使い捨てメール、重複利用に加え、任意でソーシャル情報も調べられます。

主な機能

  1. 01ワンタイムメールコードの送信
  2. 02入力コードの検証
  3. 03コード送信なしのメールリスク評価
  4. 04到達性と既知の漏えいの確認
  5. 05ソーシャル情報の任意調査

活用シーン

  1. 01アカウント作成時のメールアドレス確認
  2. 02使い捨て・漏えいアドレスの拒否または警告
  3. 03コードを使わないアドレスリスク評価

MCP 対応

このスキルは Didit Email Verification API の呼び出し方法を説明します。MCP サーバーや MCP 専用インターフェースについては記載されていません。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/didit-protocol/skills --skill didit-email-verification

インストール後、Claude Code で/didit-email-verificationを入力して読み込まれたか確認します。

同梱ファイルscripts/verify_email.py

詳細

Didit メール認証 API

概要

単独で使用できる 3 つのエンドポイント:

  1. メールアドレスにワンタイムコードを送信します:POST /v3/email/send/
  2. ユーザーが入力したコードを確認し、メールレポートを取得します:POST /v3/email/check/
  3. コードを送信せず、1 回の呼び出しでアドレスをスコアリングするリスク評価:POST /v3/email/risk/

主な制約(送信+確認):

  • 確認では、アプリケーションと email アドレスを使って認証を検索します。request_id は指定しません。
  • 保留中の認証は、最初の送信から5 分間有効です。再試行しても有効期間は延長されません。
  • 1 件の認証につき、コードを試せるのは3 回です。コードが間違っている場合、1 回目と 2 回目は "Failed" を返し、3 回目は "Declined"(EMAIL_CODE_ATTEMPTS_EXCEEDED)として確定します。
  • 保留中の認証につき、再送信は1 回までです。有効期間内に同じアドレスへ 2 回目のコードを送信すると、同じ request_id と新しいコードで "Retry" が返ります(前のコードは使えなくなります)。さらに送信すると、新しい request_id で新たな認証が開始されます。
  • コードの照合では大文字と小文字を区別しません。有効なのは直近のコードのみです。
  • 保留中の認証がない場合(未送信、すでに確定済み、送信時に配信不能、または送信から 5 分以上経過)、確認は HTTP 200 と status: "Expired or Not Found" を返します。
  • 新しい認証はそれぞれ API セッションとして保存されます。request_id は GET /v3/session/{sessionId}/decision/ で使用でき、ビジネスコンソールに表示され、進行状況に応じて status.updated ウェブフックが発行されます。リスク評価の呼び出しでも API セッションが作成されます。

機能: 既知のデータ侵害(breaches[])、使い捨てメールプロバイダー、配信可能性(構文と DNS/MX)、セッション間の重複(matches[])、独自のメールブロックリスト/許可リスト、任意のソーシャルフットプリント(enable_social)、不正利用シグナル。

サンドボックス: サンドボックス API キーでは、メール配信、請求、データ保存が省略されます。送信では静的な "Success" とランダムな request_id が返ります。確認ではコード 123456 を使用してください(形式が正しいコードであれば、簡略化された "Approved" ペイロードが返ります)。リスク評価では、決定的な承認データが返ります。形式が正しくない入力には、引き続き 400 が返ります。

料金: メール認証は、送信の成功("Success")1 回につき $0.03 です。"Retry" および "Undeliverable" の送信と確認は無料です(任意のソーシャルアドオンを除く)。単独の呼び出しに無料枠はありません。POST /v3/email/risk/ の価格表は公開されていません(ドキュメントではメール認証より安価と記載されています)。ソーシャルフットプリントのアドオン(enable_social)の価格表も公開されていません(エンドポイント料金に加えてリクエストごとに課金されますが、照会を完了できなかった場合は課金されません)。これらの価格表は 2026 年 11 月 1 日まで有効です。それ以降、Didit の料金体系が変更され、月 500 回の無料確認は月 $10 分の無料クレジットになります。最新の料金はdidit.me/pricingをご確認ください。

API リファレンス: コード送信 | コード確認 | メールリスク評価 機能ガイド: https://docs.didit.me/core-technology/email-verification/overview


認証

すべてのリクエストに x-api-key ヘッダーが必要です。アプリケーションの API キーは、Didit ビジネスコンソールの Developers > API keys から取得してください。または、アカウントとキーをプログラムで作成できます(「はじめに」を参照)。アクセス権限をカスタマイズした名前付きキーで単独の確認を実行するには、Sessions の書き込み権限が必要です。一部のワークフローまたは承認済みセッションのみに制限されたキーでは実行できません。

はじめに(まだアカウントをお持ちでない場合)

Didit API キーをお持ちでない場合は、API を 2 回呼び出して作成できます。

  1. 登録: {"email": "[email protected]", "password": "MyStr0ng!Pass"} を指定して POST https://apx.didit.me/auth/v2/programmatic/register/ を実行します
  2. メールを確認し、6 文字の確認コードを取得します
  3. 確認: {"email": "[email protected]", "code": "A3K9F2"} を指定して POST https://apx.didit.me/auth/v2/programmatic/verify-email/ を実行します。キーはレスポンスの application.api_key に含まれています。

クレジットを追加するには: GET /v3/billing/balance/ で残高を確認し、{"amount_in_dollars": 50} を指定して POST /v3/billing/top-up/ を実行すると、Stripe のチェックアウトリンクが発行されます。

プラットフォーム管理(ワークフロー、セッション、ユーザー、請求)の全容については、didit-verification-management スキルをご覧ください。


ステップ 1:メールコードを送信する

POST https://verification.didit.me/v3/email/send/
ヘッダー
ヘッダー値必須
x-api-keyAPI キーはい
Content-Typeapplication/jsonはい
本文(JSON)
パラメーター型必須デフォルト制約説明
emailstringはい-有効なメールアドレス、最大 254 文字コードの送信先アドレス
options.code_sizeintegerいいえ64~8コードの長さ
options.alphanumeric_codebooleanいいえfalse-true の場合、数字のみではなく大文字 A~Z と 0~9 を使用します
options.localestringいいえen54 種類のコードのいずれかテンプレートの言語。例:en、es、fr、pt-BR、zh-CN、zh-TW。サポート対象外の値を指定すると、サポート対象の一覧を示す 400 が返されます
options.use_white_label_customizationbooleanいいえfalse-Didit のテンプレートではなく、アプリケーションのホワイトラベルブランディングを使用します
signals.ipstringいいえ-IPv4 または IPv6不正検知用のエンドユーザーの IP アドレス
signals.device_idstringいいえ-最大 255 文字Android の ANDROID_ID、iOS の identifierForVendor
signals.device_platformstringいいえ-android、ios、ipados、tvos、webデバイスのプラットフォーム
signals.device_modelstringいいえ-最大 255 文字例:iPhone17,2
signals.os_versionstringいいえ-最大 64 文字例:18.0.1
signals.app_versionstringいいえ-最大 64 文字例:1.2.34
signals.user_agentstringいいえ-最大 512 文字ブラウザーまたはアプリのユーザーエージェント
vendor_datastringいいえ--ユーザー ID。セッションに保存され(最初の送信時)、送信、確認、Webhook で返されます
metadataobjectいいえnullJSON オブジェクトセッションに保存され、返される任意のデータ
例
import requests

response = requests.post(
    "https://verification.didit.me/v3/email/send/",
    headers={"x-api-key": "YOUR_API_KEY", "Content-Type": "application/json"},
    json={
        "email": "[email protected]",
        "options": {"code_size": 6, "locale": "en"},
        "signals": {"ip": "203.0.113.42"},
        "vendor_data": "user-1234",
    },
    timeout=30,
)
print(response.status_code, response.json())
const response = await fetch("https://verification.didit.me/v3/email/send/", {
  method: "POST",
  headers: { "x-api-key": "YOUR_API_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({
    email: "[email protected]",
    options: { code_size: 6, locale: "en" },
    signals: { ip: "203.0.113.42" },
    vendor_data: "user-1234",
  }),
});
const data = await response.json(); // { request_id, status, reason, vendor_data, metadata }
レスポンス(200 OK)
{
  "request_id": "e39cb057-92fc-4b59-b84e-02fec29a0f24",
  "status": "Success",
  "reason": null,
  "vendor_data": "user-1234",
  "metadata": null
}
ステータス値と処理方法
ステータス意味対応
"Success"新しい確認用のコードがメールで送信されました(課金対象)ユーザーがコードを受け取るのを待ってから、Check を呼び出します
"Retry"5 分間のウィンドウ内で 2 回目の送信が行われました。同じ確認用に新しいコードが送信され、request_id は同じまま、前のコードは無効になります(無料)新しいコードを待ってから、Check を呼び出します
"Undeliverable"アドレスの構文または DNS/MX 検証に失敗したか、メールを送信できませんでした。reason は "email_can_not_be_delivered" です。メールは送信されず、課金も発生しません。確認はすでに Declined として完了しており、確認すると "Expired or Not Found" が返されます別のアドレスをユーザーに尋ねます
エラーレスポンス
コード意味対応
400リクエストが無効ですレスポンスボディのフィールドエラーを確認してください(不正なemail、4~8の範囲外のoptions.code_size、サポートされていないoptions.locale)
401API キーの有効期限が切れていますDevelopers > API keysでキーをローテーションするか、新しいキーを作成してください
403API キーがない、間違っている、または取り消されている、エンドポイントへのアクセス権がないスコープ付きキー、キーの IP 許可リスト外からのリクエスト、またはクレジット不足ですdetailまたはerrorのメッセージを確認してください。x-api-keyヘッダーまたはキーのアクセス権を修正するか、クレジットを追加してください
429レート制限:キーごとに1分あたりPOST/PATCH/DELETEリクエストは300件、GETリクエストは600件ですRetry-After秒待ってから再試行してください

クレジットの確認は送信前に実行されます。403の場合は{"error": "You don't have enough credits to perform this request."}が返されます。


ステップ 2:メールコードを確認する

コードを検証し、メールレポートを返します。先に送信を呼び出してください。その際、同じemailを使用します。

POST https://verification.didit.me/v3/email/check/

ヘッダー:ステップ 1 と同じです。

ボディ(JSON)
パラメーター型必須デフォルト値説明
emailstringはい-有効なメールアドレスステップ 1 で使用したものと同じアドレスです(これにより確認と送信が紐付けられます)
codestringはい-最大10文字ユーザーが受け取ったコードです(4~8文字、大文字と小文字を区別しません)
duplicated_email_actionstringいいえ"NO_ACTION""NO_ACTION" / "DECLINE"アプリケーションの別ユーザー(異なるvendor_data)にすでに承認されているアドレスです
breached_email_actionstringいいえ"NO_ACTION""NO_ACTION" / "DECLINE"既知のデータ漏えいで見つかったアドレスです
disposable_email_actionstringいいえ"NO_ACTION""NO_ACTION" / "DECLINE"ドメインが使い捨てまたは一時メールのプロバイダーです
enable_socialbooleanいいえfalse-アドレスのソーシャルフットプリントも検索します(email.email_socialが追加され、リクエストごとにアドオンとして課金されます)
email_no_social_presence_actionstringいいえ"NO_ACTION""NO_ACTION" / "DECLINE"ソーシャルフットプリントの確認で、どのプラットフォームにもアドレスが見つからない場合(profiles_registered: 0)に拒否します。enable_social: trueが必要です

ポリシーに関する注記: リスクが見つかった場合、DECLINEは正しいコードを"Declined"にします。NO_ACTIONはステータスを変更せず、リスクをemail.warnings(ログタイプinformation)に記録します。ブロックリストに登録されたアドレスと配信不能なアドレスは、常に拒否されます。ここで受け付けるのはNO_ACTIONとDECLINEのみです。

例
response = requests.post(
    "https://verification.didit.me/v3/email/check/",
    headers={"x-api-key": "YOUR_API_KEY", "Content-Type": "application/json"},
    json={
        "email": "[email protected]",
        "code": "123456",
        "breached_email_action": "DECLINE",
        "disposable_email_action": "DECLINE",
    },
    timeout=30,
)
result = response.json()
if result["status"] in ("Approved", "Declined"):
    print(result["email"]["is_breached"], result["email"]["is_disposable"])
const response = await fetch("https://verification.didit.me/v3/email/check/", {
  method: "POST",
  headers: { "x-api-key": "YOUR_API_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({
    email: "[email protected]",
    code: "123456",
    breached_email_action: "DECLINE",
    disposable_email_action: "DECLINE",
  }),
});
const result = await response.json(); // inspect result.status, not the HTTP code
レスポンス(200 OK)
{
  "request_id": "e39cb057-92fc-4b59-b84e-02fec29a0f24",
  "status": "Approved",
  "message": "The verification code is correct.",
  "email": {
    "status": "Approved",
    "email": "[email protected]",
    "is_breached": false,
    "breaches": [],
    "is_disposable": false,
    "is_undeliverable": false,
    "verification_attempts": 1,
    "verified_at": "2026-06-12T01:24:47.311323Z",
    "warnings": [],
    "lifecycle": [
      {"type": "EMAIL_VERIFICATION_MESSAGE_SENT", "timestamp": "2026-06-12T01:23:39.580554+00:00", "details": {"status": "Success", "reason": null}, "fee": 0.03},
      {"type": "VALID_CODE_ENTERED", "timestamp": "2026-06-12T01:24:47.311201+00:00", "details": {"code_tried": "123456", "status": "Approved"}, "fee": 0},
      {"type": "EMAIL_VERIFICATION_APPROVED", "timestamp": "2026-06-12T01:24:47.384292+00:00", "details": null, "fee": 0}
    ],
    "matches": []
  },
  "vendor_data": "user-1234",
  "metadata": null,
  "created_at": "2026-06-12T01:24:47.401719+00:00"
}

試行回数が残っている状態でコードが間違っている場合:

{
  "request_id": "11111111-2222-3333-4444-555555555555",
  "status": "Failed",
  "message": "The verification code is incorrect. Attempts remaining: 2",
  "email": null,
  "vendor_data": "user-1234",
  "metadata": null,
  "created_at": "2026-06-12T01:24:21.512340+00:00"
}
ステータス値と対応
ステータス意味request_id / email対応
"Approved"正しいコードで、拒否対象となるリスクはありません送信時のセッション ID / 完全なレポートメールが確認されました。次に進んでください
"Declined"終了状態:正しいコードですが、拒否対象となるリスクに該当した(DECLINEアクション、ブロックリスト登録、または配信不能なアドレス)、あるいは3回目のコード入力が間違っていました送信時のセッション ID / 完全なレポートemail.warningsを確認し、ブロックするか別のアドレスを尋ねてください
"Failed"コードが間違っています。試行回数が残っています(messageに残り回数が記載されます)1回限りのUUID / nullユーザーにコードを再入力するよう依頼してください
"Expired or Not Found"過去5分以内に、このアドレスに対する保留中の確認がありません1回限りのUUID / なし新しいコードを送信してください(ステップ 1)
エラーレスポンス
コード意味対応
400リクエストが無効ですレスポンス本文のフィールドエラーを確認します(形式が正しくない email、code の欠落、NO_ACTION/DECLINE 以外のアクション)
401API キーの有効期限が切れていますキーをローテーションするか、Developers > API keys で新しいキーを作成します
403API キーが指定されていない、誤っている、または無効化されている、このエンドポイントへのアクセス権がないスコープ付きキー、キーの IP 許可リスト外からのリクエスト、またはクレジット不足ですdetail または error のメッセージを確認し、x-api-key ヘッダーまたはキーのアクセス権を修正するか、クレジットを追加します
429レート制限:キーごとに、1 分あたり POST/PATCH/DELETE リクエストは 300 件、GET リクエストは 600 件ですRetry-After の秒数だけ待ってから再試行します

チェックは無料です。クレジットが確認されるのは enable_social アドオンのみです(残高で費用を賄えない場合は、error を含む 403 が返されます)。


メールリスク(コード送信なし)

1 回の同期呼び出しで、配信可能性、使い捨てドメイン、漏えい、重複、および正規化されたリスク情報を評価します。メールは送信されず、ユーザーの操作も必要ありません。API セッション(request_id)を作成します。

POST https://verification.didit.me/v3/email/risk/
本文(JSON)
パラメーター型必須デフォルト説明
emailstringはい-評価するメールアドレス
country_codestringいいえ-インテリジェンスの対象範囲を指定する国コードのヒント。ISO 3166-1 alpha-2 または alpha-3(最大 3 文字)
signalsobjectいいえ-ステップ 1 の signals と同じフィールド(ip、device_id、device_platform、device_model、os_version、app_version、user_agent)
enable_socialbooleanいいえfalseemail.email_social ブロックを追加します(アドオンとしてリクエストごとに課金されます)
vendor_datastringいいえ-参照用の値です。保存され、レスポンスにも含まれます
metadataobjectいいえnullJSON メタデータです。保存され、レスポンスにも含まれます
例
response = requests.post(
    "https://verification.didit.me/v3/email/risk/",
    headers={"x-api-key": "YOUR_API_KEY", "Content-Type": "application/json"},
    json={"email": "[email protected]", "country_code": "US", "vendor_data": "lead-123"},
    timeout=30,
)
result = response.json()
print(result["status"], result["email"]["is_breached"], result["email"]["is_disposable"])
const response = await fetch("https://verification.didit.me/v3/email/risk/", {
  method: "POST",
  headers: { "x-api-key": "YOUR_API_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({ email: "[email protected]", country_code: "US", vendor_data: "lead-123" }),
});
const result = await response.json();
レスポンス(200 OK)
{
  "request_id": "82397be9-5921-4970-a979-2d5b43e08b33",
  "status": "Approved",
  "email": {
    "status": "Approved",
    "email": "[email protected]",
    "is_breached": false,
    "breaches": [],
    "is_disposable": false,
    "is_undeliverable": false,
    "verification_attempts": 0,
    "verified_at": null,
    "warnings": [],
    "lifecycle": [],
    "matches": [],
    "email_intelligence": {
      "score": 4.0,
      "deliverable": "high",
      "breach_risk_level": "Low",
      "breach_risk_index": 4,
      "is_recent_breach": false,
      "is_frequent_breached": false,
      "is_disposable": false,
      "is_free_domain": false,
      "is_breached": false,
      "no_of_breaches": 0,
      "reason_codes": []
    },
    "enrichment": {
      "score": 4.0,
      "deliverable": "high",
      "breach_risk_level": "Low",
      "breach_risk_index": 4,
      "is_recent_breach": false,
      "is_frequent_breached": false,
      "is_disposable": false,
      "is_free_domain": false,
      "is_breached": false,
      "no_of_breaches": 0,
      "reason_codes": []
    }
  },
  "vendor_data": "lead-123",
  "metadata": null,
  "created_at": "2026-09-01T10:30:00.123456+00:00"
}
  • status(トップレベルおよび email.status):"Approved"、"In Review"、または "Declined" です。通常は "Approved" ですが、アプリケーションのメールリスクルールによって、ほかの値になる場合があります。完了した照会はすべて HTTP 200 です。
  • email.email_intelligence と email.enrichment は同じオブジェクトです(互換性のためのエイリアスです)。ベストエフォートで返されるため、利用可能なインテリジェンスを取得できなかった場合は、どちらのキーも含まれません。まず is_breached、is_disposable、is_undeliverable に基づいてルールを設定し、ブロックがない場合は「安全」ではなく「不明」として扱ってください。
  • ベストエフォートのフィールドが欠落していても、照会の開始時に課金されます。

エラー:ステップ 2 と同じ表を参照してください(400 フィールドエラー、401、呼び出しと enable_social アドオンのクレジットチェックを含む 403、429)。


レスポンスフィールドのリファレンス

email オブジェクト(チェックとリスク)
フィールド型説明
status文字列チェック:最終確定したチェックでは "Approved" または "Declined"。リスク:"Approved"、"In Review"、"Declined"
email文字列メールアドレス
is_breachedブール値既知のデータ侵害で見つかったかどうか
breaches配列最新の侵害を最大5件:{name, domain, breach_date, breach_emails_count, description, logo_path, data_classes, is_verified}。description には HTML が含まれる場合があります
is_disposableブール値ドメインが使い捨てまたは一時メールのプロバイダーかどうか
is_undeliverableブール値メールを受信できないかどうか(構文、DNS/MX、またはバウンスが原因)
verification_attempts整数この認証でコードを送信した回数(1回、再試行後は2回)。リスク照会では 0
verified_at文字列または null正しいコードが入力された日時
warnings配列{feature, risk, additional_data, log_type, short_description, long_description}。log_type:error は拒否、warning は確認対象としてフラグ付け、information は記録のみ
lifecycle配列{type, timestamp, details, fee}。種類:EMAIL_VERIFICATION_MESSAGE_SENT、EMAIL_VERIFICATION_RETRY_MESSAGE_SENT、VALID_CODE_ENTERED、INVALID_CODE_ENTERED、EMAIL_VERIFICATION_APPROVED、EMAIL_VERIFICATION_DECLINED、EMAIL_VERIFICATION_IN_REVIEW、EMAIL_VERIFICATION_EXPIRED。fee(USD)がゼロ以外になるのは、最初の送信が成功した場合のみです
matches配列アプリケーションの他のセッションのうち、別のユーザー(vendor_data)がこのアドレスを使用したものを最大5件:{session_id, session_number, vendor_data, verification_date, email, status, is_blocklisted, api_service, source}。source は session、またはブロックリストのエントリーの場合は list_entry(session_id / session_number は null)です
email_intelligence / enrichmentオブジェクトリスクエンドポイントのみ。ベストエフォート:score(0~100。値が高いほどリスクが高い)、deliverable、breach_risk_level(Low / Medium / High)、breach_risk_index、is_recent_breach、is_frequent_breached、is_disposable、is_free_domain、is_breached、no_of_breaches、reason_codes(候補は限定されていません。不明なコードを拒否しないでください)
email_socialオブジェクトenable_social: true で、照会が完了した場合のみ。以下を参照してください
email_social オブジェクト
フィールド説明
profiles_registered / profiles_checked登録されているプラットフォーム数/確認したプラットフォーム数。登録数が 0 の場合も実際の回答であり、合成 ID の一般的な兆候です
names_found、photos_found、communication_breadth、digital_footprint_diversity件数
digital_sophistication_index、engagement_depth_index、subscription_affordability_index0~10 の複合指標
free_platforms、full_paid_platforms、partial_paid_platformsプラットフォームの料金モデル別の登録数
registered_platforms、not_registered_platformscategory と scope(global または local)を含むプラットフォームのリスト
categories、profilesカテゴリーごとの登録数と比率。公開されている場合はプラットフォームごとのプロフィール詳細

照会でデータが返されなかった場合、各件数は null になることがあります。


警告タグ

タグ重大度説明
EMAIL_CODE_ATTEMPTS_EXCEEDEDerror(常に拒否)単独チェックで3回目に間違ったコードを入力した場合
EMAIL_IN_BLOCKLISTerror(常に拒否)メールアドレスがメールブロックリスト(Lists API)に登録されているか、ブロックリスト登録済みの認証に一致しました。additional_data:blocklisted_session_id、blocklisted_session_number、api_service(リストのみで検出された場合はすべてnull)
UNDELIVERABLE_EMAIL_DETECTEDerror(常に拒否)メールアドレスでメールを受信できません
BREACHED_EMAIL_DETECTEDbreached_email_actionに従います既知の漏えいに含まれています(breaches[]を参照)
DISPOSABLE_EMAIL_DETECTEDdisposable_email_actionに従います使い捨てまたは一時メールのドメインです
DUPLICATED_EMAILduplicated_email_actionに従います別のユーザーですでに承認されています。additional_data:duplicated_session_id、duplicated_session_number、api_service
EMAIL_IN_ALLOWLISTinformationメールアドレスがメール許可リストに登録されているため、重複時のアクションはスキップされました

1回の試行でEMAIL_IN_BLOCKLIST、DUPLICATED_EMAIL、EMAIL_IN_ALLOWLISTのうち最大1つのみが発生します(ブロックリスト、重複、許可リストの順)。このAPIでは、DECLINEアクションのログタイプはerror、NO_ACTIONのログタイプはinformationです。


一般的なワークフロー

基本的なメール認証
1. POST /v3/email/send/   -> {"email": "[email protected]"}
   If "Undeliverable"     -> ask for another address (nothing billed)
2. Wait for the user to type the code (valid 5 minutes from the first send)
3. POST /v3/email/check/  -> {"email": "[email protected]", "code": "123456"}
4. If "Approved"             -> email verified
   If "Failed"               -> ask the user to retry (3 attempts in total)
   If "Declined"             -> read email.warnings
   If "Expired or Not Found" -> go back to step 1
厳格なセキュリティ認証
1. POST /v3/email/send/   -> include signals.ip, signals.device_id, signals.user_agent and vendor_data
2. Wait for the user's code
3. POST /v3/email/check/  -> duplicated_email_action, breached_email_action, disposable_email_action = "DECLINE"
4. If "Approved"  -> safe to proceed
   If "Declined"  -> email.warnings[].risk says why; block or ask for another address
コードを使わない事前スクリーニング
1. POST /v3/email/risk/   -> {"email": "[email protected]", "vendor_data": "lead-123"}
2. If email.is_undeliverable or email.is_disposable -> reject before sending any OTP
3. Otherwise continue with the send/check flow above

ユーティリティスクリプト

verify_email.py:コマンドラインからコードを送信・確認し、メールのリスクを評価します。

# Requires: pip install requests
export DIDIT_API_KEY="your_api_key"

python scripts/verify_email.py send [email protected] --locale es
python scripts/verify_email.py check [email protected] 123456 --decline-breached --decline-disposable
python scripts/verify_email.py risk [email protected] --country-code US

ライブラリとしてインポートすることもできます。

from scripts.verify_email import send_code, check_code, score_email_risk

send_result = send_code("[email protected]")
check_result = check_code("[email protected]", "123456", decline_breached=True)
risk_result = score_email_risk("[email protected]")

コメント