BillionVerify LogoBillionVerify

Verification Reasons

Complete reference for all verification reason codes returned by BillionVerify API — what each reason means and how to act on it.

Every verification result includes a reason field that explains why the email received its status. Use this reference to build precise filtering logic, diagnose unexpected results, and tune your sending strategy.

How reasons work

The reason field appears in all verification responses alongside the status field:

{
  "email": "user@example.com",
  "status": "valid",
  "reason": "smtp_deliverable"
}

Reasons are stable string identifiers — you can use them directly in filtering rules or downstream conditional logic.

How each mailbox type is verified

The reason you get depends on how the recipient's provider can be checked:

  • Business domains (Google Workspace, Microsoft 365, self-hosted mail servers) get a live SMTP RCPT check against the exact mailbox. A random address on the same domain is probed first, so catch-all domains, Microsoft 365 internal relay, and security gateways in accept-all mode are reported as catchall rather than valid.
  • Gmail gets a live SMTP RCPT check.
  • Yahoo, AOL, Outlook.com, Hotmail, Live, and MSN block SMTP verification, so they are checked through provider-specific account lookups. These return yahoo_api_* or microsoft_api_* reasons and confirm whether the account exists.
  • GMX, web.de, Mail.ru, Yandex, and other regional providers are verified with provider-specific pacing. Rate limits, greylisting, and refused checks lead to more unknown results.
  • Apple iCloud, Proton, and Tuta allow no reliable check, so their addresses always return unknown with smtp_unverifiable.

unknown results are never billed, whatever the reason.

Valid

Emails with status: "valid" are confirmed deliverable.

ReasonDescription
smtp_deliverableSMTP RCPT returned 250 OK — mailbox confirmed deliverable. Also produced when Microsoft 365 DBEB mode confirms delivery.
yahoo_api_verifiedYahoo or AOL account lookup confirmed the account exists.
microsoft_api_verifiedMicrosoft consumer account lookup (Outlook.com, Hotmail, Live, MSN) confirmed the account exists.
unitedinternet_api_verifiedGMX.com / mail.com account lookup confirmed the account exists.

Invalid

Emails with status: "invalid" should be removed from your list — delivery is not possible.

ReasonDescription
invalid_syntaxEmail address fails syntax parsing — malformed local part, domain, or missing @. Never billed.
no_mx_recordsDomain has no MX records (NXDOMAIN or empty MX lookup result).
null_mxDomain publishes a null MX record (RFC 7505) — it explicitly accepts no mail.
spf_reject_allDomain has no MX records and an SPF record with -all — the domain explicitly rejects all inbound mail.
mailbox_not_foundSMTP 550/5xx confirmed the mailbox does not exist on the remote server.
mailbox_disabledMailbox exists but has been disabled or deactivated.
host_not_foundThe MX hostname did not respond — host unreachable or non-existent.
yahoo_api_not_deliverableYahoo or AOL account lookup confirmed the account does not exist.
microsoft_api_not_deliverableMicrosoft consumer account lookup confirmed the account does not exist.
unitedinternet_api_not_deliverableGMX.com / mail.com account lookup confirmed the account does not exist.

Unknown

Emails with status: "unknown" could not be conclusively verified. Unknown results are never billed. Some are temporary (retryable); others represent structural limitations.

ReasonRetryableDescription
smtp_unverifiableNoThe provider allows no reliable SMTP verification (Apple iCloud, Proton, Tuta).
smtp_blockedNoThe remote SMTP server explicitly blocked or blacklisted the connection.
smtp_eof_blockedYesThe MX closed the connection before sending a banner — typically a per-IP rate limiter or fail2ban rule.
smtp_timeoutYesSMTP operation timed out (context deadline or cancellation).
smtp_connection_failedYesGeneric SMTP connection failure — no more specific class matched.
smtp_rate_limitedYesRemote SMTP server returned a rate-limit response (421, 450, 451, or messaging limit exceeded).
smtp_greylistedYesGeneric greylisting response detected — retry after a delay.
smtp_550_unclassifiedYesThe server returned a 550 that does not clearly mean "user unknown", so it is not treated as invalid.
smtp_egress_unavailableYesNo verification egress was available for this provider at the time of the check.
smtp_egress_unselectableNoNo verification egress is allowed to reach this provider.
mimecast_greylistYesMimecast-specific greylist / 451 temporary failure.
proofpoint_ad_lookupYesProofpoint AD async lookup in progress (421 4.1.1 temp-fail during recipient validation).
proofpoint_egress_listedNoProofpoint-protected domain where our checks are currently not answered.
policy_temp_failYesGeneric 4xx temporary failure from remote policy enforcement.
google_rate_limitYesGoogle MX returned a rate-limit or temporary rejection response.
google_dmarc_misalignmentNoDomain DMARC configuration is misaligned — Google rejects based on DMARC policy.
m365_ip_rep_blockYesMicrosoft 365 rejected the connection due to IP reputation (4.7.650 / 4.7.651 codes).
tonline_egress_not_whitelistedNoT-Online only accepts checks from allowlisted senders, so the mailbox cannot be verified.
mailbox_fullNoMailbox exists but is over quota (SMTP 452 or full inbox response).
dns_timeoutYesDNS or MX lookup timed out — transient resolver issue.
dns_lookup_errorYesDNS lookup failed with a non-NXDOMAIN error (SERVFAIL, UDP timeout, or resolver error).
dns_resolution_failedYesDNS resolution failed for a transient reason.
yahoo_api_errorYesYahoo / AOL account lookup failed — general error.
yahoo_api_unavailableYesYahoo / AOL account lookup was unavailable (batch-level health failure).
yahoo_api_eofYesYahoo / AOL account lookup returned early EOF — transient TCP/TLS drop.
yahoo_api_rate_limitedYesYahoo / AOL account lookup was rate-limited.
microsoft_api_errorYesMicrosoft consumer account lookup failed or was throttled.
microsoft_api_unavailableYesMicrosoft consumer account lookup was unavailable.
unitedinternet_api_errorYesGMX.com / mail.com account lookup failed.
unitedinternet_api_unavailableNoGMX.com / mail.com account lookup was unavailable for this run.
capacity_deferredYesThe provider's verification capacity was full, so the check was deferred.
provider_capacity_exhaustedNoThe provider's capacity stayed full for the whole retry window (about two hours), so the job finished without a conclusion for these addresses.
carrier_blockedNoJapanese carrier domain (docomo.ne.jp, au.com, etc.) — SMTP is blocked by carrier policy.
internal_verifier_errorYesUnclassified internal verifier error — transient failure.
rate_limitedYesEmail was rate-limited during batch processing (alias for smtp_rate_limited in file jobs).
bucket_default_skip_smtp_unknownNoAccount-level verification mode is set to skip SMTP — result is based on domain checks only.
mx_only_verification_semaphore_timeoutYesSMTP concurrency semaphore timed out — MX-only fallback confirmed valid MX records but the mailbox could not be individually verified.

