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.
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:
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:
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.
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):