Email Validation API

Real-time email validation with MX lookup, disposable domain detection, and role account identification. Clean your email lists, reduce bounces, and improve deliverability.

Read the Docs
Format Validation

Format Validation

RFC-compliant email format checking catches malformed addresses before they hit your system.

MX Record Lookup

MX Record Lookup

Verifies the domain can receive mail by checking MX DNS records in real-time.

Disposable Detection

Disposable Detection

Identifies temporary email providers like Mailinator, Guerrilla Mail, and 10 Minute Mail.

Role Account Check

Role Account Check

Detects generic role accounts (admin@, info@, support@) vs real personal addresses.

Confidence Scoring

Confidence Scoring

Get a 0-100 confidence score for every email, combining all validation signals.

Fast & Reliable

Fast & Reliable

Sub-100ms responses on most queries. Built with FastAPI and async Python.

Try It Now

Test an email address instantly — no API key required. Rate limited to 3 requests per minute.

Rate limit reached. Please wait a moment before trying again.

    

Quick Integration

Get started in minutes with these code examples for your language.

import requests

# Your API key from https://emailvalidation.ewabeachwebcreations.com
API_KEY = "ev_your_api_key_here"

resp = requests.post(
    "https://emailvalidation.ewabeachwebcreations.com/api/validate",
    headers={
        "X-API-Key": API_KEY,
        "Content-Type": "application/json"
    },
    json={"email": "user@gmail.com"}
)

data = resp.json()
print(f"Valid: {data['is_valid']}")
print(f"Score: {data['score']}/100")
print(f"MX Record: {data['mx_record']}")
print(f"Disposable: {data['is_disposable']}")


# Bulk validation with CSV
import csv, io

emails = ["user@gmail.com", "bad@", "test@mailinator.com"]
csv_file = io.StringIO()
writer = csv.writer(csv_file)
for e in emails:
    writer.writerow([e])

resp = requests.post(
    "https://emailvalidation.ewabeachwebcreations.com/api/validate/bulk",
    headers={"X-API-Key": API_KEY},
    files={"file": ("emails.csv", csv_file.getvalue(), "text/csv")}
)

result = resp.json()
print(f"Total: {result['total']}, Valid: {result['valid_count']}, Invalid: {result['invalid_count']}")
// Your API key from https://emailvalidation.ewabeachwebcreations.com
const API_KEY = "ev_your_api_key_here";

// Single validation
async function validateEmail(email) {
  const resp = await fetch(
    "https://emailvalidation.ewabeachwebcreations.com/api/validate",
    {
      method: "POST",
      headers: {
        "X-API-Key": API_KEY,
        "Content-Type": "application/json",
      },
      body: JSON.stringify({ email }),
    }
  );
  const data = await resp.json();
  console.log(`Valid: ${data.is_valid}`);
  console.log(`Score: ${data.score}/100`);
  console.log(`MX: ${data.mx_record}`);
  console.log(`Disposable: ${data.is_disposable}`);
  return data;
}

// Bulk validation
async function validateBulk(emails) {
  const blob = new Blob(
    [emails.map(e => e + "\n").join("")],
    { type: "text/csv" }
  );
  const formData = new FormData();
  formData.append("file", blob, "emails.csv");

  const resp = await fetch(
    "https://emailvalidation.ewabeachwebcreations.com/api/validate/bulk",
    {
      method: "POST",
      headers: { "X-API-Key": API_KEY },
      body: formData,
    }
  );
  return resp.json();
}

// Usage
validateEmail("user@gmail.com").then(console.log);
# Single email validation
curl -X POST https://emailvalidation.ewabeachwebcreations.com/api/validate \
  -H "X-API-Key: ev_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{"email": "user@gmail.com"}'

# Bulk validation from CSV file
curl -X POST https://emailvalidation.ewabeachwebcreations.com/api/validate/bulk \
  -H "X-API-Key: ev_your_api_key_here" \
  -F "file=@emails.csv"

# Create a free API key
curl -X POST https://emailvalidation.ewabeachwebcreations.com/api/keys/create \
  -H "Content-Type: application/json" \
  -d '{"name": "My Key", "plan": "free"}'

# Free demo (no API key needed, rate limited)
curl "https://emailvalidation.ewabeachwebcreations.com/api/validate-demo?email=user@gmail.com"

# Check usage dashboard
curl "https://emailvalidation.ewabeachwebcreations.com/dashboard?api_key=ev_your_api_key_here"
<?php
// Your API key from https://emailvalidation.ewabeachwebcreations.com
$apiKey = "ev_your_api_key_here";

// Single validation
function validateEmail($email, $apiKey) {
    $ch = curl_init("https://emailvalidation.ewabeachwebcreations.com/api/validate");
    curl_setopt_array($ch, [
        CURLOPT_POST => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [
            "X-API-Key: $apiKey",
            "Content-Type: application/json"
        ],
        CURLOPT_POSTFIELDS => json_encode(["email" => $email])
    ]);
    $result = curl_exec($ch);
    curl_close($ch);
    return json_decode($result, true);
}

