Limited-time August offer: Save 80% on email verification credits. View pricing
Developer Documentation

Email Verification API Reference

Verify a single email address in real time, understand every response field, and check your remaining credits — all with simple GET requests.

Base URL: https://api.validemail.net Auth: API key via token parameter 1 credit per verification

Authentication

Every request is authenticated with your personal API key, passed as the token query parameter. You can find your API key in your ValidEmail dashboard after signing in.

Keep your key secret. Call the API from your backend and never embed the key in client-side code, public repositories, or mobile apps.

Verify a single email

GET https://api.validemail.net/?email={email}&token={your_api_key}

Runs the full verification pipeline — syntax, domain and MX checks, disposable and role detection, and a live mailbox check — and responds in real time. Each verification consumes one credit.

ParameterRequiredDescription
emailYesThe email address to verify.
tokenYesYour API key.
Example — deliverable email
JSON response
{
  "IsValid": true,
  "Score": 95,
  "Email": "validemailnet@gmail.com",
  "State": "Deliverable",
  "Reason": "ACCEPTED EMAIL",
  "Domain": "gmail.com",
  "Free": true,
  "Role": false,
  "Disposable": false,
  "AcceptAll": false,
  "Tag": false,
  "MXRecord": "gmail-smtp-in.l.google.com.",
  "RetryAfterSeconds": null,
  "EmailAdditionalInfo": []
}
Example — interim result (verification still in progress)
JSON response
{
  "IsValid": false,
  "Score": 0,
  "Email": "someone@greylisting-domain.com",
  "State": "Unknown",
  "Reason": "GREYLISTED",
  "Domain": "greylisting-domain.com",
  "Free": false,
  "Role": false,
  "Disposable": false,
  "AcceptAll": false,
  "Tag": false,
  "MXRecord": "mx1.greylisting-domain.com",
  "RetryAfterSeconds": 60,
  "EmailAdditionalInfo": []
}
Handling interim results (State = "Unknown")

Some mail servers greylist first-time senders or respond slowly. Instead of failing, the API returns an interim 200 OK result with State = "Unknown", a Reason of PENDING or GREYLISTED, and a RetryAfterSeconds hint while the verification finishes in the background.

  • Wait RetryAfterSeconds seconds, then repeat the same request to get the final verdict.
  • Definitive results are cached for about 10 minutes, so the retry is answered instantly once the verification completes.
  • Treat Unknown as "not yet decided" — never as a delivery failure.

Response fields

FieldTypeDescription
IsValidbooleantrue when the address passed verification and is safe to send to.
Scoreinteger (0–100)Deliverability confidence score. We recommend sending only to 80+.
EmailstringThe queried address, normalized to lower case.
StatestringDeliverable, Not Deliverable, or Unknown (interim — retry later).
ReasonstringWhy the state was assigned — see the reason table below.
DomainstringDomain part of the address (e.g. gmail.com).
Freebooleantrue for free providers such as Gmail, Yahoo, or Outlook.com.
Rolebooleantrue for role inboxes such as info@, support@, admin@.
Disposablebooleantrue for temporary / throw-away providers.
AcceptAllbooleantrue when the domain accepts any recipient — treat positives with caution.
Tagbooleantrue when the address contains a plus-tag (e.g. user+tag@domain.com).
MXRecordstringMail exchange host that answers for the domain.
RetryAfterSecondsinteger or nullPresent only on Unknown interim results: how long to wait before re-querying. null on definitive results.
EmailAdditionalInfoarrayOptional list of { Key, Value } pairs with extra diagnostic details.
States and reasons
StateTypical reasonsMeaning
Deliverable ACCEPTED EMAIL The mailbox exists and accepts mail.
Not Deliverable REJECTED EMAIL, INVALID DOMAIN The mailbox or its domain rejected the address. Do not send.
Unknown PENDING, GREYLISTED, VERIFICATION TIMEOUT No final verdict yet. When RetryAfterSeconds is set, retry the same request after that delay.

Check your credits balance

GET https://api.validemail.net/balance?token={your_api_key}

Returns the number of verification credits you have left. This call is free — it never consumes a credit — and is ideal for dashboards or pre-flight checks before large sends.

JSON response
{
  "balance": 12450
}

Your balance is also always visible in your ValidEmail dashboard.

HTTP status codes

HTTP Status Meaning What to do
200 OK The request was processed. Check State — a result with State = "Unknown" and a RetryAfterSeconds value is an interim answer, not a final verdict. Use the result. If State is Unknown, retry the same request after RetryAfterSeconds.
400 Bad Request Missing email/token parameter, no credits remaining, or a transient processing failure. Check the response text. If you are out of credits, top up your balance before retrying.
401 Unauthorized The API key is invalid or unknown. Verify the token value against the API key shown in your dashboard.
403 Forbidden The account attached to this API key is inactive. Contact info@validemail.net to reactivate the account.
429 Too Many Requests You exceeded your per-second request limit. The response body includes the configured limit. Slow down and retry with backoff, or contact us to raise your rate limit.

Best practices

  • ✅ Send only to addresses with IsValid = true and Score ≥ 80.
  • 🔁 When State = "Unknown", retry after RetryAfterSeconds instead of discarding the address.
  • ⚠️ Exclude Disposable addresses to protect your sender reputation.
  • 🚫 Avoid Role inboxes for marketing campaigns.
  • 🔍 Treat AcceptAll domains with caution — the server accepts every recipient, so a positive result is weaker evidence.
  • 💳 Monitor /balance and top up before large campaigns; requests fail with 400 when you run out of credits.
  • 📦 Verifying a whole list? Use bulk verification from your dashboard.
Ready to integrate?

Step-by-step tutorials with complete, copy-paste code.