API Documentation
Simple REST API to detect disposable emails. 25 free requests/day.
tempmailchecker.com/agent-setup β these docs as a single markdown file, ready for LLMs.
Endpoint
Base URL
https://tempmailchecker.com
The legacy us.tempmailchecker.com and asia.tempmailchecker.com hostnames remain fully supported as aliases of the main endpoint β existing integrations keep working without changes.
Authentication
Include your API key in the request header:
X-API-Key: your_api_key
Get your free API key on the signup page.
Parameters
| Parameter | Type | Description |
|---|---|---|
email |
string | Full email address to check |
domain |
string | Or just the domain (alternative) |
Use either email or domain. The domain is extracted automatically from emails.
Response
Disposable Email
{ "temp": true }
Legitimate Email
{ "temp": false }
Code Examples
curl "https://tempmailchecker.com/check?email=user@tempmail.com" \
-H "X-API-Key: YOUR_API_KEY"
import requests
resp = requests.get(
"https://tempmailchecker.com/check",
params={"email": "user@tempmail.com"},
headers={"X-API-Key": "YOUR_API_KEY"}
)
if resp.json()["temp"]:
print("Blocked: disposable email")
const resp = await fetch(
"https://tempmailchecker.com/check?email=user@tempmail.com",
{ headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const { temp } = await resp.json();
if (temp) console.log("Blocked");
$ch = curl_init("https://tempmailchecker.com/check?email=user@tempmail.com");
curl_setopt($ch, CURLOPT_HTTPHEADER, ["X-API-Key: YOUR_API_KEY"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = json_decode(curl_exec($ch), true);
if ($data["temp"]) echo "Blocked";
Check Usage
Check your current usage. No authentication header requiredβjust pass your key as a query parameter.
Request
curl "https://tempmailchecker.com/usage?key=YOUR_API_KEY"
Response (free plan)
{
"usage_today": 18,
"limit": 25,
"reset": "midnight UTC"
}
Response (paid plans)
Paid plans have a monthly quota instead of a daily limit. reset is the date your quota renews.
{
"usage_this_month": 1204,
"limit": 3000,
"reset": "2026-08-09"
}
Rate Limits
Free tier: 25 requests per day. Resets at midnight UTC.
When you exceed your limit, you'll receive a 429 response:
{
"error": "Rate limit exceeded",
"message": "You have exceeded your daily limit of 25 requests",
"limit": 25,
"used": 25,
"reset": "midnight UTC"
}
Need more? Paid plans start at $12/month for 3,000 requests β see pricing.
Custom Blacklist & Whitelist
Paid plans can override the global database with per-account domain lists, managed in the dashboard:
| List | Effect on /check |
|---|---|
| Whitelist | Domain always returns {"temp": false}, even if it's in our database |
| Blacklist | Domain always returns {"temp": true}, even if we consider it legitimate |
Evaluation order: your whitelist β your blacklist β global database. Changes take effect immediately. Domains can be added individually or bulk-imported. Lists are currently managed through the dashboard; key-authenticated list endpoints are on the roadmap.
Status Codes & Errors
| Status | Response | Meaning |
|---|---|---|
200 |
{"temp": true|false} |
Success |
400 |
{"error": "Missing email or domain parameter"} |
No email or domain provided |
401 |
{"error": "API key required", "temp": null} |
Missing X-API-Key header |
401 |
{"error": "Invalid API key", "temp": null} |
API key not recognized |
429 |
{"error": "Rate limit exceeded", ...} |
Plan quota reached β upgrade or wait for reset |
Tip: decide whether your signup flow should fail open (allow the signup) or fail closed (block it) when the API returns an error β most integrations fail open.