Skip to main content
GET
Verify Single Email
Use this endpoint to verify a single email address in real-time. OrbiSearch checks DNS records, MX records, and the target mail server to determine whether the mailbox exists and is accepting mail. The response includes a status, a detailed substatus, a plain-English explanation, domain-level signals (mx_record, is_domain_catch_all, is_secure_email_gateway), and enrichment flags such as is_disposable and is_role_account. See the response schema for the meaning of each status and substatus value.

Rate limits

This endpoint is rate-limited to 20 requests per second per API key. Exceeding this limit returns a 429 Too Many Requests response. See errors for how to handle rate limit responses.

Authorizations

X-API-Key
string
header
required

API key for authentication

Query Parameters

email
string
required

Email address to verify.

Required string length: 3 - 320
Example:

"jane.doe@acme.com"

timeout
integer
default:97

Timeout in seconds (3-97).

Required range: 3 <= x <= 97
Example:

70

Response

Successful Response

Verification result for a single email address.

email
string
required

The email address that was verified.

Example:

"jane.doe@acme.com"

status
enum<string>
required

Overall verification status: safe (deliverable), risky (uncertain), invalid (undeliverable), unknown (verification failed).

Available options:
safe,
risky,
invalid,
unknown
Pattern: ^(safe|risky|invalid|unknown)$
Example:

"safe"

explanation
string
required

Plain-English explanation of the verification result.

Example:

"Safe to email. The mailbox exists and is deliverable."

email_provider
string
required

Email service provider (Google Workspace, Gmail, Microsoft Outlook, etc.).

Example:

"Google Workspace"

substatus
string | null

Specific reason for the status (e.g., deliverable, catch_all, policy_blocked, mailbox_not_found, invalid_syntax, greylisted, timeout).

Example:

"deliverable"

mx_record
string | null

The main mail server the domain uses to receive email. Null if the domain has no mail server configured — when that happens, substatus will be no_mx_records.

Example:

"aspmx.l.google.com"

is_domain_catch_all
boolean | null

True if the domain accepts mail for any username (catch-all). Null if we could not determine whether the domain is catch-all.

Example:

false

is_secure_email_gateway
boolean
default:false

True if the domain is protected by a secure email gateway — Proofpoint, Mimecast, Barracuda, or Trend Micro.

Example:

false

is_disposable
boolean | null

True if this is a temporary/disposable email service, false if not, null if unknown.

Example:

false

is_role_account
boolean | null

True if this is a generic role-based email (info@, support@, etc.), false if not, null if unknown.

Example:

false

is_free
boolean | null

True if this is from a free email provider (gmail.com, yahoo.com, etc.), false if not, null if unknown.

Example:

false

confidence
integer | null

How certain we are in the verdict on a 0–100 scale. Filter on this orthogonally to status. For safe results: 99 = high confidence deliverable; 98 = same, but the domain is fronted by a Secure Email Gateway (Mimecast/Proofpoint/Barracuda/TrendMicro) which may filter post-acceptance; 97 = directory hit without app reachability signal — the address exists but carries post-acceptance bounce risk. risky / invalid = 99 (certain in the negative verdict). unknown = 0 (we genuinely don't know). null when the score is unattributable (e.g. no tracked winning method on a safe verdict — defensive).

Required range: 0 <= x <= 100
Example:

99