Free Email Checker Free Email Checker

DEVELOPERS

Email verification API reference

A REST API for verifying emails, checking domain reputation, and looking up AI-derived domain identity - built on this site's own local 10-signal engine. Machine-readable and human-readable, so scripts, no-code tools, and AI coding agents can all discover and call it directly.

The REST API is enabled on this site.

Authentication

Every route (except this spec itself) requires an API key, created by a site admin from wp-admin -> Free Email Checker -> API Keys. Send it as a bearer token:

Authorization: Bearer YOUR_KEY
# or:X-API-Key: YOUR_KEY
Testing without a live key

Generate a sandbox-type key (prefixed fec_test_ instead of fec_live_) from the API Keys screen to build against /verify and /bulk with instant, deterministic mock results - no real DNS/SMTP lookups, no daily quota, and nothing recorded in Analytics. Every sandbox response carries an "X-FEC-Mode: sandbox" header. The result is controlled by keywords in the email's local part:

invalid.user@example.com     -> status: invalid, score: 0disposable.user@example.com  -> status: risky, is_disposable: true, score: 20catchall.user@example.com    -> status: risky, is_catch_all: true, score: 55risky.user@example.com       -> status: risky, score: 40anyone.else@example.com      -> status: valid, score: 92 (default)

Endpoints

POST /wp-json/fec/v1/verify

Verify a single email address - returns status, a 0-100 confidence score, and disposable/catch-all flags.

curl -X POST https://freeemailchecker.net/wp-json/fec/v1/verify \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"email":"someone@example.com"}'
POST /wp-json/fec/v1/bulk

Queue a batch of emails. Returns 202 immediately with a job id - poll GET /bulk/{job_id}, or pass webhook_url to skip polling.

curl -X POST https://freeemailchecker.net/wp-json/fec/v1/bulk \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 07f137b7-5e05-4ce1-abe2-46eb09b1a620" \
  -d '{"emails":["a@example.com","b@example.com"],"webhook_url":"https://your-app.example.com/webhook"}'

Send a unique Idempotency-Key (any string, e.g. a UUID) to make retries safe: if a request times out or the connection drops before you see the response, resend the exact same body with the same Idempotency-Key and you'll get back the original job's response instead of a second job. Reusing a key with a different body returns 422. Keys are remembered for 24 hours.

Every webhook delivery carries an X-FEC-Signature header so you can confirm it really came from this site: t=<unix timestamp>,v1=<hex hmac-sha256>, where the HMAC covers "{timestamp}.{raw JSON body}" and is keyed on sha256() of the same API key you used to create the job - nothing extra to copy from the admin.

// $body is the exact raw POST body your endpoint received.
list( $t_part, $v1_part ) = explode( ',', $_SERVER['HTTP_X_FEC_SIGNATURE'] );
$timestamp = substr( $t_part, 2 );
$signature = substr( $v1_part, 3 );

if ( abs( time() - (int) $timestamp ) > 300 ) {
    // Reject - too old, possible replay.
}

$secret   = hash( 'sha256', 'YOUR_KEY' );
$expected = hash_hmac( 'sha256', $timestamp . '.' . $body, $secret );

if ( ! hash_equals( $expected, $signature ) ) {
    // Reject - signature mismatch.
}
GET /wp-json/fec/v1/bulk/{job_id}

Check a bulk job's status, scoped to the API key that created it.

GET /wp-json/fec/v1/domain/{domain}

Aggregate reputation for a domain from this site's own check history. Read-only - does not use your daily quota.

curl https://freeemailchecker.net/wp-json/fec/v1/domain/example.com \
  -H "Authorization: Bearer YOUR_KEY"
GET /wp-json/fec/v1/identity/{domain}

AI-derived category, risk level, trust score, and DNS/SSL/hosting signals for a domain. Read-only - does not use your daily quota.

curl https://freeemailchecker.net/wp-json/fec/v1/identity/example.com \
  -H "Authorization: Bearer YOUR_KEY"
For AI agents & no-code tools

Fetch the machine-readable spec below to auto-discover every route, parameter, and response shape - no need to scrape this page.

GET https://freeemailchecker.net/wp-json/fec/v1/openapi.json

Embed this widget on your site

Run your own visitors' emails through the same checker used on this site, without installing anything - paste one snippet and the widget shows up on your page as an iframe, free.

Paste this anywhere in your HTML. It stays free as long as the attribution link stays visible.

MCP server

For agents that speak the Model Context Protocol directly (Claude, ChatGPT, etc.) rather than calling REST endpoints, this site's API is also available as six ready-made MCP tools - no route discovery needed.

verify_email

Wraps POST /v1/verify - status, confidence, disposable/catch-all flags, trust score, and typo suggestions for one address.

check_domain_reputation

Combines GET /v1/domain/{domain} and GET /v1/identity/{domain} - check-history stats plus the AI-derived identity profile, in one call. Read-only, no quota used.

bulk_verify_emails / check_bulk_verify_job

Wraps POST /v1/bulk and GET /v1/bulk/{job_id}. Submits up to 100 addresses and waits up to ~20 seconds for the job to finish, returning results inline when it's fast enough - otherwise a job_id comes back for check_bulk_verify_job to poll later. May be Pro-gated (bulk_api).

find_email

Wraps GET /v1/finder/{domain} - scans a domain's homepage and common contact paths for a publicly published email address. No guarantee one is found. May be Pro-gated (email_finder_api); uses the daily quota.

search_company_directory

Wraps GET /v1/directory - searches the same public-quality domains listed at /companies/, by keyword and/or category. Read-only, never gated, no quota used.

Setup

Point your MCP client at the fec-mcp-server package with this site's URL and an API key (a sandbox key works for testing - see above):

{
  "mcpServers": {
    "free-email-checker": {
      "command": "node",
      "args": ["/path/to/mcp-server/src/index.js"],
      "env": {
        "FEC_SITE_URL": "https:\/\/freeemailchecker.net",
        "FEC_API_KEY": "YOUR_KEY"
      }
    }
  }
}

Try it

Interactive explorer generated live from the OpenAPI spec above. Paste your API key into any request's "Authorize" button to make real calls.