checkdisposable.email
API · v1

One endpoint. Bearer auth. JSON in, JSON out.

Base URL

https://api.checkdisposable.email

Authentication

Pass your API key as a Bearer token. Get one for free at app.checkdisposable.email.

Authorization: Bearer cde_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Anonymous use is also fine for low volume — the same endpoint will rate-limit by IP to 30/hour without a key. That's what powers the checker on the homepage.

Check a single email

GET /v1/check

curl 'https://api.checkdisposable.email/v1/check?email=test@mailinator.com' \
  -H 'Authorization: Bearer cde_live_...'

Response (200):

{
  "email": "test@mailinator.com",
  "domain": "mailinator.com",
  "is_disposable": true,
  "blocked": true,
  "source_count": 8,
  "sources": ["mailchecker", "disposable-email-domains", "amieiro", ...],
  "reason": "Listed on 8 community lists.",
  "duration_ms": 47
}

Clean email response:

{
  "email": "founder@stripe.com",
  "domain": "stripe.com",
  "is_disposable": false,
  "blocked": false,
  "source_count": 0,
  "sources": [],
  "reason": "Not on the disposable list.",
  "duration_ms": 19
}

Rate-limit headers

Every response includes:

X-RateLimit-Plan: free | unlimited | lifetime | anonymous
X-RateLimit-Limit: 500 | unlimited | 30
X-RateLimit-Remaining: <int>
X-RateLimit-Reset: <seconds until window resets>   # anonymous only

Error codes

StatusErrorMeaning
400bad_requestMissing/malformed email parameter.
401invalid_api_keyAPI key is wrong or revoked.
429rate_limited / plan_limitAnonymous IP limit hit, or monthly plan exhausted.
502upstream_errorBlocklist provider is temporarily unreachable. Retry.

Recipes

Node.js

const res = await fetch(
  'https://api.checkdisposable.email/v1/check?email=' + encodeURIComponent(email),
  { headers: { Authorization: 'Bearer ' + process.env.CDE_KEY } }
);
const { is_disposable } = await res.json();
if (is_disposable) throw new Error('Disposable signup rejected');

Python

import os, httpx

def is_disposable(email: str) -> bool:
    r = httpx.get(
        "https://api.checkdisposable.email/v1/check",
        params={"email": email},
        headers={"Authorization": f"Bearer {os.environ['CDE_KEY']}"},
        timeout=5.0,
    )
    r.raise_for_status()
    return r.json()["is_disposable"]