Test addresses
Addresses on sandbox.email-validation.org return a fixed answer for every reason, cost nothing and never contact a mail server. Use them to test your integration end to end: the address <reason>@sandbox.email-validation.org returns that reason, with its status and action.
Every test address
| Address | Status | Reason | Action |
|---|---|---|---|
accepted@sandbox.email-validation.org | deliverable | accepted | send |
alias@sandbox.email-validation.org | deliverable | alias | send |
normalized@sandbox.email-validation.org | deliverable | normalized | send |
low_engagement@sandbox.email-validation.org | deliverable | low_engagement | send_with_caution |
high_engagement@sandbox.email-validation.org | deliverable | high_engagement | send |
trusted_catch_all@sandbox.email-validation.org | deliverable | trusted_catch_all | send |
ai_agent@sandbox.email-validation.org | deliverable | ai_agent | send_with_caution |
no_mailbox@sandbox.email-validation.org | undeliverable | no_mailbox | remove |
no_inbound_mail@sandbox.email-validation.org | undeliverable | no_inbound_mail | remove |
invalid_syntax@sandbox.email-validation.org | undeliverable | invalid_syntax | remove |
likely_typo@sandbox.email-validation.org | undeliverable | likely_typo | remove |
no_dns@sandbox.email-validation.org | undeliverable | no_dns | remove |
mailbox_full@sandbox.email-validation.org | undeliverable | mailbox_full | remove |
unroutable@sandbox.email-validation.org | undeliverable | unroutable | remove |
catch_all@sandbox.email-validation.org | risky | catch_all | send_with_caution |
role_account@sandbox.email-validation.org | risky | role_account | send_with_caution |
role_catch_all@sandbox.email-validation.org | risky | role_catch_all | send_with_caution |
disposable@sandbox.email-validation.org | risky | disposable | remove |
toxic@sandbox.email-validation.org | risky | toxic | remove |
forwarding_domain@sandbox.email-validation.org | risky | forwarding_domain | send_with_caution |
suppressed@sandbox.email-validation.org | risky | suppressed | remove |
possible_trap@sandbox.email-validation.org | risky | possible_trap | remove |
spamtrap@sandbox.email-validation.org | risky | spamtrap | remove |
complainer@sandbox.email-validation.org | risky | complainer | remove |
server_unavailable@sandbox.email-validation.org | unknown | server_unavailable | retry_later |
temporary_error@sandbox.email-validation.org | unknown | temporary_error | retry_later |
greylisted@sandbox.email-validation.org | unknown | greylisted | retry_later |
anti_spam_block@sandbox.email-validation.org | unknown | anti_spam_block | retry_later |
timeout@sandbox.email-validation.org | unknown | timeout | retry_later |
internal_error@sandbox.email-validation.org | unknown | internal_error | retry_later |
What they return
The status, reason and action match the address. Other fields hold fixed placeholder data: the domain is sandbox.email-validation.org, flags such as disposable and catch_all_domain agree with the reason, and credits_used is always 0. For example, likely_typo@sandbox.email-validation.org:
{
"email": "likely_typo@sandbox.email-validation.org",
"status": "undeliverable",
"reason": "likely_typo",
"action": "remove",
"account": "likely_typo",
"domain": "sandbox.email-validation.org",
"did_you_mean": "accepted@sandbox.email-validation.org",
"free_email": false,
"role_account": null,
"disposable": null,
"catch_all_domain": null,
"mx_found": true,
"mx_record": "mx.sandbox.email-validation.org",
"smtp_provider": "other",
"domain_age_days": 3650,
"processed_at": "2026-11-02T09:30:00.000Z",
"credits_used": 0,
"request_id": "req_7Hq2LmX9cV4bN8tR1zK6wD"
}Where they work
POST /v1/validateandGET /v1/validate- Bulk jobs: test addresses in a list are answered for free like malformed addresses
- The MCP tools
validate_emailandcreate_bulk_job
Test addresses still need an API key that works, so they exercise your authentication handling too: a revoked key, a key without the validate scope, a key used from an origin outside its allowed origins, or the key of a suspended account is refused as for any other address (a revocation can take up to 10 seconds to reach test-address answers). To test your handling of errors such as 402 or 429, mock those answers in your own tests: the OpenAPI document has an example body for every error code.