API

Email verification API

Verify addresses from your sign-up form, CRM or scripts. JSON over HTTPS with a bearer key; each address uses one credit.

Authentication

Create a key on your account page and send it in the Authorization header. Keys start with eft_.

Authorization: Bearer eft_your_key

Verify one address

GET /api/v1/verify?email=… (or POST with a JSON body {"email": "…"}). Typically 1–5 seconds; up to 30 for slow mail servers.

curl "https://emailfortify.com/api/v1/[email protected]" \ -H "Authorization: Bearer eft_your_key"
{ "email": "[email protected]", "verdict": "deliverable", // deliverable | risky | undeliverable | unknown "reason": "accepted", "reasonText": "The mail server confirmed this mailbox exists.", "score": 97, // 0-100 "suggestion": null, // "[email protected]" for [email protected] "flags": [], // role_account, disposable, possible_typo "checks": { "syntax": { "valid": true }, "domain": { "name": "acme.com", "status": "ok", "mx": [ … ], "provider": "Google (Gmail / Workspace)" }, "disposable": false, "role": false, "free": false, "smtp": { "status": "accepted", "catchAll": false } }, "credits": { "remaining": 4999 } }

Reasons

acceptedThe mail server confirmed this mailbox exists.
accepted_unconfirmedThe mail server accepted this address; we couldn’t test whether it accepts every address.
invalid_syntaxThis isn’t a valid email address.
domain_not_foundThe domain doesn’t exist.
no_mail_serverThe domain doesn’t accept email (no mail server).
mailbox_not_foundThe mail server says this mailbox doesn’t exist.
mailbox_disabledThe mailbox exists but is disabled.
mailbox_fullThe mailbox is full, so mail would bounce for now.
accept_allThe domain accepts mail for every address, so this mailbox can’t be confirmed.
disposableThis is a disposable (temporary) email address.
possible_typoThe domain looks like a typo of a common provider.
greylistedThe mail server asked us to try again later (greylisting or rate limit).
probe_blockedThe mail server refused our check, so the mailbox couldn’t be tested.
smtp_unreachableWe couldn’t reach the domain’s mail server.
dns_errorDNS didn’t answer, so the domain couldn’t be checked.
mailbox_not_checkedDomain and syntax are fine; the mailbox itself wasn’t tested.

Verify a list

POST /api/v1/bulk with up to 50,000 addresses. Credits are charged for unique addresses when the job is created.

curl https://emailfortify.com/api/v1/bulk \ -H "Authorization: Bearer eft_your_key" -H "Content-Type: application/json" \ -d '{"name": "October signups", "emails": ["[email protected]", "[email protected]"]}' { "id": "Xk2…", "status": "queued", "total": 2 }

Poll GET /api/v1/bulk/{id} until status is done, then fetch GET /api/v1/bulk/{id}/results. Add ?filter=deliverable, safe (deliverable + risky), undeliverable or all, and &format=csv for CSV.

Domain diagnostics

GET /api/v1/domain/{domain} returns MX, SPF, DKIM and DMARC results. Free (no credits).

Account

GET /api/v1/account returns your plan and remaining credits.

Errors and limits

401 unauthorizedMissing or revoked key.
402 insufficient_creditsNot enough credits left this month.
400 invalid_requestMissing email, empty list or more than 50,000 addresses.
429 rate_limitedMore than 10 requests a second per key.