# Email Status Values

> Docs index for AI agents: [https://mailvalid.io/llms.txt](https://mailvalid.io/llms.txt). Every docs page is also available as Markdown: add `.md` to its URL.

MailValid uses industry-standard status codes, the same ones ZeroBounce and NeverBounce use. The `status` field holds the verification result. The `status_reason` field gives the specific machine-readable reason.

## Status codes

| Status | is_valid | Description | Action |
|---|---|---|---|
| `valid` | true | SMTP confirmed the mailbox exists. Safe to send (under 2% bounce rate). | Safe to send |
| `invalid` | false | Address will bounce: bad syntax, no domain, or mailbox not found | Do not send |
| `catch_all` | false | Domain accepts all addresses. Cannot confirm the individual mailbox | Send with caution |
| `unknown` | false | Could not determine validity (provider blocked SMTP, timeout). Free: 0 credits charged | Retry later or use the bounce webhook |
| `do_not_mail` | false | Address may work but is risky: disposable, role-based (info@, support@), or spam complaint | Do not send marketing |

## Sub-status reasons

The `status_reason` field gives the specific reason behind the status:

| status_reason | Status | Meaning |
|---|---|---|
| `mailbox_confirmed` | `valid` | SMTP server confirmed the mailbox exists (250 response) |
| `historical_delivery_confirmed` | `valid` | Email was previously delivered successfully (from bounce webhook data) |
| `mailbox_not_found` | `invalid` | SMTP server rejected the recipient (550 response) |
| `failed_syntax_check` | `invalid` | Email address format is invalid |
| `no_dns_entries` | `invalid` | Domain does not exist (no DNS records) |
| `no_mx_records` | `invalid` | Domain exists but has no MX records configured |
| `historical_hard_bounce` | `invalid` | Email previously hard-bounced (from bounce webhook data) |
| `accept_all` | `catch_all` | Domain accepts all addresses; individual mailbox cannot be confirmed |
| `failed_smtp_connection` | `unknown` | Provider blocks SMTP verification (Microsoft, Apple) |
| `antispam_system` | `unknown` | Anti-spam system blocked the verification attempt |
| `greylisted` | `unknown` | Server uses greylisting and temporarily rejected the check |
| `mail_server_temporary_error` | `unknown` | Mail server returned a temporary error |
| `disposable` | `do_not_mail` | Disposable/temporary email domain (e.g. mailinator.com) |
| `role_based` | `do_not_mail` | Role-based address (info@, support@, admin@) |
| `historical_complaint` | `do_not_mail` | Recipient previously filed a spam complaint (from bounce webhook data) |

## Confidence score

Every result includes a `confidence_score` from 0 to 100 that shows how confident MailValid is in the result:

| Range | Meaning |
|---|---|
| 90–100 | Very high confidence: SMTP confirmed, historical hard bounce, or syntax/domain failure |
| 70–89 | High confidence: historical delivery data, trusted provider response |
| 40–69 | Medium confidence: catch-all domain, DNS-only verification |
| 0–39 | Low confidence: provider blocked verification, timeout |

## Billing by status

`valid`, `invalid`, `catch_all` and `do_not_mail` cost 1 credit each, whether fresh or cached. `unknown` results are free.
