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.comAnswers 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
| Field | What it means |
|---|---|
verdict | disposable: 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. |
disposable | true only when verdict is disposable. |
reasons | Why, 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_as | Which public lists name the domain, and the exact entry (the domain or a parent domain). |
kind | provider (Gmail, Outlook…), forwarding (DuckDuckGo, Firefox Relay, SimpleLogin…) or null. |
mail | The live mail-server check. checked is false when DNS did not answer in time; then only the lists were used. |
normalized | For Gmail and some other providers: the address with dots and the + part removed, or null when nothing changes. |
data | When 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.