API Documentation

Base URL: https://checkmail1.com/api

Authentication

All API requests require authentication via an API key passed in the Authorization header as a Bearer token. Get your API key from the dashboard.

http
Authorization: Bearer YOUR_API_KEY
Free tier: Sign up and get 100 free verifications — no credit card required. API keys are available immediately after registration.

Rate Limits

PlanRate LimitBurst
Free60 requests / minute10 concurrent
Starter ($9)120 requests / minute20 concurrent
Pro ($29)300 requests / minute50 concurrent
Business ($79)600 requests / minute100 concurrent
Enterprise ($199)UnlimitedUnlimited

When rate limited, the API returns HTTP 429 Too Many Requests. Implement exponential backoff in your client.

Single Email Verification

GET/api/verify

Verify a single email address. Returns existence status, confidence score, and detailed checks.

Query Parameters

ParameterTypeDescription
email requiredstringThe email address to verify

Example Request

curl
curl "https://checkmail1.com/api/[email protected]" \
  -H "Authorization: Bearer YOUR_API_KEY"

Example Response

200 OK
{
  "email": "[email protected]",
  "status": "valid",
  "valid": true,
  "score": 95,
  "confidence": "high",
  "checks": {
    "format": true,
    "dns": true,
    "disposable": false
  }
}

Batch Email Verification

POST/api/verify/batch

Verify up to 1,000 emails in a single request. Each email costs 1 credit. Results are returned when all verifications complete.

Request Body

FieldTypeDescription
emails requiredstring[]Array of email addresses (max 1,000)
curl
curl -X POST "https://checkmail1.com/api/verify/batch" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"emails": ["[email protected]", "[email protected]", "[email protected]"]}'
200 OK
{
  "results": [
    { "email": "[email protected]", "status": "valid", "valid": true, "score": 95 },
    { "email": "[email protected]", "status": "valid", "valid": true, "score": 90 },
    { "email": "[email protected]", "status": "invalid", "valid": false, "score": 0 }
  ],
  "count": 3,
  "credits_remaining": 97
}

Domain Intelligence

GET/api/domain

Get detailed email infrastructure information for any domain — MX records, SPF, DKIM, DMARC, and catch-all status.

Query Parameters

ParameterTypeDescription
domain requiredstringThe domain to analyze (e.g. gmail.com)
curl
curl "https://checkmail1.com/api/domain?domain=gmail.com" \
  -H "Authorization: Bearer YOUR_API_KEY"
200 OK
{
  "domain": "gmail.com",
  "mx": ["alt1.gmail-smtp-in.l.google.com", "gmail-smtp-in.l.google.com"],
  "spf": { "exists": true, "record": "v=spf1 redirect=_spf.google.com" },
  "dmarc": { "exists": true, "policy": "reject" },
  "catch_all": false,
  "disposable": false,
  "provider": "Google Workspace"
}

Code Examples

curl
Node.js
Python
PHP
Go
# Single verification
curl "https://checkmail1.com/api/[email protected]" \
  -H "Authorization: Bearer YOUR_API_KEY"

# Batch verification
curl -X POST "https://checkmail1.com/api/verify/batch" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"emails":["[email protected]","[email protected]"]}'
// npm install node-fetch (or use built-in fetch in Node 18+)

const API_KEY = 'YOUR_API_KEY';
const BASE = 'https://checkmail1.com/api';

// Single verification
async function verifyEmail(email) {
  const res = await fetch(`${BASE}/verify?email=${encodeURIComponent(email)}`, {
    headers: { 'Authorization': `Bearer ${API_KEY}` }
  });
  return res.json();
}

// Batch verification
async function verifyBatch(emails) {
  const res = await fetch(`${BASE}/verify/batch`, {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${API_KEY}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ emails })
  });
  return res.json();
}

// Usage
verifyEmail('[email protected]').then(console.log);
verifyBatch(['[email protected]', '[email protected]']).then(r => console.log(r.results));
# pip install requests
import requests