Catch-all

Emails with status: "catchall" belong to domains that accept mail for all addresses. Individual deliverability cannot be confirmed.

ReasonDescription
catch_all_domainDomain confirmed as catch-all — random RCPT probe accepted by the mail server.
catch_all_deliverableCatch-all domain, and the specific address also returned 250 OK on RCPT.
catch_all_inferredCatch-all status inferred from cached evidence (indirect, not a live probe).
m365_internal_relayMicrosoft 365 domain configured as internal relay — all RCPT accepted but not individually verified.
gateway_accept_allSecurity gateway (Mimecast, Proofpoint, etc.) is in accept-all mode.
forwarding_aliasEmail forwarding alias service (SimpleLogin, Firefox Relay, Duck.com).
yahoo_isp_accept_allISP domain hosted on Yahoo mail infrastructure (for example att.net, sbcglobal.net, verizon.net) — the provider accepts all recipients, so no mailbox-level check is possible.
region_consumer_accept_allRegional consumer domain known to accept all inbound mail (older results).
bucket_default_skip_smtp_catchallAccount-level verification mode is set to skip SMTP catch-all detection.

Role

Emails with status: "role" belong to shared inboxes (e.g. info@, support@, noreply@). These addresses are typically deliverable but have low engagement.

Role addresses inherit the reason from their underlying SMTP check — no dedicated reason codes exist for this status. For example, a role address that passes SMTP will show reason: "smtp_deliverable".

Disposable

Emails with status: "disposable" belong to temporary email services. Accepting these usually leads to low-quality signups.

ReasonDescription
disposable_domainDomain is listed as a known disposable / temporary email provider.

Risky (older results only)

New verifications no longer return status: "risky". Its only source, the Spamhaus Domain Blocklist check, was removed on 2026-09-11. You may still see risky on results created before that date.

On those older results, risky meant the address was most likely deliverable but the recipient domain was listed by Spamhaus for spam, phishing, malware, or botnet C&C activity. The risk_reasons array explains why:

risk_reasons valueDescription
spamhaus_dbl_spamThe domain is listed as a spam source.
spamhaus_dbl_phishThe domain is listed as a phishing domain.
spamhaus_dbl_malwareThe domain is listed as a malware distribution domain.
spamhaus_dbl_botnet_ccThe domain is listed as botnet command-and-control infrastructure.

Using reasons in filtering

You can combine status and reason for precise list segmentation. For example, to keep unknown emails that are only unknown due to temporary issues:

function isRetryableUnknown(result) {
  const retryableReasons = new Set([
    'capacity_deferred', 'context_cancelled', 'dns_lookup_error',
    'dns_resolution_failed', 'dns_timeout', 'google_rate_limit',
    'internal_verifier_error', 'm365_ip_rep_block', 'microsoft_api_error',
    'microsoft_api_unavailable', 'mimecast_greylist',
    'mx_only_verification_semaphore_timeout', 'policy_temp_fail',
    'proofpoint_ad_lookup', 'rate_limited', 'smtp_550_unclassified',
    'smtp_connection_failed', 'smtp_egress_unavailable', 'smtp_eof_blocked',
    'smtp_greylisted', 'smtp_rate_check_failed', 'smtp_rate_limited',
    'smtp_rate_wait_failed', 'smtp_timeout', 'unitedinternet_api_error',
    'yahoo_api_eof', 'yahoo_api_error', 'yahoo_api_rate_limited',
    'yahoo_api_unavailable',
  ]);
  return result.status === 'unknown' && retryableReasons.has(result.reason);
}

On this page