---
title: "Email verification — deliverability status for a batch of addresses"
method: POST
path: "/email/verify"
tags: ["Web"]
---

# Email verification — deliverability status for a batch of addresses

`POST /email/verify`

## Request

- Base URL: `https://api.crawlora.net/api/v1`
- URL: `https://api.crawlora.net/api/v1/email/verify`
- Auth: API key in header `x-api-key`

Classifies up to 50 caller-supplied email addresses and returns each one's `status` (`verified` — the mailbox accepts mail; `risky` — catch-all, role or disposable; `invalid` — bad syntax or no MX; `unverified` — could not be determined) and `type` (`generic`, `role`, `personal`). Crawls nothing: pass the addresses you already hold. This is the same classifier the Contact API applies to addresses it discovers, so statuses are directly comparable. When `smtp_enabled` is false, mailbox probing was unavailable for the call and nothing can be reported `verified` — an honest `unverified` rather than a guess.

## Headers

- `x-api-key` string, required

## Request body

- ContactVerifyRequest
  - `emails` string[], required

## Response `200`

OK

- ContactVerifyResponseDoc
  - `code` integer
  - `data` ContactVerifyResponse
    - `checked` integer
    - `results` ContactVerifiedAddress[]
      - `address` string
      - `status` 'verified' | 'risky' | 'unverified' | 'invalid'
      - `type` 'personal' | 'generic' | 'role'
    - `smtp_checked` boolean: SMTPChecked reports whether a mailbox probe actually completed for at least one address in this batch. Configuration is not capability: the egress can be configured and still fail every probe, in which case nothing can come back "verified" and every result degrades to "unverified". Without this a caller cannot tell "these addresses failed verification" from "verification never ran", which is the difference between a bad list and a broken probe.
    - `smtp_enabled` boolean: SMTPEnabled reports whether mailbox probing is CONFIGURED. It says nothing about whether the probes actually worked — read SMTPChecked for that.
  - `msg` string

## Other responses

- `400`: Invalid input, or no usable address in the batch
- `429`: Rate limit exceeded
- `500`: Internal server error during verification

---

[API](https://skmtc.dev/crawlora/apis/crawlora-api.md) · [All operations](https://skmtc.dev/crawlora/apis/crawlora-api/llms.txt) · [OpenAPI document](https://skmtc.dev/crawlora/apis/crawlora-api/revisions/0497899e2016?raw)
