tooljarEmail

Free temp mail API

Ask about an email address or a domain. Get one word, or JSON with the reasons. No key, no sign-up, CORS on, free for commercial use.

One word, for scripts

curl email.tooljar.dev/mailinator.com

Answers disposable, suspicious, undeliverable or ok, then a new line. A full address works too: curl email.tooljar.dev/someone@mailinator.com.

JSON, with the reasons

curl "email.tooljar.dev/api/check?q=john.doe%2Bnews@gmail.com"

q takes an address or a domain. email= and domain= work as other names for it.

{
  "email": "john.doe+news@gmail.com",
  "domain": "gmail.com",
  "verdict": "ok",
  "disposable": false,
  "reasons": [
    { "code": "known_provider", "text": "A well-known email provider. Not temp mail." }
  ],
  "lists": [],
  "listed_as": null,
  "kind": "provider",
  "mail": {
    "checked": true,
    "exists": true,
    "can_receive": true,
    "servers": ["gmail-smtp-in.l.google.com", "…"],
    "temp_mail_server": false
  },
  "normalized": "johndoe@gmail.com",
  "data": { "updated": "2026-11-01", "domains": 78800, "lists": 5 }
}

The fields

FieldWhat it means
verdictdisposable: on a temp mail list. suspicious: on no list, but its mail server is one that temp mail services use. undeliverable: the domain does not exist or cannot receive mail. ok: none of these.
disposabletrue only when verdict is disposable.
reasonsWhy, as a list of { code, text }. Codes: on_list, temp_mail_server, no_domain, no_mail, known_provider, forwarding_service, dns_failed, nothing_found.
lists, listed_asWhich public lists name the domain, and the exact entry (the domain or a parent domain).
kindprovider (Gmail, Outlook…), forwarding (DuckDuckGo, Firefox Relay, SimpleLogin…) or null.
mailThe live mail-server check. checked is false when DNS did not answer in time; then only the lists were used.
normalizedFor Gmail and some other providers: the address with dots and the + part removed, or null when nothing changes.
dataWhen the lists were last updated, and how many domains they hold.

The field names stay stable. New fields may be added; none will be renamed or removed.

From a web page

const res = await fetch("https://email.tooljar.dev/api/check?q=" + encodeURIComponent(email));
const { verdict, reasons } = await res.json();
if (verdict === "disposable") showHint("Please use an address you keep.");

Errors

Something that is not an address or a domain gets HTTP 400 and { "error": "…" }.

Fair use

Up to 50 requests in 10 seconds per IP, then HTTP 429 for 10 seconds. For steady use, about one request a second. For bulk checks, run the lists yourself: everything is open source, and the data files are in the repository.

Privacy

We don't log or store what you check. The mail-server check sends only the domain to Cloudflare's public DNS (1.1.1.1). See privacy.