Skip to main content
POST
/
v3
/
email
/
check
/
curl
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"
  }'
{
  "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.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"
}

Authorizations

x-api-key
string
header
required

Body

application/json
email
string<email>
required

The same email address used in the matching POST /v3/email/send/ call. This is what links the check to the send.

Example:

"alice@example.com"

code
string
required

The OTP the end user received: 4–8 digits, or 4–8 letters/digits when alphanumeric_code: true was used at send time. Comparison is case-insensitive.

Maximum string length: 10
Example:

"123456"

duplicated_email_action
enum<string>
default:NO_ACTION

What to do when the same address was already used and approved by a different user (only previously Approved verifications count) (different vendor_data) of your application. DECLINE flips the final status to Declined; NO_ACTION records the risk in email.warnings and fills email.matches.

Available options:
NO_ACTION,
DECLINE
breached_email_action
enum<string>
default:NO_ACTION

What to do when the address appears in known data breaches (email.is_breached). DECLINE flips the final status to Declined; NO_ACTION records the risk in email.warnings.

Available options:
NO_ACTION,
DECLINE
disposable_email_action
enum<string>
default:NO_ACTION

What to do when the domain belongs to a disposable/temporary-mail provider (email.is_disposable). DECLINE flips the final status to Declined; NO_ACTION records the risk in email.warnings.

Available options:
NO_ACTION,
DECLINE

Response

Check completed — wrong codes and missing verifications also return 200; inspect status, not the HTTP code. email is populated only on finalized outcomes (Approved/Declined), null on Failed, and absent on Expired or Not Found.

request_id
string<uuid>

On Approved/Declined: the session id of the matched verification — identical to the request_id returned by POST /v3/email/send/. On Failed and Expired or Not Found: a random one-off UUID that cannot be looked up later.

status
enum<string>

Approved — correct code, no declining risk. Declined — terminal: a declining risk matched or the attempt budget (3) was exhausted. Failed — wrong code, attempts remaining. Expired or Not Found — no pending verification for this address in the last 5 minutes.

Available options:
Approved,
Declined,
Failed,
Expired or Not Found
message
string

Human-readable explanation of the outcome, including the number of attempts remaining after a wrong code.

email
object

Full email report. Present (non-null) only on finalized outcomes (Approved/Declined); null on Failed and absent on Expired or Not Found.

vendor_data
string | null

vendor_data of the matched verification's session. null on Expired or Not Found.

metadata
object

metadata of the matched verification's session. null on Expired or Not Found.

created_at
string<date-time>

Timestamp of this check response.