API Documentation

Getting Started

CheckSignup provides a simple REST API to validate email addresses. The API checks for:

  • Valid email syntax
  • MX record existence
  • Disposable/temporary email domains
  • Email forwarding services
  • Free email providers
  • Role-based addresses (info@, support@, etc.)
  • Typos in common domains

Authentication

All API requests require an API key. Get yours at app.checksignup.com.

Query Parameter

GET /validate?email=user@example.com&key=YOUR_API_KEY

Header

X-API-Key: YOUR_API_KEY

Validate Endpoint

GET https://api.checksignup.com/validate

Parameters

NameTypeRequiredDescription
emailstringYesEmail address to validate
keystringYes*Your API key (*or use header)
ipstringNoEnd-user IP for VPN/proxy/hosting detection

Response Format

{
  "email": "john.doe+test@gmail.com",
  "normalized": "johndoe@gmail.com",
  "domain": "gmail.com",
  "mx": ["gmail-smtp-in.l.google.com"],
  "valid": {
    "syntax": true,
    "mx": true
  },
  "flags": {
    "disposable": false,
    "forwarding": false,
    "free": true,
    "catchall": false,
    "role": false
  },
  "typo_suggestion": null
}

Fields

FieldTypeDescription
emailstringOriginal email submitted
normalizedstringCanonical form (Gmail dots/plus removed)
domainstringEmail domain
mxarrayMX record hostnames (max 3)
validobjectValidation results (syntax, mx)
flagsobjectDetection flags (see below)
typo_suggestionstring|nullSuggested correction if typo detected

Flags Explained

Flagtrue means
disposableTemporary/throwaway email (Mailinator, etc.)
forwardingEmail forwarding service (SimpleLogin, Firefox Relay)
freeFree email provider (Gmail, Yahoo, Outlook)
catchallDomain accepts any address
roleGeneric role address (info@, support@, admin@)

Code Examples

cURL

# Basic validation
curl "https://api.checksignup.com/validate?email=test@gmail.com&key=YOUR_API_KEY"

# With IP for VPN/proxy detection
curl "https://api.checksignup.com/validate?email=test@gmail.com&key=YOUR_API_KEY&ip=1.2.3.4"

Python

import requests

# Get end-user IP from your request (e.g., Flask/Django)
user_ip = request.headers.get('X-Forwarded-For', request.remote_addr)

response = requests.get(
    "https://api.checksignup.com/validate",
    params={
        "email": "test@gmail.com",
        "key": "YOUR_API_KEY",
        "ip": user_ip  # Pass end-user IP for VPN/proxy detection
    }
)
data = response.json()

if data["flags"]["disposable"]:
    print("Blocked: disposable email")
elif not data["valid"]["mx"]:
    print("Blocked: invalid domain")

JavaScript (Node.js)

// Get end-user IP from your request (e.g., Express)
const userIp = req.headers['x-forwarded-for'] || req.socket.remoteAddress;

const params = new URLSearchParams({
  email: 'test@gmail.com',
  key: 'YOUR_API_KEY',
  ip: userIp  // Pass end-user IP for VPN/proxy detection
});

const response = await fetch(
  `https://api.checksignup.com/validate?${params}`
);
const data = await response.json();

if (data.flags.disposable) {
  throw new Error("Please use a permanent email address");
}