Email — entry 014 of 19
MailCheck.ai
MailCheck.ai has rebranded to UserCheck, but its original keyless lookup endpoint keeps working unchanged: pass an address and get back disposable, free-provider, MX, and domain-age signals in one JSON response, aimed at blocking throwaway signups. The rebranded product adds a free-to-start paid tier for higher-volume, authenticated use.
MailCheck.ai has rebranded to UserCheck, but its original keyless lookup keeps working unchanged: pass a domain or a full address and get back disposable, free-provider, MX, SPF/DMARC, and domain-age signals in one JSON response. A live GET this run against /domain/mailinator.com returned "disposable":true and "spam":true alongside a fully valid "spf":"strict" and "dmarc":"reject" — a disposable-mail domain that still runs real, correctly configured mail infrastructure.
GreatAPIs Score
Auth quickstart
- No API key, signup, or credit card required — a live GET this run against
/domain/mailinator.comreturned a genuine verdict with zero credentials. The keyless tier is real but tight:x-ratelimit-limit: 5was present on every successful response, and this run's own second call already leftx-ratelimit-remaining: 0(see the gotcha below).
Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.
Look up a domain's disposable/deliverability signals
GEThttps://api.usercheck.com/domain/mailinator.com
{"status":200,"domain":"mailinator.com","domain_age_in_days":8430,"mx":true,"mx_records":[{"hostname":"mail.mailinator.com","priority":1},{"hostname":"mail2.mailinator.com","priority":1}],"mx_providers":[],"spf":"strict","dmarc":"reject","disposable":true,"public_domain":false,"relay_domain":false,"free_subdomain":false,"spam":true,"did_you_mean":null}The sibling /email/{email} route is keyless too and returns overlapping fields plus a few email-specific ones — a live GET this run against /email/test@mailinator.com additionally returned "normalized_email", "alias":false, and "role_account":true, on top of every field shown above.
Try it
Developer reference
https://api.usercheck.com1 request/second (Free plan); unauthenticated requests limited to 5/hour -- per usercheck.com/docs/api/rate-limits, confirmed live via x-ratelimit-limit/x-ratelimit-remaining headers on api.usercheck.com/email/{email}.
- GET/domain/{domain}
- GET/email/{email}
Gotchas & limits
- The keyless tier's real ceiling is
x-ratelimit-limit: 5, confirmed live this run — two successful lookups (/domain/mailinator.com, then/email/test@mailinator.com) leftx-ratelimit-remainingat 1 then 0, and a third call in the same run returned a genuine HTTP 429{"status":429,"error":"Too many requests"}withretry-after: 3245(roughly 54 minutes). Note the 429 carries onlyretry-after— nox-ratelimit-*headers at all — so the header you'd use to see remaining quota vanishes exactly when you've run out. Budget calls carefully; this quota resets far slower than Disify's. - Even the rate-limit error's own JSON body carries a
statuskey mirroring the HTTP status code ("status":429) — confirmed live this run, the same envelope shape the entry's successful 200 responses use ("status":200). Check the body'sstatus, not just the transport status code, when scripting around this API. mailinator.comis flagged both"disposable":trueand"spam":truewhile still carrying fully valid"spf":"strict"and"dmarc":"reject"records and an 8430-day-old registration — confirmed live this run. Don't assume a disposable-mail domain lacks real, correctly configured mail infrastructure./domain/{domain}and/email/{email}overlap but aren't identical — confirmed live this run: the domain route's response has noemail,normalized_email,alias, orrole_accountkeys, all of which the email route returns alongside the samedomain_age_in_days/mx/spf/dmarc/disposablefields.