Email — entry 014 of 19

MailCheck.ai

Verified Jul 2026

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.

disposable-emailrebranduserchecksignup-validation
AuthenticationNone requiredCall it straight away — no key, no signup.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreemiumA usable free tier exists, with paid plans for more volume.
FormatsJSONResponses can be requested as JSON.

GreatAPIs Score

Score85out of 100
Authentication25/25No authentication required
Pricing17/20Freemium tier available
Docs14/20Documentation URL provided
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

Scored 85 on greatapis.com
<a href="https://greatapis.com/api/mailcheck-ai/"><img src="https://greatapis.com/badge/mailcheck-ai.svg" alt="Scored 85 on greatapis.com"></a>

Auth quickstart

  1. No API key, signup, or credit card required -- a live GET this run against `/domain/mailinator.com` returned a genuine verdict with zero credentials. The keyless tier is real but tight: `x-ratelimit-limit: 5` was present on every successful response, and this run's own second call already left `x-ratelimit-remaining: 0` (see the gotcha below).
Stored keyNo key stored

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

200 application/json

{"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

Base URLhttps://api.usercheck.com
Key endpoints
  • 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`) left `x-ratelimit-remaining` at 1 then 0, and a third call in the same run returned a genuine **HTTP 429** `{"status":429,"error":"Too many requests"}` with `retry-after: 3245` (roughly 54 minutes). Note the 429 carries **only** `retry-after` -- no `x-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 `status` key 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's `status`, not just the transport status code, when scripting around this API.
  • `mailinator.com` is flagged both `"disposable":true` and `"spam":true` while 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 no `email`, `normalized_email`, `alias`, or `role_account` keys, all of which the email route returns alongside the same `domain_age_in_days`/`mx`/`spf`/`dmarc`/`disposable` fields.