Sign Up Free

Email Verification API — Real-Time Email Validation API

Integrate email verification directly into your application with our RESTful API. Sub-500ms response times, 99.9% uptime, and 99.5% accuracy. Verify emails in real-time at signup, in bulk via batch endpoints, or through webhooks.

Request

curl -X POST https://ev.ecomtechbd.com/v1/verify/single \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"email": "test@example.com"}'

Response

{
  "email": "test@example.com",
  "valid": true,
  "deliverable": true,
  "risk_level": "low",
  "confidence": 95,
  "provider": "example.com",
  "details": {
    "syntax_valid": true,
    "domain_exists": true,
    "mx_record": true,
    "smtp_valid": true
  },
  "reason": "verified",
  "cached": false
}

API Features

Sub-500ms Response Time

Our API responds in under 500 milliseconds on average for single email verification requests. Real-time validation at user signup without noticeable delay.

99.9% Uptime SLA

Enterprise-grade infrastructure with redundant servers across multiple regions. Our uptime SLA guarantees 99.9% availability with automatic failover.

RESTful JSON API

Clean, intuitive RESTful endpoints with JSON request and response bodies. Standard HTTP status codes and consistent error handling across all endpoints.

Batch Processing

Verify up to 1,000 emails per batch request. Asynchronous processing with webhook callbacks or polling for large batch jobs.

Rate Limiting

Generous rate limits scaled to your plan. Starter: 10 req/sec, Professional: 50 req/sec, Business: 200 req/sec, Enterprise: custom.

Comprehensive Checks

Every API call performs syntax validation, DNS lookup, MX record check, SMTP verification, disposable email detection, role-based detection, and catch-all detection.

Quick Start Guide

1

Get Your API Key

Sign up for a free account at ev.ecomtechbd.com/pricing. Your API key is available immediately. No credit card required.

2

Authenticate Requests

Include your API key as a Bearer token: Authorization: Bearer YOUR_API_KEY

3

Make Your First Request

POST to /v1/verify/single with the email in JSON body. Get the full verification result.

4

Handle the Response

Check status for: valid, invalid, risky, or unknown.

API Endpoints

POST /v1/verify/single POST /v1/verify — Singlemdash; Single Email Verification

Verify a single email address in real-time. Average response time is under 500ms.

Request:

POST https://ev.ecomtechbd.com/v1/verify/single
Content-Type: application/json
Authorization: Bearer YOUR_API_KEY

{
  "email": "user@example.com"
}

Response (200 OK):

{
  "email": "user@example.com",
  "valid": true,
  "deliverable": true,
  "risk_level": "low",
  "confidence": 95,
  "provider": "example.com",
  "details": {
    "syntax_valid": true,
    "domain_exists": true,
    "mx_record": true,
    "smtp_valid": true
  },
  "reason": "verified",
  "cached": false
}

POST /v1/verify/bulk POST /v1/verify/bulk — Batch Verification (up to 1,000)mdash; Bulk Verification

Submit a batch of up to 1,000 email addresses for asynchronous verification. Returns a job_id to check status.

Request:

POST https://ev.ecomtechbd.com/v1/verify/bulk
Content-Type: application/json
Authorization: Bearer YOUR_API_KEY

{
  "emails": [
    "user1@example.com",
    "user2@example.com",
    "user3@example.com"
  ],
  "webhook_url": "https://yoursite.com/webhook/verification"
}

Response (202 Accepted):

{
  "job_id": "batch_abc123def456",
  "total_emails": 3,
  "estimated_time_seconds": 15,
  "status": "processing",
  "webhook_url": "https://yoursite.com/webhook/verification"
}

GET /v1/verify/bulk/status/{jobId} — Check Batch Status

Poll for the status and results of a batch verification job.

Request:

GET https://ev.ecomtechbd.com/v1/verify/bulk/status/batch_abc123def456
Authorization: Bearer YOUR_API_KEY

Response (200 OK):