API_KEY = 'YOUR_API_KEY'
BASE = 'https://checkmail1.com/api'
HEADERS = {'Authorization': f'Bearer {API_KEY}'}

# Single verification
def verify_email(email):
    r = requests.get(f'{BASE}/verify', params={'email': email}, headers=HEADERS)
    return r.json()

# Batch verification
def verify_batch(emails):
    r = requests.post(f'{BASE}/verify/batch',
        json={'emails': emails}, headers=HEADERS)
    return r.json()

# Usage
result = verify_email('[email protected]')
print(result['status'], result['score'])

batch = verify_batch(['[email protected]', '[email protected]', '[email protected]'])
for r in batch['results']:
    print(r['email'], '-', r['status'])
<?php
define('API_KEY', 'YOUR_API_KEY');
define('BASE', 'https://checkmail1.com/api');

// Single verification
function verifyEmail($email) {
    $ch = curl_init(BASE . '/verify?email=' . urlencode($email));
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . API_KEY]
    ]);
    $res = curl_exec($ch);
    curl_close($ch);
    return json_decode($res, true);
}

// Usage
$result = verifyEmail('[email protected]');
echo $result['status']; // "valid"
echo $result['score'];  // 95
package main

import (
    "encoding/json"
    "fmt"
    "net/http"
    "net/url"
)

const apiKey = "YOUR_API_KEY"
const baseURL = "https://checkmail1.com/api"

type VerifyResult struct {
    Email      string `json:"email"`
    Status     string `json:"status"`
    Valid      bool   `json:"valid"`
    Score      int    `json:"score"`
    Confidence string `json:"confidence"`
}

func verifyEmail(email string) (VerifyResult, error) {
    req, _ := http.NewRequest("GET",
        baseURL+"/verify?email="+url.QueryEscape(email), nil)
    req.Header.Set("Authorization", "Bearer "+apiKey)

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

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

func main() {
    r, _ := verifyEmail("[email protected]")
    fmt.Printf("Status: %s, Score: %d\n", r.Status, r.Score)
}

Response Fields

FieldTypeDescription
emailstringThe email address that was verified
statusstringvalid, invalid, or unknown
validboolean|nulltrue = exists, false = does not exist, null = inconclusive
scoreintegerDeliverability score 0–100
confidencestringhigh, medium, or low
checks.formatbooleanPasses RFC 5322 syntax validation
checks.dnsbooleanDomain has valid MX records
checks.disposablebooleanKnown disposable/temporary email domain

Status Values

StatusMeaningAction
validMailbox confirmed to existSafe to send
invalidMailbox does not existRemove from list
unknownCannot confirm (catch-all, bot-protected)Send with caution

Error Codes

HTTP CodeErrorDescription
400invalid_emailEmail format is invalid
401unauthorizedMissing or invalid API key
402insufficient_creditsAccount has no credits remaining
429rate_limitedToo many requests — slow down
500server_errorInternal error — retry after 30s

Supported Providers

CheckMail1 uses provider-specific native verification for major email providers, delivering high-confidence results where standard SMTP checks fail.

ProviderMethodConfidence
Gmail / Google WorkspaceNative account verificationHigh
iCloud / me.com / mac.comApple native account checkHigh
Yahoo / AOL / VerizonNative account verificationHigh
Outlook / Hotmail / LiveMicrosoft native APIHigh
QQ Mail (qq.com)Tencent native checkHigh
163 / 126 / yeah.netNetEase native checkHigh
Naver (naver.com)Naver native checkHigh
Proton MailProton native APIHigh
YandexYandex native checkHigh
GMX / Web.deNative verificationHigh
Mail.ru / VK MailNative verificationHigh
All other domainsSMTP handshake verificationMedium
Ready to get started?
100 free verifications. No credit card required.
Create Free Account