REST Countries

Email address intelligence, in one lookup.

Hand it an address and get one record back: the parts it breaks into, the operator its live MX records say is handling the mail, SPF and DMARC posture, registration dates, a Gravatar check, and flags for free, disposable, forwarding and role-based addresses. Obvious domain typos come back corrected.

Get an API key Read the docs

Try a real request

// Fires a real request against the demo API key.
// Click the button below to run it. The response opens in the Explorer panel.
const response = await fetch(
  'https://api.restcountries.com/email-intelligence/v1/[email protected]',
  { headers: { 'Authorization': 'Bearer rc_live_demo' } }
);
const result = await response.json();

Run this request → Swap in any address you like. The response opens in an Explorer panel on the right.

Inside one record

Every block on every address

One record under data.objects, always the same shape. Anything the data can't name for a given address comes back null. There are no optional keys.

{
  "email": "[email protected]",
  "did_you_mean": null,
  "parts": { "local": "someone+newsletter", "username": "someone", "tag": "newsletter", "domain": "gmail.com" },
  "tld": { "name": "com", "country": { "name": null, "emoji": null } },
  "domain": {
    "provider": { "name": "Google", "type": "mailbox", "url": "https://workspace.google.com" },
    "category": "free",
    "mx": [
      { "exchange": "gmail-smtp-in.l.google.com", "priority": 5 },
      { "exchange": "alt1.gmail-smtp-in.l.google.com", "priority": 10 },
      { "exchange": "alt2.gmail-smtp-in.l.google.com", "priority": 20 }
    ],
    "registration": {
      "registered_on": "1995-08-13",
      "updated_on": "2026-07-11",
      "expires_on": "2027-08-12",
      "age_days": 11316
    },
    "authentication": {
      "spf": { "present": true, "policy": "softfail", "record": "v=spf1 redirect=_spf.google.com" },
      "dmarc": { "present": true, "policy": "none", "subdomain_policy": "quarantine", "percentage": 100 }
    }
  },
  "gravatar": { "exists": false, "avatar_url": null, "profile_url": null },
  "attributes": {
    "is_valid_syntax": true,
    "is_free": true,
    "is_disposable": false,
    "is_forwarder": false,
    "is_likely_role_based": false,
    "has_plus_addressing": true
  }
}
// trimmed: the full record carries every mail exchanger the domain publishes,
// plus the complete SPF and DMARC records
Disposable 8,000+ throwaway domains listed
Free mailboxes 13,000+ public provider domains
Mail operators 40+ named from live MX records
Country TLDs 250+ mapped to their country

Common questions

Before you wire it in

Does this tell me the address is deliverable?

No, and it doesn't claim to. is_valid_syntax says the string is well formed; the mailbox may still not exist. No mailbox probing happens, which is why the field is named for syntax rather than validity.

Why does a company domain report Google as its provider?

Because domain.provider is read from MX records, and a domain on Google Workspace genuinely is operated by Google. is_free matches on the domain itself instead, so that same address correctly comes back paid.

Can I skip the lookups I don't want?

Yes. ?response_fields_omit=gravatar or domain.registration skips the outbound call entirely rather than hiding its result, which matters for the Gravatar check in particular. See the full reference →

Start reading addresses today.

Free tier covers most prototypes. Point at /email-intelligence/v1/process and go.

Get an API key Read the docs