{
  "job_id": "batch_abc123def456",
  "status": "completed",
  "total_emails": 3,
  "processed": 3,
  "results": {
    "valid": 2,
    "invalid": 1,
    "risky": 0,
    "unknown": 0
  },
  "download_url": "https://ev.ecomtechbd.com/v1/verify/bulk/download/batch_abc123def456",
  "expires_at": "2026-03-16T00:00:00Z"
}

GET /api/credits/status GET /v1/account/credits — Check Remaining Creditsmdash; Check Remaining Credits (Auth Required)

Check your current credit balance and usage statistics.

Request:

GET https://ev.ecomtechbd.com/api/credits/status
Authorization: Bearer YOUR_API_KEY

Response (200 OK):

{
  "credits_remaining": 9850,
  "credits_used_today": 150,
  "credits_used_this_month": 4200,
  "plan": "professional",
  "monthly_limit": 50000,
  "rate_limit_per_second": 50
}

Code Examples

Copy-paste examples in your preferred language to get started quickly.

Node.js

const axios = require('axios');

const API_KEY = 'YOUR_API_KEY';

async function verifyEmail(email) {
  const response = await axios.post(
    'https://ev.ecomtechbd.com/v1/verify/single',
    { email },
    {
      headers: {
        'Authorization': `Bearer ${API_KEY}`,
        'Content-Type': 'application/json'
      }
    }
  );
  return response.data;
}

// Usage
verifyEmail('test@example.com')
  .then(result => console.log(result.valid))
  .catch(err => console.error(err.message));

Python

import requests

API_KEY = 'YOUR_API_KEY'

def verify_email(email):
    response = requests.post(
        'https://ev.ecomtechbd.com/v1/verify/single',
        json={'email': email},
        headers={
            'Authorization': f'Bearer {API_KEY}',
            'Content-Type': 'application/json'
        }
    )
    return response.json()

# Usage
result = verify_email('test@example.com')
print(result['valid'])

PHP

$apiKey = 'YOUR_API_KEY';

function verifyEmail($email) {
    global $apiKey;

    $ch = curl_init('https://ev.ecomtechbd.com/v1/verify/single');
    curl_setopt_array($ch, [
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => json_encode(['email' => $email]),
        CURLOPT_HTTPHEADER => [
            'Authorization: Bearer ' . $apiKey,
            'Content-Type: application/json'
        ],
        CURLOPT_RETURNTRANSFER => true
    ]);

    $response = curl_exec($ch);
    curl_close($ch);

    return json_decode($response, true);
}

// Usage
$result = verifyEmail('test@example.com');
echo $result['valid'];

Ruby

require 'net/http'
require 'json'
require 'uri'

API_KEY = 'YOUR_API_KEY'

def verify_email(email)
  uri = URI('https://ev.ecomtechbd.com/v1/verify/single')
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true

  request = Net::HTTP::Post.new(uri)
  request['Authorization'] = "Bearer #{API_KEY}"
  request['Content-Type'] = 'application/json'
  request.body = { email: email }.to_json

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

# Usage
result = verify_email('test@example.com')
puts result['valid']

Java

import java.net.http.*;
import java.net.URI;

public class EmailVerifier {
    private static final String API_KEY = "YOUR_API_KEY";
    private static final String BASE_URL = "https://ev.ecomtechbd.com/v1";

    public static String verifyEmail(String email) throws Exception {
        HttpClient client = HttpClient.newHttpClient();
        String json = String.format("{\"email\":\"%s\"}", email);

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(BASE_URL + "/verify"))
            .header("Authorization", "Bearer " + API_KEY)
            .header("Content-Type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(json))
            .build();

        HttpResponse<String> response = client.send(
            request, HttpResponse.BodyHandlers.ofString()
        );
        return response.body();
    }

    public static void main(String[] args) throws Exception {
        String result = verifyEmail("test@example.com");
        System.out.println(result);
    }
}

Response Fields Explained

