Developer Resources & Documentation

Everything you need to integrate PureMail into your application

API Documentation

RESTful API for real-time email verification

Authentication

All API requests require authentication using your API key. Include it in the Authorization header:

Authorization: Bearer YOUR_API_KEY

Get your API key from your dashboard after signing up.

Single Email Verification
POST/api/v1/verify/single

Verify a single email address in real-time.

Request Body

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

Example Request

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

Response

{
  "email": "user@example.com",
  "valid": true,
  "syntax_valid": true,
  "dns_valid": true,
  "smtp_valid": true,
  "disposable": false,
  "role_based": false,
  "free_provider": false,
  "score": 95,
  "reason": "Valid email address"
}

Response Fields

validOverall validity (boolean)
syntax_validEmail syntax is correct
dns_validDomain has valid MX records
smtp_validMailbox exists (SMTP check)
disposableTemporary/disposable email
role_basedRole-based (info@, support@)
free_providerFree email provider
scoreQuality score (0-100)
Bulk Email Verification
POST/api/v1/verify/bulk

Verify multiple emails in batch. Returns a job ID for tracking progress.

Request Body

{
  "emails": [
    "user1@example.com",
    "user2@example.com",
    "user3@example.com"
  ]
}

Response

{
  "jobId": "job_abc123xyz",
  "status": "processing",
  "total": 3,
  "message": "Verification job started"
}
Check Job Status
GET/api/v1/verify/status/:jobId

Check the progress of a bulk verification job.

Example Request

curl -X GET https://puremail.com/api/v1/verify/status/job_abc123xyz \
  -H "Authorization: Bearer YOUR_API_KEY"

Response

{
  "jobId": "job_abc123xyz",
  "status": "completed",
  "progress": 100,
  "total": 3,
  "processed": 3,
  "valid": 2,
  "invalid": 1
}
Rate Limits

API requests are rate-limited to ensure fair usage and system stability.

  • 100 requests per minute per API key
  • Rate limit headers included in every response
  • 429 status code returned when limit exceeded

Integration Guides

Step-by-step guides for popular platforms and frameworks

JavaScript / Node.js
const verifyEmail = async (email) => {
  const response = await fetch(
    'https://puremail.com/api/v1/verify/single',
    {
      method: 'POST',
      headers: {
        'Authorization': 'Bearer YOUR_API_KEY',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({ email })
    }
  );

  return await response.json();
};

// Usage
const result = await verifyEmail('user@example.com');
if (result.valid && !result.disposable) {
  // Email is good to use
}
Python
import requests

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

# Usage
result = verify_email('user@example.com')
if result['valid'] and not result['disposable']:
    # Email is good to use
    pass
PHP
<?php
function verifyEmail($email) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,
        'https://puremail.com/api/v1/verify/single');
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS,
        json_encode(['email' => $email]));
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Authorization: Bearer YOUR_API_KEY',
        'Content-Type: application/json'
    ]);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

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

    return json_decode($result, true);
}

$result = verifyEmail('user@example.com');
?>
Ruby
require 'net/http'
require 'json'

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

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

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

result = verify_email('user@example.com')
Best Practices
  • Verify on signup: Check emails in real-time during user registration to prevent bad data from entering your system.
  • Handle errors gracefully: Always implement proper error handling and fallback mechanisms.
  • Cache results: Store verification results to avoid re-checking the same email multiple times.
  • Respect rate limits: Implement exponential backoff when you receive 429 responses.
  • Monitor your usage: Keep track of your credit consumption through the dashboard.

Frequently Asked Questions

How accurate is PureMail's verification?

PureMail achieves 99%+ accuracy through multi-layered verification including syntax validation, DNS/MX record checks, SMTP verification, and disposable email detection. Our algorithms are continuously updated to maintain the highest accuracy standards.

What happens if I run out of credits?

When your credit balance reaches zero, API requests will return a 402 error. You can purchase additional credits anytime from your dashboard. Credits never expire, so you can buy in bulk and use them at your own pace.

How fast is the API response time?

Single email verification typically completes in under 5 seconds. We've optimized the API for speed by running checks in parallel and using smart caching. Bulk verifications are processed asynchronously to handle large lists efficiently.

Can I verify emails without using the API?

Yes! Our web dashboard offers single email verification and bulk CSV upload capabilities. You can verify emails through our user-friendly interface without writing any code.

Is my data secure?

Absolutely. All API requests use HTTPS encryption. We're GDPR-compliant and never store email addresses longer than necessary. We don't sell or share your data with third parties. Your verification history is private and only accessible to you.

What's the difference between valid and invalid emails?

A valid email has correct syntax, a domain with valid MX records, and an existing mailbox. An invalid email fails one or more checks (syntax errors, non-existent domain, or mailbox doesn't exist). We also flag risky emails like disposable addresses and role-based emails.

Can I get a refund on unused credits?

Credits are non-refundable, but they never expire. You can use them whenever you need them, whether that's tomorrow or next year. We recommend starting with a smaller package to test our service before committing to larger purchases.

Do you offer volume discounts?

Yes! Our pricing automatically includes volume discounts. The more credits you purchase, the lower the per-credit cost. For enterprise needs (5M+ credits), contact our sales team for custom pricing and dedicated support.

What email providers do you support?

PureMail supports all email providers worldwide including Gmail, Outlook, Yahoo, corporate domains, and international providers. Our verification engine works with any valid email address regardless of provider.

How do I get support if I have issues?

We offer email support for all users. Premium customers (50K+ credits) get priority support with faster response times. You can reach us through the support section below or from your dashboard.

Need Help?

Our team is here to help you succeed

Email Support

Get help from our support team. We typically respond within 24 hours.

support@puremail.dev
Documentation

Browse our comprehensive API documentation and guides above.

View API Docs

Ready to Get Started?

Sign up now and get 150 free credits to test our email verification service.