$data = validateEmail("user@gmail.com", $apiKey);
echo "Valid: " . ($data['is_valid'] ? 'true' : 'false') . "\n";
echo "Score: " . $data['score'] . "/100\n";
echo "Disposable: " . ($data['is_disposable'] ? 'true' : 'false') . "\n";
?>
require 'net/http'
require 'json'
require 'uri'

# Your API key
API_KEY = "ev_your_api_key_here"

# Single validation
def validate_email(email)
  uri = URI("https://emailvalidation.ewabeachwebcreations.com/api/validate")
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true

  request = Net::HTTP::Post.new(uri)
  request["X-API-Key"] = API_KEY
  request["Content-Type"] = "application/json"
  request.body = { email: email }.to_json

  response = http.request(request)
  JSON.parse(response.body)
end

data = validate_email("user@gmail.com")
puts "Valid: #{data['is_valid']}"
puts "Score: #{data['score']}/100"
puts "MX Record: #{data['mx_record']}"

# Bulk validation (requires csv gem)
require 'csv'

def validate_bulk(emails, api_key)
  csv_string = CSV.generate { |csv| emails.each { |e| csv << [e] } }
  
  uri = URI("https://emailvalidation.ewabeachwebcreations.com/api/validate/bulk")
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true

  boundary = "BOUNDARY#{Random.rand(100000)}"
  body = []
  body << "--#{boundary}"
  body << "Content-Disposition: form-data; name="file"; filename="emails.csv""
  body << "Content-Type: text/csv"
  body << ""
  body << csv_string
  body << "--#{boundary}--"

  request = Net::HTTP::Post.new(uri)
  request["X-API-Key"] = api_key
  request["Content-Type"] = "multipart/form-data; boundary=#{boundary}"
  request.body = body.join("\r\n")
  
  response = http.request(request)
  JSON.parse(response.body)
end
package main

import (
    "bytes"
    "encoding/csv"
    "encoding/json"
    "fmt"
    "io"
    "mime/multipart"
    "net/http"
    "strings"
)

const apiKey = "ev_your_api_key_here"

type ValidationResult struct {
    Email         string `json:"email"`
    IsValid       bool   `json:"is_valid"`
    Reason        string `json:"reason"`
    MxRecord      string `json:"mx_record"`
    IsDisposable  bool   `json:"is_disposable"`
    IsRoleAccount bool   `json:"is_role_account"`
    Score         int    `json:"score"`
}

type BulkResult struct {
    Total           int                 `json:"total"`
    ValidCount      int                 `json:"valid_count"`
    InvalidCount    int                 `json:"invalid_count"`
    ProcessingTimeMs int                `json:"processing_time_ms"`
    Results         []ValidationResult  `json:"results"`
}

// Single validation
func validateEmail(email string) (*ValidationResult, error) {
    body := map[string]string{"email": email}
    jsonBody, _ := json.Marshal(body)

    req, _ := http.NewRequest("POST",
        "https://emailvalidation.ewabeachwebcreations.com/api/validate",
        bytes.NewBuffer(jsonBody))
    req.Header.Set("X-API-Key", apiKey)
    req.Header.Set("Content-Type", "application/json")

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()

    var result ValidationResult
    json.NewDecoder(resp.Body).Decode(&result)
    return &result, nil
}

// Bulk validation
func validateBulk(emails []string) (*BulkResult, error) {
    var buf bytes.Buffer
    writer := multipart.NewWriter(&buf)

    csvWriter := csv.NewWriter(io.Writer(nil))
    for _, e := range emails {
        csvWriter.Write([]string{e})
    }

    part, _ := writer.CreateFormFile("file", "emails.csv")
    for _, e := range emails {
        part.Write([]byte(e + "\n"))
    }
    writer.Close()

    req, _ := http.NewRequest("POST",
        "https://emailvalidation.ewabeachwebcreations.com/api/validate/bulk",
        &buf)
    req.Header.Set("X-API-Key", apiKey)
    req.Header.Set("Content-Type", writer.FormDataContentType())

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()

    var result BulkResult
    json.NewDecoder(resp.Body).Decode(&result)
    return &result, nil
}

func main() {
    result, _ := validateEmail("user@gmail.com")
    fmt.Printf("Valid: %v, Score: %d\n", result.IsValid, result.Score)
}

Choose Your Plan

Free

$0/mo
  • 100 validations/month
  • Full validation suite
  • Generate API key instantly
  • No credit card required

Starter

$29/mo
  • 5,000 validations/month
  • Full validation suite
  • API key access
  • Email support

Enterprise

$299/mo
  • Unlimited validations
  • Bulk validation
  • SLA guarantee
  • Dedicated support

Pay As You Go

Pay per use
  • Buy validation credits
  • No monthly subscription
  • 0.5¢ per validation
  • Credits never expire

Quick Start

Get a free API key and validate your first email:

# Create a sandbox API key
curl -X POST https://emailvalidation.ewabeachwebcreations.com/api/keys/create \
-H "Content-Type: application/json" \
-d '{"name": "My Test Key", "plan": "starter"}'

# Validate an email
curl -X POST https://emailvalidation.ewabeachwebcreations.com/api/validate \
-H "X-API-Key: *** \
-H "Content-Type: application/json" \
-d '{"email": "user@gmail.com"}'