Field Type Description
emailstringThe email address that was verified
validbooleanWhether the email is valid and deliverable
deliverablebooleanWhether the email can receive messages
risk_levelstringRisk assessment: low, medium, or high
confidenceintegerConfidence score from 0 to 100
providerstringThe email domain/provider
details.syntax_validbooleanWhether the email format is valid per RFC 5322
details.domain_existsbooleanWhether the email domain has valid DNS records
details.mx_recordbooleanWhether MX records exist for the domain
details.smtp_validbooleanWhether the SMTP server confirmed the mailbox exists
reasonstringVerification reason: verified, mailbox_not_found, disposable, role_based, etc.
cachedbooleanWhether the result was served from cache

Error Codes

HTTP Code Error Code Description
400invalid_emailThe email parameter is missing or not a valid email format
401unauthorizedAPI key is missing, invalid, or expired
402insufficient_creditsYour account has no remaining verification credits
429rate_limit_exceededYou have exceeded the rate limit for your plan
500server_errorAn internal server error occurred. Retry the request
503service_unavailableThe service is temporarily unavailable for maintenance

Rate Limiting

Plan Requests/Second Batch Size Limit Daily Limit
Free Trial2 req/sec10 emails100 emails
Starter LTD ($10)10 req/sec500 emails5,000 emails
Professional LTD ($20)50 req/secUnlimited1,500/day for life
Business LTD ($30)200 req/secUnlimited2,500/day for life
Enterprise (custom)CustomCustomUnlimited

Rate limit headers are included in every response: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.

Webhooks for Batch Processing

How Webhooks Work

When you submit a batch verification request, include a webhook_url in the request body. Once the batch is complete, we send a POST request to your webhook URL with the full results.

This eliminates the need for polling and allows your application to process results asynchronously.

Webhook Payload

{
  "event": "batch_completed",
  "job_id": "batch_abc123def456",
  "total_emails": 500,
  "results": {
    "valid": 420,
    "invalid": 55,
    "risky": 20,
    "unknown": 5
  },
  "download_url": "https://ev.ecomtechbd.com/v1/verify/bulk/download/batch_abc123def456",
  "timestamp": "2026-03-15T12:00:00Z"
}

Webhook requests include an X-Webhook-Signature header for verification. Retries are attempted 3 times with exponential backoff.

Official SDKs

Install our official SDK in your preferred language to get started in minutes.

Node.js

npm install @ecomtech/email-verifier

Python

pip install ecomtech-email-verifier

PHP

composer require ecomtech/email-verifier

Ruby

gem install ecomtech-email-verifier

Java

<dependency>
  <groupId>com.ecomtech</groupId>
  <artifactId>email-verifier</artifactId>
  <version>1.0.0</version>
</dependency>

Go

go get github.com/ecomtech/email-verifier-go

Email Verification API FAQ

Authentication uses API keys passed in the Authorization header as a Bearer token. You can generate and manage API keys from your dashboard. Each key can be scoped with specific permissions and rate limits for security.

Our API provides endpoints for single email verification (GET /v1/verify), batch verification (POST /v1/verify/batch), verification status check (GET /v1/verify/status/:id), domain check (GET /v1/domain/:domain), and account usage (GET /v1/account/usage).

Rate limits depend on your plan: Free (10 requests/minute), Starter (100 requests/second), Professional (500 requests/second), Enterprise (custom limits up to 5,000 requests/second). Batch endpoints allow up to 50,000 emails per request.

Yes, we provide official SDKs for JavaScript/Node.js, Python, PHP, Ruby, Java, Go, and C#. All SDKs are open source on GitHub, include TypeScript definitions where applicable, and handle authentication, retries, and rate limiting automatically.

Yes, webhooks notify your server when batch verification jobs complete. Configure webhook URLs from your dashboard or via the API. Webhooks include HMAC signature verification for security and automatic retry with exponential backoff for failed deliveries.

Submit a batch of up to 50,000 emails via the batch endpoint. The API returns a job ID immediately. Processing happens asynchronously and you can poll the status endpoint or configure a webhook to be notified when results are ready. Results are available for download for 30 days.

Get Your API Key — Start Free

100 free verification credits. No credit card required. Full API access from day one.