MisarMisar Docs
MisarMailMisarBlogMisarReachMisarPostMisarDevMisarCoderMisarSEOMisar PlatformMisar SSO
API Reference

Email Validation

Validate email addresses for deliverability before sending

Validate one or more email addresses to check syntax, MX records, and SMTP reachability, and to flag disposable, role-account, catch-all, and free-provider addresses before adding contacts or sending campaigns.

Authentication

Email validation requires an API key with the validate or send scope. Base URL: https://api.misar.io/mail.

Endpoints

MethodPathDescription
POST/api/v1/validateValidate one email or a batch
GET/api/v1/validateGet remaining validation credit balance

Validate emails

POST/mail/v1/validate

Validate a single email or a batch of up to 500 addresses. Provide either email for a single address or emails for a batch — the body is one or the other, not both.

Request body

emailstringbody

A single email address to validate (single-mode body).

emailsstring[]body

A batch of 1–500 email addresses (batch-mode body).

optionsobjectbody

Optional. { "skip_smtp": boolean } — when true, skips the live SMTP probe (faster, syntax/MX only).

Single response fields

successboolean

true when the request succeeded.

dataobject

Result for the single email: email, is_valid (boolean), score (0–100), checks (syntax, mx, smtp), flags (disposable, role_account, catch_all, free_provider), domain, provider, mx_records, and verified_at.

creditsobject

used (credits charged) and balance_after (remaining balance).

Batch response fields

summaryobject

Counts and timing: total, valid, invalid, risky, unknown, duration_ms.

resultsArray<object>

One entry per address, each with the same shape as the single-mode data.

Request — single
curl -X POST https://api.misar.io/mail/v1/validate \
  -H "Authorization: Bearer msk_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "email": "test@example.com" }'
200 — Single
{
  "success": true,
  "data": {
    "email":    "test@example.com",
    "is_valid": true,
    "score":    92,
    "checks":   { "syntax": true, "mx": true, "smtp": true },
    "flags":    { "disposable": false, "role_account": false, "catch_all": false, "free_provider": true },
    "domain":   "example.com",
    "provider": "google",
    "mx_records": ["aspmx.l.google.com"],
    "verified_at": "2026-04-01T10:00:00Z"
  },
  "credits": { "used": 1, "balance_after": 42 }
}
Request — batch
curl -X POST https://api.misar.io/mail/v1/validate \
  -H "Authorization: Bearer msk_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "emails": [
      "alice@example.com",
      "bob@tempmail.net",
      "noreply@company.com"
    ],
    "options": { "skip_smtp": false }
  }'
200 — Batch
{
  "success": true,
  "summary": {
    "total":       3,
    "valid":       1,
    "invalid":     1,
    "risky":       1,
    "unknown":     0,
    "duration_ms": 812
  },
  "results": [
    {
      "email":    "alice@example.com",
      "is_valid": true,
      "score":    95,
      "checks":   { "syntax": true, "mx": true, "smtp": true },
      "flags":    { "disposable": false, "role_account": false, "catch_all": false, "free_provider": false },
      "domain":   "example.com",
      "provider": null,
      "mx_records": ["mx.example.com"],
      "verified_at": "2026-04-01T10:00:00Z"
    },
    {
      "email":    "bob@tempmail.net",
      "is_valid": false,
      "score":    10,
      "checks":   { "syntax": true, "mx": true, "smtp": false },
      "flags":    { "disposable": true, "role_account": false, "catch_all": false, "free_provider": false },
      "domain":   "tempmail.net",
      "provider": null,
      "mx_records": ["mx.tempmail.net"],
      "verified_at": "2026-04-01T10:00:00Z"
    },
    {
      "email":    "noreply@company.com",
      "is_valid": false,
      "score":    40,
      "checks":   { "syntax": true, "mx": true, "smtp": true },
      "flags":    { "disposable": false, "role_account": true, "catch_all": false, "free_provider": false },
      "domain":   "company.com",
      "provider": null,
      "mx_records": ["mx.company.com"],
      "verified_at": "2026-04-01T10:00:00Z"
    }
  ],
  "credits": { "used": 1, "balance_after": 41 }
}

Get validation credit balance

GET/mail/v1/validate

Return the account's current wallet credit balance — useful for checking how many validations remain before a batch run.

Response fields

successboolean

true when the request succeeded.

creditsobject

{ "balance": number } — remaining wallet credits.

Request
curl "https://api.misar.io/mail/v1/validate" \
  -H "Authorization: Bearer msk_YOUR_API_KEY"
200 — OK
{
  "success": true,
  "credits": { "balance": 42 }
}

Checks and flags reference

FieldTypeMeaning
checks.syntaxbooleanValid RFC 5322 email format
checks.mxbooleanDomain has valid MX DNS records
checks.smtpboolean | nullSMTP server accepts the address (null when skipped/inconclusive)
flags.disposablebooleanKnown disposable/temporary email domain
flags.role_accountbooleanGeneric role address: info@, noreply@, admin@, etc.
flags.catch_allboolean | nullDomain accepts all addresses (null when undetermined)
flags.free_providerbooleanGmail, Yahoo, Outlook, etc.

is_valid is the overall deliverability verdict; score (0–100) reflects confidence.

Status codes

  • 200 — Validation completed (single or batch), or balance returned.
  • 400 — Validation failed (bad email/body) or invalid JSON.
  • 402 — Insufficient wallet credits; the error message reports the required amount and current balance.
  • 403 — API key lacks the validate or send scope.
  • 415Content-Type is not application/json.

Validation is metered against wallet credits: one credit covers a batch of up to 100 addresses (BILLING_UNITS.email_verification). When the balance is too low the request returns 402 and nothing is validated. Top up at mail.misar.io/pricing.