POST /v1/validate
Validate a single email address through the 4-layer validation pipeline. The response also includes a combined-evidence assessment. It preserves the canonicalresult while explaining whether the strongest evidence came from
SMTP, an exact delivery or bounce outcome, DNS only, or non-intrusive inference.
Endpoint
Headers
Retry-safe requests
Send a uniqueIdempotency-Key when a timeout or lost connection might cause
your client to retry. Reusing the key with the same canonical email and contact
context returns the exact successful JSON response and sets
Idempotency-Replayed: true. The original response sets the header to false.
A key reused with different request semantics returns 409 idempotency_key_conflict. A duplicate that is still running returns 409 idempotency_request_in_progress with Retry-After: 2. Only successful responses
are retained, so insufficient-credit and transient failures can be retried with
the same key after the cause is resolved.
Request Body
Internationalized addresses
Unicode domain names are accepted and canonicalized to lowercase IDNA Punycode before syntax, DNS, cache, and SMTP processing. For example,Sales@BÜCHER.DE is processed and returned as
Sales@xn--bcher-kva.de. Only the domain is case-normalized; the local part is
preserved because SMTP local parts can be case-sensitive.
RFC 6531 SMTPUTF8 dot-atom local parts are also accepted and preserved exactly.
For example, üser@example.com continues through DNS and SMTP validation. The
validator sends the internationalized recipient only after the selected MX
advertises the RFC-required SMTPUTF8 and 8BITMIME capability pair; the
required SMTPUTF8 and BODY=8BITMIME parameters are included on MAIL FROM.
If no usable MX advertises the extension, the address returns 200 with
result: "unknown", syntax_valid: true, smtp_status: "unknown_policy_or_inconclusive", unknown_reason_code: "smtp_smtputf8_unsupported", and zero credits charged. This is a server
capability gap, not proof that the mailbox is invalid. Quoted local parts remain
outside the supported syntax contract. A 400 is reserved for a malformed
body or a missing/non-string email field.
Example Request
Response
Success Response (200 OK)
Valid Personal Email
Enterprise Gateway (Shadow Assessment)
Enterprise security gateways and some hosted mailbox providers intentionally conceal recipient existence. In that case SMTP remains inconclusive and the canonical result staysunknown. When contact context supports a non-intrusive
assessment, the response exposes it separately:
combined_evidence_shadow is true, continue to follow
send_recommendation. Shadow assessments are persisted for prospective
delivery and hard-bounce calibration; they do not change billing, cacheability,
or the canonical result.
unknown_reason_code is stable and intended for automation and aggregate
reporting. charge_reason remains a human-readable explanation and may change
without changing the underlying reason code.
Temporary SMTP uncertainty is split by retry cause. Provider-requested deferral,
recipient receiving limits, validation-route rate limits, and temporary sender
policy blocks use validation_retry_action: "retry_later". Complete 451 4.3.0 Email server has temporarily rejected this message, 451 4.3.0 Mail server temporarily rejected message, 451 4.4.2 Timeout - closing connection, and
421 4.7.0 Try again later, closing connection replies use portable
smtp_provider_retry_later semantics documented by Google and Proton. They
remain non-suppressing, count against the destination circuit, and do not
request an immediate retry. Wrong codes, statuses, incomplete diagnostics,
token lookalikes, and layered enhanced statuses keep generic temporary
behavior. The separate 451 4.3.0 Multiple destination domains diagnostic
remains a protocol error. Google 421 4.7.0 Connection expired, try reconnecting remains generic temporary evidence and can request a new
connection.
Complete temporary RFC 3463 4.3.1 Mail system full, 4.4.1 No answer from host, 4.4.2 Bad connection, 4.4.3 Directory server failure, 4.4.4 Unable to route, 4.4.5 Mail system congestion, and 4.4.7 Delivery time expired
replies also use
smtp_provider_retry_later. These destination resource and routing failures
remain non-suppressing, count against the destination circuit, and do not
request an immediate same-route retry. The complete standardized diagnostic
and a coherent temporary primary reply are required. Repeated RFC 2034 status
lines are accepted only when every enhanced status agrees. Incomplete,
lookalike, adjacent, reused, layered, and primary-class conflict evidence stays
generic.
Exact Microsoft 450 4.4.316 Connection refused [Message=Socket error code 10061]
replies are also explicit temporary cases. The Microsoft reply uses
smtp_provider_retry_later because Exchange Online has already failed its
connection attempts to the external receiving server. It remains
non-suppressing, counts against the destination circuit, and does not request
an immediate same-route retry. The exact primary code, enhanced status,
diagnostic, and a supported Microsoft-attributed MX are required. Exact Microsoft 550 4.4.7 QUEUE.Expired; message expired NDRs also use smtp_provider_retry_later.
Exchange Online emits this permanent wrapper only after repeated delivery
attempts exhaust the queue lifetime, so it remains temporary destination-
transport evidence. It does not suppress the recipient or request an immediate
same-route retry, but it counts against the destination circuit. Primary code
550, exact status 4.4.7, both diagnostic phrases, and a supported Microsoft-attributed MX
are required; nearby or incomplete evidence stays inconclusive. Bare Microsoft
550 5.4.300 Message expired NDRs also use smtp_provider_retry_later when
5.4.300 is the sole enhanced status. They remain non-suppressing, count
against the destination circuit, and do not request an immediate same-route
retry. A nested downstream enhanced status makes this fallback abstain so the
more specific cause remains available. Exact Google-attributed 454 4.7.0
login-limit replies and exact portable Google- and Proton-documented 454 4.7.0 Cannot authenticate due to a temporary system problem replies use temporary
sender-policy evidence across SMTP phases. Exact Microsoft 4.7.26 IPv6
SPF/DKIM deferrals and Yahoo-attributed 421 or 451 temporary TS*
deferrals with Message temporarily deferred, Messages from temporarily deferred, or All messages from will be temporarily deferred are validation-
sender policy blocks. Yahoo TS and TSS tokens require exactly two digits.
Yahoo assigns this family to sender complaints, content, reputation, or traffic
patterns; Yahoo resource-unavailable replies remain destination retry-later
evidence.
These replies do not open the destination circuit or request an immediate
same-route retry. Repair or wait for sender authentication or reputation before
retrying. Wrong basic codes, neighboring statuses, incomplete diagnostics,
token lookalikes, and layered statuses keep generic temporary behavior. Google
hostname lookalikes remain controls for the Google-only login-limit tuple.
Exact Google- and Proton-documented 421 4.7.0 IP not in whitelist for RCPT domain, closing connection replies use smtp_sender_policy_temporary across
SMTP phases and MX providers. They identify the validation sending route, not
recipient or destination health, and use retry_later without suppression,
destination-circuit impact, or an immediate same-route retry. Wrong basic
codes, neighboring statuses, incomplete diagnostics, token lookalikes, and
layered statuses remain generic temporary evidence.
Complete 450 4.2.1 and 550 5.2.1 replies that state the user is receiving
mail or email too quickly, or at a rate that prevents additional messages, use
smtp_recipient_rate_limited with retry_later across providers. Google and
Proton both document this family as recipient receive pressure or delayed
delivery. It does not suppress the recipient, open the destination circuit, or
request an immediate retry. A plain 5.2.1, an inactive-account diagnostic,
different recipient wording, a neighboring status, or a conflicting basic
reply class keeps its standard or inconclusive meaning.
Exact Proton 550 5.7.1 Email quota exceeded. replies on a Proton-owned MX use
mailbox_temporarily_unavailable. Proton documents this provider-specific
status as recipient mailbox capacity, not sender policy. The address is not
permanently suppressed, the destination circuit stays closed, and no immediate
same-route retry occurs. Retry after the recipient frees storage. The exact
basic code, sole enhanced status, complete diagnostic, and Proton MX attribution
are required. Wrong codes, incomplete or sender-scoped phrases, additional
statuses, and Proton hostname lookalikes stay policy-scoped or inconclusive.
Exact Proton-owned 550 permanent policy replies use the failed object to
select an actionable cause. 5.7.0 Mail relay denied, unauthorized direct
sending-IP, unauthenticated-domain, and 5.7.26 DMARC replies use
smtp_sender_policy_rejected; 5.7.1 Invalid credentials for relay uses
smtp_sender_identity_rejected; likely-unsolicited-message text uses
smtp_message_content_rejected; and user-or-domain policy text uses
smtp_provider_policy_rejected because the affected side is ambiguous. Each
rule requires the complete Proton diagnostic, one enhanced status, basic code
550, and a Proton-owned MX. The DMARC form accepts one bounded valid domain
token. All use manual_review and do not suppress the recipient, open the
destination circuit, or request an immediate retry. Incomplete text, layered
statuses, changed wording, and Proton hostname lookalikes stay generic.
Permanent Microsoft 5.7.23 SPF and 5.7.25 IPv6 reverse-DNS failures use
smtp_sender_policy_rejected with manual_review; they are not recipient
rejection evidence.
Exact Microsoft 5.1.8 Access denied, bad outbound sender replies also use
smtp_sender_policy_rejected with manual_review. Microsoft assigns this
reply to an account restricted for outbound spam, compromise, or sending
limits. Investigate and secure the account, then remove its sending restriction
before revalidating. The rule requires a coherent permanent basic reply, the
exact status and diagnostic, and a supported Microsoft-attributed MX. It does not suppress the
recipient, open the destination circuit, or request an immediate retry.
Portable X.1.8 replies and incomplete or unattributed diagnostics keep their
sender-identity behavior.
Exact Microsoft 5.7.703 Tenant Allow/Block List replies, 5.7.705
sender-tenant threshold bans, and 5.7.708 sending-IP traffic blocks use the
same cause. Microsoft assigns 5.7.703 to the sending organization’s block
list even when the diagnostic names a recipient or domain, so it is not
mailbox-absence evidence. These rules require a coherent permanent basic
reply, the exact enhanced status, the complete documented diagnostic, and a
supported Microsoft-attributed MX. Do not suppress the recipient, open the destination
circuit, or request an immediate retry.
Exact Microsoft 5.7.520 Access denied, Your organization does not allow external forwarding replies use smtp_provider_policy_rejected with
manual_review. Microsoft assigns AS(7555) to an outbound spam policy that
blocks automatic external forwarding. Review the forwarding rule and outbound
spam policy before retrying. The rule requires a coherent permanent basic
reply, the complete diagnostic including AS(7555), and a supported Microsoft-attributed MX.
It does not suppress the recipient, open the destination circuit, or request
an immediate retry. Incomplete diagnostics, neighboring statuses, different
AS codes, class conflicts, and Microsoft hostname lookalikes stay generic.
Exact Microsoft HVE 535 5.7.142, 5.7.143, and 5.7.144 XOAUTH2 failures use
smtp_sender_identity_rejected. Exact HVE 550 5.2.240 and 5.2.241
sending-account setup or billing failures and 550 5.7.240 through 5.7.246
application, tenant, and external-sending restrictions use
smtp_sender_policy_rejected. Recipient wording in the external-sending
diagnostics describes the HVE sender account; it is not recipient-absence
evidence. Microsoft 5.1.241 remains separate recipient evidence because it
explicitly describes a send-only account with no mailbox. The HVE rules require
the documented basic code, exact enhanced status, complete diagnostic, and a
supported Microsoft-attributed MX. They use manual_review and never suppress the recipient,
open the destination circuit, or request an immediate retry.
Exact Microsoft 432 4.3.2 STOREDRV.Deliver; recipient thread limit exceeded
replies use smtp_recipient_rate_limited with retry_later. They identify
recipient mailbox processing pressure, not destination failure or recipient
absence. The rule requires basic code 432, the exact enhanced status, the
complete diagnostic, and a supported Microsoft-attributed MX. Wrong basic codes, neighboring
statuses, incomplete diagnostics, and Microsoft hostname lookalikes stay
generic temporary failures. The rule does not suppress the recipient, open the
destination circuit, or request an immediate retry.
Exact Microsoft HVE 421 4.3.240 authenticated-source connection limits use
smtp_sender_rate_limited. Exact HVE 450 4.4.244 recipient-rate submission
throttles use smtp_recipient_rate_limited. Both remain temporary with
retry_later. They require the documented basic code, enhanced status,
complete diagnostic, and a supported Microsoft-attributed MX. Neither suppresses a recipient,
opens the destination circuit, or requests an immediate retry.
Exact Proton-documented 421 4.7.0 Our system has detected an unusual rate of unsolicited mail originating from your IP address and 550 5.7.1 Our system has detected an unusual rate of unsolicited mail from your IP address replies
use portable smtp_sender_rate_limited across SMTP phases and MX providers.
The 421 reply remains unknown_temporary; the 550 wrapper remains
unknown_policy_or_inconclusive. Both use retry_later and do not suppress
the recipient, open the destination circuit, or request an immediate same-route
retry. Wrong basic codes, neighboring statuses, incomplete diagnostics, token
lookalikes, and layered statuses keep their generic safe behavior.
A permanent or statusless validation-sender quota uses
smtp_sender_quota_exceeded with manual_review, because repeating the same
request cannot repair operator-owned quota configuration. A temporary sender
quota uses the same reason with retry_later. Exact Google 421 4.7.28
same-Message-ID quotas and exact Google- and Proton-documented 452 4.5.3
message recipient-count and domain-policy transaction-size limits use this
cause without an immediate same-route retry. The 452 replies are portable
across SMTP phases and MX providers. The exact 421 reply remains temporary
and imported feedback remains soft. Wrong basic codes, neighboring statuses,
incomplete diagnostics, token lookalikes, and layered statuses keep their
generic safe behavior.
Exact 550 5.4.5 Daily sending quota exceeded, 550 5.4.5 Daily SMTP relay limit exceeded for user, and 550 5.7.1 daily SMTP relay customer-limit
replies use the permanent portable form documented by Google and Proton. They
do not suppress the recipient, open the destination circuit, or request an
immediate retry. Wrong basic codes, neighboring statuses, incomplete
diagnostics, and mixed enhanced statuses stay generic.
The complete 450 4.2.1 Peak SMTP relay limit exceeded for this customer. This is a temporary error. reply uses the portable temporary form documented by
Google and Proton. It returns retry_later but does not suppress the recipient,
open the destination circuit, or request an immediate retry. Wrong basic codes,
neighboring statuses, incomplete diagnostics, and mixed statuses keep their
generic mailbox or temporary meaning.
Exact Microsoft 4.5.3 Too many recipients replies also use this temporary
cause with retry_later. Microsoft tells the sender to split envelope
recipients into smaller transactions and resend. The rule requires a coherent
temporary basic reply, the exact status and diagnostic, and a Microsoft-owned
MX. It does not suppress the recipient, open the destination circuit, or
request an immediate same-route retry.
Exact Microsoft 5.7.232, 5.7.233, and 5.7.236 tenant
external-recipient limits use this cause across SMTP phases. They do not
suppress the recipient, open the destination circuit, or request an immediate
retry.
smtp_sender_identity_rejected also uses manual_review. It means the MX
rejected the validation sender address, sender domain, HELO identity, or SMTP
authentication principal; repair that sender configuration before revalidating
the recipient. Complete Google- and Proton-documented SMTP authentication
replies use this cause across MX providers. Shared tuples include 503 5.7.0
blocked identity-change and 554 5.7.0 excessive unauthenticated-command
replies. Google tuples include 530 5.7.0 authentication-required, 534 5.7.14 and 534 5.7.90 browser-login, 534 5.7.90
application-password-required, 535 5.7.80 credential-rejection, and 504 5.7.40 unrecognized-authentication-type or unsupported-XOAUTH replies. Proton
tuples include 530 5.5.1 authentication-required, 535 5.7.1 credential,
application-password, or browser-login rejection, 535 5.5.4 unsupported
AUTH-mode arguments, and 504 5.7.4 unrecognized-authentication-type replies.
The exact Fastmail- and Yahoo-documented 535 5.7.8 Error: authentication failed: authentication failure reply also uses this cause across MX providers.
Exact Fastmail-attributed 551 5.7.1 Not authorised to send from this header address uses the same cause only on a Fastmail-owned MX. Each rule requires the
documented basic code, exactly one enhanced status, and the complete diagnostic.
Both remain non-suppressing with manual review, no destination-circuit charge,
and no immediate retry.
Wrong basic codes, neighboring enhanced statuses, incomplete diagnostics,
token lookalikes, and mixed enhanced statuses stay generic. The primary code
keeps Google 550 5.7.40 DMARC policy under
smtp_sender_policy_rejected. Exact Microsoft
5.7.57 client-authentication and 5.7.64
connector-attribution failures use this cause. Exact Microsoft 5.7.750
unregistered sender-domain failures also use this cause. Exact Microsoft
5.7.800 banned sender-domain replies instead use smtp_sender_policy_rejected.
Exact Microsoft 5.7.124,
5.7.133, and 5.7.134 replies instead use mailbox_configuration_error
because Microsoft assigns them to an existing recipient group or mailbox that
rejects the sender class. Microsoft 5.7.12, 5.7.13, 5.7.135, and 5.7.136
extend this result to recipient organizations, public folders, and mail users
configured to reject external senders. A non-conflicting permanent rejection during HELO or MAIL FROM
receives this reason even when the reply text does not name the probe identity,
because the server has not received RCPT TO and cannot be describing the
recipient.
When a pooled session is reused or a catch-all batch moves to its next
recipient, an SMTP reply to RSET or the repeated MAIL FROM is preserved.
Only a network failure can replace that session without returning the reply.
If the error also reports incomplete MX consensus, a specific sender or
protocol cause controls validation_retry_action. Incomplete consensus remains
primary when a non-public route covers only one peer and other public MX
evidence exists.
SMTP protocol uncertainty is also explicit. smtp_tls_temporary uses
retry_later. Certificate or protocol failure (smtp_tls_inconclusive), an
inconclusive catch-all probe (smtp_catchall_probe_inconclusive), a positive
reply that does not verify the recipient (smtp_recipient_unverified), and
contradictory basic reply classes (smtp_reply_code_conflict) or enhanced
status classes (smtp_enhanced_status_conflict) use
manual_review.
Complete 530 5.7.0 Must issue a STARTTLS command first replies use portable
smtp_tls_inconclusive evidence documented by Google and Proton across SMTP
phases, including MAIL FROM, because the diagnostic identifies the validation
TLS exchange rather than the sender or recipient. They do not suppress the
recipient, open the destination circuit, or request an immediate retry. Wrong
basic codes, neighboring statuses, incomplete diagnostics, token lookalikes,
and mixed enhanced statuses stay generic.
Exact Google- and Proton-documented 421 4.7.0 TLS required for RCPT domain, closing connection replies use the same portable cause with manual_review
across SMTP phases and MX providers. They identify a destination transport
requirement, not recipient or sender state, and do not suppress the recipient,
open the destination circuit, or request an immediate same-route retry. Wrong
basic codes, neighboring statuses, incomplete diagnostics, token lookalikes,
and layered statuses remain generic temporary evidence.
Exact Microsoft-attributed 450 4.4.317 Cannot connect to remote server [Message=UntrustedRoot] replies also use smtp_tls_inconclusive with
manual_review. They identify a remote certificate-chain verification failure,
not recipient state. Do not suppress the recipient, open the destination
circuit, or request an immediate retry. Basic code 450, exact enhanced status
4.4.317, the complete diagnostic, and a supported Microsoft-attributed MX are required.
Wrong basic codes, neighboring statuses, incomplete or different diagnostics,
and Microsoft hostname lookalikes stay generic.
Exact Microsoft-attributed temporary 4.4.8 MX hosts of <domain> failed MTA-STS validation and 4.7.5 Remote certificate failed MTA-STS validation. Reason: <validityStatus> replies also use smtp_tls_inconclusive with
manual_review. They describe destination MTA-STS configuration, not recipient
state. Do not suppress the recipient, open the destination circuit, or request
an immediate retry. A coherent temporary basic reply, the exact enhanced
status, the complete documented diagnostic, and a supported Microsoft-attributed MX are
required. Conflicting primary reply classes, neighboring statuses, incomplete
diagnostics, and Microsoft hostname lookalikes stay generic.
Exact Microsoft 365-attributed temporary 4.7.321 through 4.7.325 destination
STARTTLS, certificate, DANE, and DNSSEC replies also use
smtp_tls_inconclusive with manual_review while they remain temporary
unknowns. They describe destination transport-security configuration, not
recipient state. Repair that destination configuration before revalidating. Do
not suppress the recipient, open the destination circuit, or request an
immediate retry. A coherent temporary basic reply, the exact enhanced status,
the complete documented diagnostic, and a supported Microsoft-attributed MX are required.
Incomplete diagnostics and conflicting primary reply classes stay generic.
Exact Microsoft 365-attributed permanent 5.7.321 through 5.7.325 destination
STARTTLS, certificate, DANE, and DNSSEC replies also use
smtp_tls_inconclusive with manual_review. They describe destination
transport-security configuration, not recipient state. Repair that destination
configuration before revalidating. Do not suppress the recipient, open the
destination circuit, or request an immediate retry. A coherent permanent basic
reply, the exact enhanced status, the complete diagnostic, and a
supported Microsoft-attributed MX are required.
Incomplete diagnostics, wrong primary codes, and Microsoft hostname lookalikes
stay generic.
smtp_protocol_violation means an exact SMTP reply found an invalid validation
command exchange. Complete 451 4.3.0 multi-domain transaction failures and
451 4.5.0 SMTP protocol violation replies use portable evidence documented by
Google and Proton. Exact Proton-documented 454 4.5.0 STARTTLS pipelining and
454 5.5.1 STARTTLS may not be repeated replies use the same portable cause.
Complete 502 5.5.1 unsupported-command and 503 5.5.1 command-order replies
also use portable evidence documented by Google and Proton. The 451 and 454
families remain uncharged temporary unknowns; 502 and 503 remain uncharged
policy or inconclusive unknowns. Separate destination domains before retrying
the 4.3.0 case. Exact Google 501 and 555 5.5.2 syntax replies, 501 5.5.4 invalid or empty HELO/EHLO
argument replies, 523 5.7.10 STARTTLS pipelining replies, 501 5.7.11
STARTTLS parameter replies remain uncharged policy or inconclusive unknowns.
The exact provider rule overrides a generic phase-level sender-identity
fallback. All use manual_review: inspect and repair the validator exchange
before retrying. None suppresses the recipient, opens the destination circuit, or
requests an immediate same-route retry. Wrong codes, statuses, incomplete
diagnostics, token lookalikes, and mixed enhanced statuses keep generic
behavior. The exact 454 5.5.1 tuple is the only portable exception to ordinary
basic/enhanced class agreement. Google hostname lookalikes still keep the
Google-only permanent command families generic.
Exact class-coherent RFC 3463 permanent 5.5.1 Invalid command, 5.5.2 Syntax error, 5.5.4 Invalid command arguments, and 5.5.5 Wrong protocol version
replies also use smtp_protocol_violation across SMTP phases. Exact 5.5.3 Too many recipients uses smtp_sender_quota_exceeded because it is an
envelope transaction limit. All remain uncharged policy or inconclusive
unknowns with manual_review; they do not suppress the recipient, open the
destination circuit, or request an immediate retry. RFC 2034 multiline
repetition is accepted only when all enhanced statuses agree. Temporary
primary classes, undefined 5.5.0, incomplete diagnostics, token lookalikes,
adjacent statuses, and mixed status layers keep their generic safe behavior.
smtp_destination_capability_unsupported means an exact class-coherent RFC
3463 permanent 5.3.3 System not capable of selected features reply found a
destination-system feature mismatch across SMTP phases. Review SMTP capability
negotiation before retrying. The result remains an uncharged policy or
inconclusive unknown; it does not prove recipient absence, suppress the
recipient, open the destination circuit, or request an immediate same-route
retry. RFC 2034 multiline repetition is accepted only when every enhanced
status agrees. Temporary primary classes, undefined 5.3.0, neighboring
statuses, incomplete diagnostics, token lookalikes, and mixed status layers
keep their existing safe behavior.
smtp_destination_configuration_error means an exact class-coherent RFC 3463
permanent 5.3.5 System incorrectly configured reply found destination mail
configuration that cannot accept the message. Ask the destination administrator
to repair the configuration before retrying. The result remains an uncharged
policy or inconclusive unknown with manual review. It does not prove recipient
absence, suppress the recipient, open the destination circuit, or request an
immediate same-route retry. Temporary primary classes, undefined or neighboring
statuses, incomplete diagnostics, token lookalikes, and mixed status layers
keep their existing safe behavior.
smtp_destination_routing_unavailable means an exact class-coherent RFC 3463
permanent 5.4.4 Unable to route reply found that the delivery system could not
determine the next hop. Ask the destination or intermediate administrator to
repair routing before retrying. The result remains an uncharged policy or
inconclusive unknown with manual review. It does not prove recipient absence,
suppress the recipient, open the destination circuit, or request an immediate
same-route retry. Temporary 4.4.4 remains delayed-retry evidence. Undefined
or neighboring statuses, incomplete diagnostics, token lookalikes, and mixed
status layers keep their existing safe behavior.
smtp_destination_system_not_accepting means an exact class-coherent RFC 3463
permanent 5.3.2 System not accepting network messages reply found that the
destination mailbox host permanently refuses message intake. Ask the
destination administrator to restore message acceptance before retrying. The
result remains an uncharged policy or inconclusive unknown with manual review.
It does not prove recipient absence, suppress the recipient, open the
destination circuit, or request an immediate same-route retry. Temporary
4.3.2 remains delayed-retry and destination-circuit evidence. Undefined or
neighboring statuses, incomplete diagnostics, token lookalikes, and mixed
status layers keep their existing safe behavior.
smtp_recipient_policy_rejected means an exact class-coherent RFC 3463
permanent 5.7.1 Delivery not authorized, message refused reply, or an exact
Microsoft-attributed permanent 5.7.1 Delivery not authorized reply, was
returned after RCPT TO. The reply identifies an authorization policy, but it
does not prove that the recipient does not exist. Review sender or recipient
allow-list policy, or ask the destination administrator before retrying. The
result stays an uncharged policy or inconclusive unknown with manual review. It
does not suppress the recipient, open the destination circuit, or request an
immediate same-route retry. The shorter Microsoft form requires a
supported Microsoft-attributed MX. Before RCPT TO, conflicting classes, neighboring
statuses, incomplete diagnostics, MX or token lookalikes, longer phrase
collisions, and mixed status layers keep their existing safe behavior.
smtp_mailing_list_policy_rejected means an exact class-coherent RFC 3463
permanent 5.7.2 Mailing list expansion prohibited reply was returned after
RCPT TO. The sender is not authorized to post to the intended mailing list.
Review list posting permissions or ask the list administrator before retrying.
The result remains an uncharged policy or inconclusive unknown with manual
review. It does not prove recipient absence, suppress the recipient, open the
destination circuit, or request an immediate same-route retry. Replies before
RCPT TO, temporary or conflicting classes, neighboring statuses, incomplete
diagnostics, token lookalikes, and mixed status layers keep their existing safe
behavior.
smtp_message_security_failure means an exact class-coherent permanent RFC
3463 5.7.3 through 5.7.7 diagnostic reported secure-message conversion,
unsupported security features or algorithms, cryptographic processing, or
message-integrity failure. Review message security features, keys,
certificates, and algorithms before retrying. The result remains an uncharged
policy or inconclusive unknown with manual review. It does not prove recipient
absence, suppress the recipient, open the destination circuit, or request an
immediate same-route retry. Temporary or conflicting classes, mismatched
status/text pairs, incomplete diagnostics, token lookalikes, and mixed status
layers keep their existing safe behavior. Exact provider-specific MTA-STS and
SMTP authentication replies keep their narrower TLS or sender-identity causes.
smtp_message_content_rejected means a coherent permanent RFC 3463 5.6.0
through 5.6.5 reply found a message-content, format, or media-conversion
failure. This includes the exact Google 554 5.6.0 Email message is malformed
reply. Exact Google 552 5.7.0 security-content or attachment replies and
documented 550 5.7.1 invalid, missing, duplicate, multiple, encoded-word,
Unicode, or malformed RFC 5322 header replies use the same cause only when a
Google-owned MX and the complete diagnostic match. Exact Microsoft 550 5.0.350 oversized x-dg-ref Rich Text header and nested-attachment AS345
diagnostics use the same cause. Exact Microsoft 550 5.1.20 Multiple From addresses are not allowed without Sender address replies also use this cause.
Exact Microsoft-attributed 550 5.6.11 Invalid characters replies use the same
cause when the exact status, complete diagnostic, and supported Microsoft-attributed MX match.
Microsoft assigns this failure to bare line feeds in the message, not recipient
state. Repair the message, attachment, or sending program before revalidating.
Wrong basic codes, neighboring statuses, incomplete or different diagnostics,
and Microsoft hostname lookalikes stay generic.
These rules require a supported Microsoft-attributed MX and the complete diagnostic; generic
5.0.350 stays generic. Exact Microsoft 5.7.512 Access denied, message must be RFC 5322 section 3.6.2 compliant replies use the
same cause when a coherent permanent basic reply and supported Microsoft-attributed MX match.
Microsoft assigns this diagnostic to a missing or invalid message From
address, not recipient state. Exact Microsoft HVE 550 5.6.240 prohibited
MIME-header and 550 5.6.241 missing or invalid mandatory From-header replies
use the same cause when their complete diagnostics and a supported Microsoft-attributed MX
match. These replies remain uncharged policy or inconclusive unknowns with
manual_review. Review the message before retrying. They do not
establish recipient absence, suppress the recipient, open the destination
circuit, or request an immediate retry. A coherent temporary 4.6.5 Conversion failed reply remains an uncharged temporary unknown but uses
smtp_message_content_rejected with manual_review. Repeated RFC 2034 status
lines are accepted; incomplete or layered evidence stays generic. Successful
2.6.4 and unassigned 5.6.6 replies keep their generic behavior. Google
hostname lookalikes, incomplete header diagnostics, and broad 5.7.1 policy
replies also stay generic.
smtp_message_too_large means a coherent permanent RFC 3463 5.2.3
per-mailbox message-length limit or 5.3.4 system message-size limit rejected
the validation message. Google 552 5.3.4 message, attachment-count, and
header-size replies use the same cause. It remains an uncharged policy or
inconclusive unknown with manual_review. Reduce the message, attachments, or
headers before retrying. The reply does not establish recipient absence,
suppress the recipient, open the destination circuit, or request an immediate
retry. Complete temporary 4.2.3 Message length exceeds administrative limit
and 4.3.4 Message too big for system replies remain uncharged temporary
unknowns but use smtp_message_too_large with manual_review. Repeated RFC
2034 status lines are accepted; incomplete, layered, and primary-class
conflict evidence stays generic. Neighboring 5.3.3 also remains generic.
smtp_routing_loop means a class-coherent RFC 3463 4.4.6 reply reported a
persistent transient routing or forwarding loop, an exact Google 554 5.4.6
reply reported that the message exceeded 50 hops and may be in an email loop, an exact Proton-attributed
554 5.6.0 reply reported that the message exceeded 50 hops and may be in a
mail loop, or an exact Microsoft 554 5.4.6 Hop count exceeded - possible mail loop or permanent 5xx 5.4.14 Hop count exceeded - possible mail loop ATTR34
reply reported a Microsoft routing loop. Portable 4.4.6 remains an uncharged
temporary unknown with retry_later; every enhanced status must be 4.4.6, so
compliant multiline repetition is accepted and layered statuses are rejected.
The provider-specific permanent forms remain uncharged policy or inconclusive
unknowns with manual_review. Review routing tables and user forwarding before retrying.
The reply does not establish recipient absence, suppress the recipient, open
the destination circuit, or request an immediate retry. Microsoft 5.4.6
requires primary code 554; Microsoft 5.4.14 requires a coherent permanent
basic reply. Both require the complete diagnostic and a supported Microsoft-attributed MX.
The Proton rule requires the complete diagnostic, only enhanced status
5.6.0, and a Proton-owned MX. Wrong codes, neighboring or layered statuses,
incomplete diagnostics, token lookalikes, and provider hostname lookalikes keep
generic behavior. Generic permanent 5.4.6 does not enter the portable rule.
smtp_smtputf8_unsupported means the mailbox syntax is valid but the available
MX path cannot verify an internationalized recipient. Its retry action is
manual_review; repeatedly probing the same MX is not expected to add evidence.
This cause remains primary when one equal-priority MX lacks complete SMTPUTF8
support and another peer supplies only negative recipient evidence. The result
also retains incomplete-consensus evidence, but it does not become a generic
automatic retry.
smtp_ipv6_unsupported means the Microsoft MX accepted an IPv6 connection but
the recipient domain does not accept email over IPv6. The API returns an
uncharged unknown result with validation_retry_action: "manual_review".
Use IPv4 SMTP egress before retrying; the response is not recipient rejection
evidence and does not suppress the address.
validation_retry_action is the bounded revalidation policy. Retry only when
it is retry_later; route manual_review results to a human or provider-specific
workflow instead of creating an automatic retry loop.
Role-Based Email (FREE)
Catch-All Domain (FREE)
Invalid Email (FREE)
Invalid Syntax (FREE)
Consumer Domain Typo (FREE)
suggested_email as a new address before sending.
Unknown Verification (FREE)
Response Fields
string
required
The validated email address. Internationalized domains are returned as
lowercase IDNA Punycode; the local part is preserved.
string
required
Validation result:
valid, valid_role_based, risky, invalid, or unknownSee Result Categories for detailsstring
Human-readable explanation of the validation result
string
required
Stable DNS evidence:
valid, valid_delivery_evidence, invalid_null_mx,
invalid_no_mail_route, unknown_misconfigured, unknown_temporary,
unknown_budget_blocked, or not_checked. Treat invalid_* as permanent
no-mail evidence. Treat unknown_* as inconclusive, follow
validation_retry_action to distinguish transient failures from cases that
need review, and do not send until validation policy permits it.string
required
Revalidation policy:
none, retry_later, or manual_review. Schedule an
automatic retry only for retry_later.string
required
Action to apply before sending:
send, review, unverified, or
do_not_send. Follow this field instead of treating smtp_valid=true as a
delivery guarantee.string
required
Final bounce-risk level:
low, medium, high, or blocked. This combines
raw validation with tenant suppression, recent delivery, and statistically
gated domain/provider outcome evidence.string
required
Stable machine-readable reason for the risk decision. For example,
smtp_acceptance_outcome_risk means the MX accepted the probe but prospective
outcomes show elevated hard-bounce risk. recipient_opt_out_suppression
means this tenant previously received an unsubscribe or complaint and no
provider validation was performed. dns_inconclusive means DNS was temporary,
malformed, or unavailable; retry it rather than treating the domain as
permanently invalid. mixed_mx_topology_unverifiable means equally preferred
MX routes span provider families, so no single SMTP probe represents the
domain’s real delivery path; the result is uncharged and held from sending.
smtp_acceptance_risk_unavailable means raw SMTP accepted the recipient, but
outcome-risk calibration could not complete; retry before sending.
delivery_evidence_check_unavailable means a negative provider result could
not be compared with recent tenant-observed delivery; retry before treating
the address as invalid or risky.boolean | null
required
true means the remote MX accepted the SMTP recipient probe, false means it
did not accept the current recipient transaction, and null means no mailbox
verdict was established. Use smtp_status to distinguish a permanent mailbox
rejection from temporary unavailability. This is raw evidence, not a promise
of final delivery; use the recommendation and risk fields for sending policy.string
required
Stable SMTP evidence:
accepted, accepted_delivery_evidence,
rejected_mailbox, rejected_domain, rejected_prior_hard_bounce,
mailbox_configuration_error, mailbox_temporarily_unavailable, unknown_temporary,
unknown_policy_or_inconclusive, unknown_transport,
unknown_budget_blocked, unknown_provider_blocked, or not_checked.
rejected_mailbox includes exact Yahoo, Yahoo Japan, and AOL 554 delivery error: dd This user doesn't have a <provider> account replies on a
Yahoo-owned MX when no enhanced status is present. Wrong or missing basic
codes, added enhanced statuses, and Yahoo MX lookalikes stay inconclusive.
rejected_domain records unanimous domain-scoped negative evidence from the
decisive equal-priority MX peers, including RFC 7504 556 or RFC 7505
enhanced status 5.1.10 (recipient domain has Null MX), or RFC 7504 521
from every advertised MX host. If one decisive peer returns a mailbox-specific
rejection, the unanimous negative result remains rejected_mailbox and DNS
stays valid. A single 521 is host-scoped; alternate MX hosts are tried
before the domain is rejected.
mailbox_configuration_error is standardized RFC 3463 5.2.4 mailing-list
evidence or exact provider-attributed recipient configuration evidence. Hold
the address from sending and route it to manual review because the list owner,
recipient, or email administrator must repair it.
mailbox_temporarily_unavailable includes exact Yahoo Japan 554 delivery error: dd mailbox quota is overlimit replies on a Yahoo-owned MX when no
enhanced status is present, and exact Proton 550 5.7.1 Email quota exceeded.
replies on a Proton-owned MX. Retry after the recipient frees storage; do not
permanently suppress the address. A generic 5.7.1 remains policy evidence.
Replies before RCPT TO never establish recipient validity. An ordinary
4xx greeting, HELO, or MAIL FROM reply returns unknown_temporary; a 5xx
reply at those stages returns unknown_policy_or_inconclusive, even if its
text resembles a mailbox rejection. A non-conflicting permanent HELO or MAIL
FROM rejection uses smtp_sender_identity_rejected because it rejects the
validation probe identity before the server receives a recipient.
Pooled reuse and multi-recipient probing preserve every structured RSET or
repeated MAIL FROM reply. Only a network failure can replace the session
without returning that evidence. A specific nested sender or protocol cause
controls the retry action instead of the generic incomplete-consensus wrapper.
A non-public peer remains incomplete consensus when public MX evidence exists.
When an MX advertises STARTTLS, validation negotiates verified TLS and sends a
fresh EHLO before MAIL FROM and RCPT TO. A temporary STARTTLS failure is
unknown_temporary; certificate or protocol verification failure is
unknown_policy_or_inconclusive. Validation never disables certificate
checks or silently downgrades after a failed TLS handshake.
A full/disabled mailbox is unavailable—not nonexistent—and should be retried
later. Raw accepted evidence can still be catch-all or outcome-downgraded;
always follow the final recommendation and bounce-risk fields. MX routes are
tried in ascending DNS preference. A backup MX is used only after a transport
failure; an SMTP policy, reputation, mailbox, or recipient response from a
reachable preferred server is never bypassed by rotating to another MX.
For up to four unique equally preferred MX peers, every reachable peer must
return the same decisive recipient verdict. Conflicting verdicts return
pre_send_bounce_reason=mx_recipient_verdict_conflict; a partially
unreachable tier returns mx_consensus_incomplete. Both are uncharged,
high-risk, and do_not_send rather than valid or invalid.string
Detected provider for the authoritative preferred MX tier.
Mixed MX Routing
means equally preferred routes span known provider families or combine a
known provider with an unclassified route. That topology returns
smtp_status=unknown_provider_blocked rather than treating one arbitrarily
ordered MX response as mailbox proof.string
Bounded provenance for the decision, such as
validation_engine,
recent_delivery_evidence, or a suppression/outcome evidence path. Use this
field for audit and explanation; continue to automate from
send_recommendation, pre_send_bounce_risk, and validation_retry_action.boolean
true when the preferred MX path is a recognized enterprise security
gateway that may conceal mailbox existence. This explains an inconclusive
mailbox result; it does not mean the address was verified.boolean
required
true only when DNS is invalid and the supplied domain is a unique one-edit
misspelling of a bounded major consumer mailbox provider. It never changes
the original result, recommendation, or charge.string | null
required
A possible corrected consumer address, or
null. Treat this as user-facing
input repair and validate the suggestion separately before sending.boolean
required
true if the email is a generic business inbox (info@, support@, etc.)boolean
required
true when the domain is a known temporary/disposable mailbox provider.
Disposable addresses return risky, are not called invalid, and consume no
validation credit.boolean
true if the domain is a free email provider (Gmail, Yahoo, Outlook, etc.)boolean | null
required
true means random-recipient probes established catch-all behavior, false
means they established non-catch-all behavior, and null means catch-all
behavior was not measured.number | string | null
Confidence is either a numeric probability from
0 through 1, a legacy
level of high, medium, or low, or null when catch-all confidence was
not measured. The field may also be omitted.string
required
B2B outbound value:
high (worth using), low (role-based), none (invalid/risky), or unknownSee B2B Quality Scoring for detailsinteger
required
Number of credits charged:
0 (free) or 1 (charged)Only valid personal emails with b2b_outbound_quality: "high" are chargedstring
required
Explanation of why credits were or weren’t charged
string
Category of role-based email (e.g., “information”, “support”, “sales”)Only present if
is_role_based is truestring
Layer where validation stopped:
syntax, dns, smtp, or catchallUseful for debugging failuresstring
Raw SMTP server response (when applicable)Useful for understanding SMTP-level issues
Error Responses
400 Bad Request
- Missing
emailfield - Empty email string
- Malformed JSON
401 Unauthorized
- Missing
X-API-Keyheader - Invalid or revoked API key
- Incorrect API key format
429 Too Many Requests
retry_after seconds before making more requests
502 Upstream Validation Failure
Retry-After header or retry_after body value before retrying.
The failed validation does not consume a credit.
500 Internal Server Error
Performance
- Cached DNS: ~50ms average
- Uncached DNS: ~500ms average
- Full SMTP validation: ~2s average
Best Practices
Error Handling
Always handle all possible result types:Rate Limiting
For high-volume validation, use the bulk endpoint:Next Steps
Bulk Validation
Validate up to 100 emails at once
Result Categories
Understand all validation results