BurnerCheck

API docs

Base URL: the host you loaded this page from. All responses are JSON with access-control-allow-origin: *. Errors look like {"error":{"code":"…","message":"…"}}.

Authentication

Send an API key as Authorization: Bearer bc_live_…. Without a key, /v1/check and /v1/domain work at about 10 checks per minute per IP. A bad or unknown key returns 401 invalid_api_key; it never falls back to anonymous use. Repeated invalid keys from one IP get 429 too_many_failed_auth for a minute. API keys are issued by request during early access (no self-serve signup yet): email digitalpromohub.support+burnercheck@gmail.com.

POST /v1/check (recommended) · GET /v1/check?email=

Use POST. It keeps the address out of the URL. Body {"email":"…"}, Content-Type: application/json, at most 16 KB. GET with ?email= also works and returns the same result, but the address is then part of the URL (see Privacy).

curl -X POST -H "Authorization: Bearer $KEY" -H "content-type: application/json" \
  -d '{"email":"jane@yahooo.com"}' "https://<host>/v1/check"
{
  "email": "jane@yahooo.com",
  "domain": "yahooo.com",
  "valid_syntax": true,
  "disposable": false,
  "role": false,
  "free_provider": false,
  "suggestion": "jane@yahoo.com",
  "confusable": false,
  "list_version": "2026-10-13.d1a9c51"
}
FieldMeaning
valid_syntaxPractical address syntax (dot-atom local part up to 64 chars, LDH domain labels, letter TLD or punycode, 254 chars total). Quoted local parts and IP-literal domains are reported as invalid. Unicode domains are converted to punycode.
disposableThe domain or a parent domain is on the disposable list and not on the allowlist. false means "not on our list", not "verified real" (see Limitations).
roleThe local part (lowercased, +tag removed) is a shared/system mailbox such as info, admin, support, sales, noreply, postmaster.
free_providerExact match against a curated list of consumer mail domains (Gmail, Outlook/Hotmail/Live, Yahoo, AOL, iCloud, Proton, Tuta, GMX, Yandex, Mail.ru, QQ, big ISPs …).
suggestionA corrected address for a likely one-character typo of a big webmail domain (gamil.com, yahooo.com, gmail.con …), otherwise null. Never offered for a domain already on any list (disposable, free provider, allowlist), and never changes a country ending (hotmail.ca and yahoo.co.nz stay as they are).
confusabletrue if the domain uses look-alike characters: a label mixing alphabets (for example Cyrillic "а" in "gmаil.com"), a name with accents or non-Latin letters that imitates a known provider or listed domain (for example "gmáil.com"), or a .com/.net/.org name made only of Cyrillic letters that look like lowercase Latin letters (а с ԁ е һ і ј ӏ о р ԛ ѕ ԝ х у ү, for example "аррӏе.com"). Ordinary Cyrillic or Greek words such as "москва.com" are not flagged. If it imitates a big webmail provider, suggestion points to the real one.
list_version<upstream commit date>.<short sha> of the disposable list.

Input over 320 characters → 400 input_too_long. Missing email → 400 missing_email. POST: body over 16 KB → 413, not JSON → 415/400 invalid_json. POST and GET share the same rate limits and quota.

GET /v1/domain/{domain}

The same check for a domain only. It never needs or accepts a local part (anything with @ → 400 domain_only), so you can check sign-ups without sending addresses at all.

curl "https://<host>/v1/domain/mailinator.com"
{ "domain": "mailinator.com", "valid_syntax": true, "disposable": true, "free_provider": false, "suggestion": null, "confusable": false, "list_version": "2026-10-13.d1a9c51" }

POST /v1/check/batch

Planned for paid plans (Pro, Business; not on sale yet), so it needs a paid-plan key. Body {"emails":[…]}, 1–100 strings, Content-Type: application/json, at most 16 KB (16,384 bytes). Each address counts as one check.

curl -X POST -H "Authorization: Bearer $KEY" -H "content-type: application/json" \
  -d '{"emails":["a@mailinator.com","info@example.com"]}' "https://<host>/v1/check/batch"
{ "count": 2, "list_version": "…", "results": [ { …same shape as /v1/check… }, … ] }

Errors: no key 401 api_key_required; free key 403 paid_plan_required ("planned for paid plans"); body over 16 KB 413 body_too_large (checked from Content-Length before reading, and again on the real bytes); more than 100 400 too_many_emails; not JSON 415/400 invalid_json; not enough quota left for the whole batch 429 quota_exceeded (nothing is charged).

GET /v1/meta

Service version and build (git commit), list version, domain count, allowlist size, last refresh time, source commit and licence, and the current limits. Not rate limited and not counted.

Limits and quota headers

Pricing (planned)

Paid plans are not on sale yet. This is the planned pricing:

PlanPriceChecks / monthBatch
Free$01,000No
Pro$9/mo25,000Yes (100 per call)
Business$29/mo250,000Yes (100 per call)

The web checker on the home page stays free.

Privacy

Limitations

Changes

Changes in 0.1.3

Changes in 0.1.2

Changes in 0.1.1 (2026-10-03). Existing fields are unchanged. If you parse responses strictly, note:

Data source and licence

Disposable domains come from disposable-email-domains/disposable-email-domains, released under CC0 1.0 Universal (public domain dedication). Current list: 9,881 domains, version 2026-10-13.d1a9c51 (upstream commit d1a9c51f29de15e8dab2f5ed8bda90a711ef6cb9), refreshed 2026-10-14. Thank you to its maintainers and contributors.

The allowlist combines the upstream project's last published allowlist (removed upstream in April 2026, same CC0 licence) with BurnerCheck's own false-positive fixes. Role and free-provider lists are curated by BurnerCheck.

Report a false positive

If a real, long-lived mail provider is flagged as disposable, email digitalpromohub.support+burnercheck@gmail.com with the domain and why it isn't disposable. Confirmed reports go on the BurnerCheck allowlist and take effect with the next deploy. You can also ask the upstream project to remove it.