curl -X POST https://verification.didit.me/v3/email/check/ \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"email": "alice@example.com",
"code": "123456",
"disposable_email_action": "DECLINE"
}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.email.check_code(
email="alice@example.com",
code="123456",
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.email.checkCode({
email: "alice@example.com",
code: "123456",
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.Email.CheckCode(ctx, didit.EmailCheckCodeParams{
Email: "alice@example.com",
Code: "123456",
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import me.didit.Didit;
import me.didit.types.EmailCheckCodeParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.email().checkCode(EmailCheckCodeParams.builder()
.email("alice@example.com")
.code("123456")
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->email->checkCode([
'email' => 'alice@example.com',
'code' => '123456',
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.email.check_code(
email: "alice@example.com",
code: "123456"
)
puts result.to_husing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.Email.CheckCodeAsync(new EmailCheckCodeParams
{
Email = "alice@example.com",
Code = "123456",
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"request_id": "e39cb057-92fc-4b59-b84e-02fec29a0f24",
"status": "Approved",
"message": "The verification code is correct.",
"email": {
"status": "Approved",
"email": "alice@example.com",
"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.02
},
{
"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"
}メールOTP確認API:メール認証コードの検証
DiditのPOST /v3/email/check/で、メールのワンタイムコードを検証し、情報漏洩・使い捨てアドレス・到達性のシグナルを取得できます。従量課金制で契約は不要です。
curl -X POST https://verification.didit.me/v3/email/check/ \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"email": "alice@example.com",
"code": "123456",
"disposable_email_action": "DECLINE"
}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.email.check_code(
email="alice@example.com",
code="123456",
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.email.checkCode({
email: "alice@example.com",
code: "123456",
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.Email.CheckCode(ctx, didit.EmailCheckCodeParams{
Email: "alice@example.com",
Code: "123456",
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import me.didit.Didit;
import me.didit.types.EmailCheckCodeParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.email().checkCode(EmailCheckCodeParams.builder()
.email("alice@example.com")
.code("123456")
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->email->checkCode([
'email' => 'alice@example.com',
'code' => '123456',
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.email.check_code(
email: "alice@example.com",
code: "123456"
)
puts result.to_husing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.Email.CheckCodeAsync(new EmailCheckCodeParams
{
Email = "alice@example.com",
Code = "123456",
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"request_id": "e39cb057-92fc-4b59-b84e-02fec29a0f24",
"status": "Approved",
"message": "The verification code is correct.",
"email": {
"status": "Approved",
"email": "alice@example.com",
"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.02
},
{
"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"
}インテリジェンスアドオン
enable_enrichmentをtrueに設定すると、アドレスに対してメールインテリジェンスも実行され、リスクスコアと過去の漏洩履歴が得られます。
このアドオンは、チェックの料金に加えて、定価でリクエスト1件あたり$0.05が請求されます。
残高が不足している場合、リクエストは403を返します。
シグナルの扱いは3つのフィールドで決まります。
いずれもNO_ACTION(デフォルト)またはDECLINEを指定でき、enable_enrichmentがtrueの場合にのみ有効になります。
| フィールド | 却下される条件 |
|---|---|
email_intelligence_score_action | リスクスコアがしきい値を上回る場合。 |
recent_email_breach_action | アドレスが最近の既知のデータ漏洩に含まれている場合。 |
frequent_email_breach_action | アドレスが多数の既知のデータ漏洩に含まれている場合。 |
NO_ACTIONの場合でもシグナルはemail.email_intelligenceで返されるため、独自のルールを適用できます。承認
お客様のアプリケーションのAPIキーです。Business ConsoleのDevelopers -> API keysで取得できます。プライマリキーはフルアクセス権を持ちます。名前付きキーにはスコープを設定できます。リソースごとのアクセス権(なし、読み取り、書き込み)、一部のワークフローまたは承認済みセッションへの限定、IPアドレスのリストへの限定、有効期限の設定です。401は、キーが誤っている、失効している、または期限切れであることを意味します。403は、キーが送信されていない、キーにこのリソースやアクションへのアクセス権がない、またはIPリスト外のアドレスからリクエストが送信されたことを意味します。セッションのルートでの404は、セッションがキーのワークフローまたはステータスの対象外であることを意味します。メディアへのアクセス権がないキーでは、画像、動画、PDFのURLがnullで返されます。セッションの書き込み権限がないキーでは、セッションのリンクとトークンがnullで返されます。詳細は次を参照してください: https://docs.didit.me/console/api-keys
ボディ
対応するPOST /v3/email/send/の呼び出しで使用したものと同じメールアドレスです。この値によって、確認と送信が紐付けられます。
"alice@example.com"
エンドユーザーが受け取ったOTP。4〜8桁の数字、または送信時にalphanumeric_code: trueを使用した場合は4〜8文字の英数字です。比較では大文字と小文字は区別されません。
10"123456"
同じメールアドレスが、アプリケーションの別のユーザー(異なるvendor_data)によってすでに使用され、承認されている場合の対応です(過去に承認済みとなった認証のみが対象です)。DECLINEは最終的なstatusをDeclinedに切り替え、NO_ACTIONはリスクをemail.warningsに記録してemail.matchesを設定します。
NO_ACTION, DECLINE メールアドレスが既知のデータ漏えいに含まれている場合の処理です(email.is_breached)。DECLINEは最終的なstatusをDeclinedに変更し、NO_ACTIONはリスクをemail.warningsに記録します。
NO_ACTION, DECLINE ドメインが使い捨て/一時メールのプロバイダーに属する場合(email.is_disposable)の対応です。DECLINEは最終的なstatusをDeclinedに切り替え、NO_ACTIONはリスクをemail.warningsに記録します。
NO_ACTION, DECLINE trueの場合、そのアドレスに対してメールインテリジェンスも実行します(リスクスコアと漏洩履歴)。このエンドポイント自体の料金に加えて、リクエストごとにemail_intelligence_api1ユニット(定価で$0.05)として課金されます。残高が不足している場合、リクエストは403を返します。
false
メールインテリジェンスのリスクスコアがしきい値を超えた場合のアクション。DECLINEは最終的なstatusをDeclinedに変更し、NO_ACTIONは却下せずにシグナルを記録します。enable_enrichmentがtrueの場合にのみ有効です。
NO_ACTION, DECLINE メールアドレスが最近の既知のデータ侵害に含まれている場合のアクション。DECLINEは最終的なstatusをDeclinedに変更し、NO_ACTIONは却下せずにシグナルを記録します。enable_enrichmentがtrueの場合にのみ有効です。
NO_ACTION, DECLINE メールアドレスが多数の既知のデータ侵害に含まれている場合のアクション。DECLINEは最終的なstatusをDeclinedに変更し、NO_ACTIONは却下せずにシグナルを記録します。enable_enrichmentがtrueの場合にのみ有効です。
NO_ACTION, DECLINE trueの場合、アドレスのソーシャルフットプリント(そのアドレスが登録されているメール、ソーシャル、ビジネス、EC、エンターテインメントの各プラットフォーム)も検索します。このエンドポイント自体の料金に加えて、リクエスト1件ごとにemail_social1ユニット分が請求されます。
true
ソーシャルフットプリントチェックで、対象となるいずれのプラットフォームにもこのメールアドレスが登録されていないと判明した場合のアクション。このエンドポイントで指定できるのはNO_ACTIONとDECLINEのみです。REVIEWは、ワークフロー設定の同名のキーで利用できます。
NO_ACTION, DECLINE レスポンス
チェックが完了しました。誤ったコードや存在しない検証の場合も200が返るため、HTTPコードではなくstatusを確認してください。emailは確定した結果(Approved/Declined)の場合のみ値が入り、Failedではnull、Expired or Not Foundでは含まれません。
Approved/Declinedの場合は、一致した認証のセッションIDで、POST /v3/email/send/が返すrequest_idと同一です。FailedおよびExpired or Not Foundの場合は、後から照会できないランダムな一回限りのUUIDです。
Approved:コードが正しく、却下となるリスクもありません。Declined:最終状態です。却下となるリスクに該当したか、試行回数の上限(3回)に達しました。Failed:コードが誤っており、試行回数が残っています。Expired or Not Found:直近5分以内に、このメールアドレスに対する保留中の認証がありません。
Approved, Declined, Failed, Expired or Not Found 結果を人が読める形で説明したもの。誤ったコードが入力された後の残り試行回数を含みます。
メールの完全なレポート。最終的な結果(Approved/Declined)の場合にのみ存在し(null以外)、Failedの場合はnull、Expired or Not Foundの場合は含まれません。
Show child attributes
Show child attributes
一致した認証のセッションのvendor_dataです。Expired or Not Foundの場合はnullです。
一致した認証のセッションのmetadata。Expired or Not Foundの場合はnull。
このチェックレスポンスの日時。