Statuses and categories
Every result carries three things you can act on:
statusMessage explains the reason in one plain sentence you can show to a person or store in a CRM.
{
"email": "[email protected]",
"domain": "gmail.com",
"status": "mailbox_found",
"statusMessage": "The mailbox exists and accepts mail.",
"category": "deliverable",
"failType": "none",
"mxLocation": "US",
"siteLocation": "US",
"siteLanguage": "EN",
"suggestion": null
}Categories
| Category | Meaning | What to do |
|---|---|---|
deliverable | The mail server confirmed the mailbox exists. | Send. |
risky | The address exists or might, but delivery can't be promised: the domain accepts every address, it's a shared role inbox, a throwaway service, or the server wouldn't confirm. | Send carefully. The status tells you which case it is. |
undeliverable | The address is malformed, the domain can't receive mail, or the mailbox doesn't exist. | Suppress. |
pending | The check is still running (status processing). | Collect the result later. Never suppress based on it. See slow mail servers. |
Most integrations branch on category and log status and statusMessage. Treat any category or reason code you don't recognise as risky, so a new value never breaks your code.
Reason codes
The Meaning column is the exact statusMessage for each code. Retry later is Yes when failType is temporary.
Code (status) | Category | Retry later | Meaning (statusMessage) | What to do |
|---|---|---|---|---|
mailbox_found | deliverable | No | The mailbox exists and accepts mail. | Send. |
accept_all | risky | No | The domain accepts mail for any address, so this mailbox can't be confirmed. | Send carefully. Keep accept-all contacts in a separate, smaller send and watch bounces. |
role_address | risky | No | This is a shared role address, like info@ or sales@, not a person. | Send if a shared inbox is fine for you. For personal outreach, find a named contact instead. |
disposable | risky | No | This is a throwaway inbox that will likely stop working soon. | Skip it. For sign-ups, ask for a permanent address. |
mailbox_unconfirmed | risky | No | The mailbox seems to exist, but the server would not confirm it accepts mail. | Send carefully and watch bounces. |
blocked_by_server | risky | Yes | The mail server blocked the check. | Retry later. If it stays blocked, send carefully. |
no_response | risky | Yes | The mail server would not confirm this address. | Retry later. If it doesn't change, send carefully. |
mailbox_not_found | undeliverable | No | This mailbox does not exist. | Remove it. |
mailbox_disabled | undeliverable | No | This mailbox exists but is disabled or suspended. | Remove it. |
rejected | undeliverable | No | The mail server refused mail for this address. | Remove it. |
server_error | undeliverable | Yes | The mail server returned an error. | Don't send now. Retry later; the server may recover. |
no_mail_server | undeliverable | No | This domain can't receive email. | Remove it. Check the domain for a typo. |
invalid_format | undeliverable | No | This isn't a valid email address. | Remove it, or fix the address at the source. |
possible_typo | undeliverable | No | Possible typo. Did you mean {suggestion}? | Fix the typo. Verify the address in suggestion before you use it. |
processing | pending | No | Still checking this mailbox. Ask again in about a minute; you will not be charged again. | Ask again later. Don't suppress based on it. |
For possible_typo, {suggestion} is replaced with the corrected address, for example Possible typo. Did you mean [email protected]?, and the same address is in the suggestion field.
In bulk result files, rows that were not checked yet show the reason code processing.
Fail type
| Value | Meaning |
|---|---|
permanent | The failure won't fix itself, for example a missing mailbox or a malformed address. |
temporary | The result may change. A later re-check can give a different answer. Used by blocked_by_server, no_response and server_error. |
none | Not a failure, or nothing a re-check would change. |
Other fields
| Field | Description |
|---|---|
email | The address that was checked. |
domain | The domain part of the address. |
mxLocation | Country code where the domain's mail servers appear to be. null when unknown. |
siteLocation | Country code where the domain's website appears to be. null when unknown. |
siteLanguage | Language of the domain's website. null when unknown. |
suggestion | A corrected address when the domain looks misspelled (possible_typo), otherwise null. Verify the suggestion separately before using it. |
A rule of thumb
Store four things per address: category, status, statusMessage and when you checked. Then: