MailLandDocs

Single Email Validation

Validate individual email addresses in real-time with syntax, domain, and SMTP checks

Validate an email address in real-time before sending. MailLand runs a 5-layer validation pipeline: syntax check, typo detection, disposable domain detection, role account detection, and SMTP verification.

Authentication

Include your API key in the X-API-Key header:

X-API-Key: ml_pv_Ab3Kx9mN2pQ7rT4wL8yD...

The credential must be a Validation product credential with the Api channel enabled.

Validate an Email

POST https://api.mail.land/v1/validation/email
Validation request
{
  "email": "[email protected]",
  "verify_smtp": true
}
FieldTypeDefaultDescription
emailstring-Email address to validate (required)
verify_smtpbooltruePerform SMTP mailbox verification
Validate an email
curl -X POST https://api.mail.land/v1/validation/email \
  -H "X-API-Key: ml_pv_Ab3Kx9mN2pQ7rT4wL8yD..." \
  -H "Content-Type: application/json" \
  -d '{ "email": "[email protected]", "verify_smtp": true }'

Response

Validation response
{
  "email": "[email protected]",
  "result": "Deliverable",
  "score": 95,
  "syntax": {
    "is_valid": true,
    "suggestion": null,
    "domain": "example.com",
    "local_part": "user",
    "has_typo": false,
    "typo_type": null,
    "typo_confidence": null
  },
  "disposable": {
    "is_disposable": false
  },
  "role": {
    "is_role_account": false
  },
  "mx": {
    "has_mx": true,
    "records": ["mx1.example.com", "mx2.example.com"],
    "accepts_mail": true
  },
  "smtp": {
    "can_connect": true,
    "is_deliverable": true,
    "is_catch_all": false,
    "has_full_inbox": false,
    "is_disabled": false,
    "reachability": "safe",
    "error_type": null,
    "error_message": null
  },
  "provider": {
    "name": "Unknown",
    "type": "unknown"
  },
  "cached": false,
  "verified_at": "2026-02-17T12:34:56Z"
}

Result Types

ResultScore RangeDescription
Deliverable80–95Valid address, SMTP confirmed deliverable
Risky45–70Might be deliverable but has risk factors (catch-all, role account, full inbox)
Unknown30–50Cannot determine (SMTP timeout, connection failure)
Undeliverable0–25Not deliverable (disposable, no MX, disabled mailbox, invalid syntax scores 0)
Invalid5 (fixed)High-confidence domain typo (≥90% confidence), see syntax.suggestion

Score Adjustments

The base score is adjusted by risk factors:

FactorAdjustment
Role account (info@, admin@, etc.)-10
Catch-all server-5

Validation Pipeline

MailLand validates each email through 5 layers:

Syntax validation

Checks RFC 5322 compliance: valid format, local part (max 64 chars), domain (max 255 chars), total length (max 320 chars). Also detects common domain typos.

Disposable domain check

Checks the domain against a database of known temporary/disposable email providers. Disposable addresses are immediately marked Undeliverable.

Role account check

Detects role-based addresses like info@, admin@, support@, postmaster@. Role accounts are not marked as undeliverable but reduce the confidence score.

MX record validation

Looks up MX records for the domain. If no MX records and no A record exist, the email is marked Undeliverable.

SMTP verification

Connects to the mail server and checks if the mailbox exists. This step is skipped if verify_smtp is false.

Typo Detection

MailLand uses 3-layer typo detection for common domain mistakes:

LayerMethodExample
Exact matchDatabase of known typosgmial.com → gmail.com
TLD correctionTop-level domain variantsgmail.co → gmail.com
Levenshtein distanceFuzzy matching (max distance: 2)gmal.com → gmail.com

When a typo is detected, the syntax.suggestion field contains the corrected address:

Typo detected
{
  "email": "[email protected]",
  "result": "Invalid",
  "score": 5,
  "syntax": {
    "is_valid": true,
    "suggestion": "[email protected]",
    "domain": "gmial.com",
    "local_part": "user",
    "has_typo": true,
    "typo_type": "levenshtein",
    "typo_confidence": 95
  }
}

High-confidence typos (90%+ confidence) are short-circuited early in the pipeline: no SMTP check is performed and no credit is consumed.

Provider Detection

MailLand identifies the email provider from domain names and MX records:

ProviderTypeDetection
GmailconsumerDomain match
Outlook / Hotmail / LiveconsumerDomain match
YahooconsumerDomain match
iCloudconsumerDomain match
ProtonMailconsumerDomain match
Google WorkspacebusinessMX records (aspmx)
Microsoft 365businessMX records (outlook.com)
ZohobusinessMX records
MimecastbusinessMX records
ProofpointbusinessMX records

SMTP Check Details

The smtp object contains detailed SMTP verification results:

FieldTypeDescription
can_connectboolSuccessfully connected to the SMTP server
is_deliverableboolMailbox appears to exist
is_catch_allboolServer accepts all addresses (reduces confidence)
has_full_inboxboolMailbox is full (result: Risky)
is_disabledboolMailbox is disabled (result: Undeliverable)
reachabilitystringVerdict: safe, risky, invalid, or unknown
error_typestringError type if SMTP check failed
error_messagestringDetailed error message

SMTP Error Types

Error TypeDescription
TimeoutSMTP connection timed out
ConnectionFailedCould not connect to server
BlacklistedVerification IP is blocked by the server
Socks5Proxy error
AsyncSmtpErrorSMTP protocol error
CancelledRequest was cancelled
UnexpectedErrorUnexpected error

Credits

Each validation consumes one credit from your monthly quota. Certain validations are free (no credit consumed):

ConditionFree
Disposable email domainsYes
High-confidence domain typos (90%+)Yes
SMTP errors (timeout, connection failure, blacklisted)Yes
SMTP cannot connect with unknown resultYes
Cached resultsNo (credit was consumed on first check)

Check your credit balance:

GET https://api.mail.land/v1/validation/credits
Credit balance
{
  "monthly_quota": 1000,
  "used": 450,
  "remaining": 550,
  "resets_at": "2026-03-01T00:00:00Z"
}

Credits reset automatically on the first day of each month (UTC).

Caching

Validation results are cached in Redis to avoid redundant checks:

Result TypeCache TTL
Deliverable48 hours
Risky24 hours
Undeliverable24 hours
Unknown6 hours

Cached responses have cached: true in the response. The original credit was consumed when the result was first computed.

Error Responses

StatusCodeDescription
400INVALID_REQUESTMissing or invalid request body
400INVALID_EMAIL_FORMATEmail address is required
402INSUFFICIENT_CREDITSMonthly validation quota exceeded

Next Steps

On this page