Frequently Asked Questions
Everything you need to know about detecting and blocking disposable emails. Find answers to API integration, pricing, accuracy, and best practices.
General Questions
Understanding disposable emails and why detection matters
What are disposable email addresses?
Disposable email addresses (also called temp mail, throwaway email, or burner email) are temporary inboxes that self-destruct after a short periodβtypically 10 minutes to 24 hours.
Popular services include:
- Mailinator β Public inboxes, no signup required
- Guerrilla Mail β 1-hour temporary addresses
- 10MinuteMail β Self-destructs in 10 minutes
- Temp-Mail β Anonymous temporary inbox
- YOPmail β Free disposable email service
Why should I block disposable emails?
Disposable emails are the #1 tool for online abuse. Here's what they enable:
| Abuse Type | Impact |
|---|---|
| π Promo Abuse | Users claim unlimited free trials and coupons |
| π₯ Fake Signups | Bots create thousands of accounts |
| π Referral Fraud | Self-referral with fake emails for rewards |
| β Fake Reviews | Manipulated ratings with throwaway accounts |
| π« Ban Evasion | Banned users return with new emails |
| π List Decay | Email lists filled with dead addresses |
Blocking disposable emails at signup ensures you're collecting real, contactable users who can receive transactional emails, password resets, and marketing communications.
Are there legitimate reasons to use disposable email?
Yes, some legitimate use cases include:
- Privacy protection β Avoiding spam when downloading resources
- Testing β QA teams testing email flows
- One-time signups β Accessing a single article or file
However, for most businesses, the abuse far outweighs legitimate use. If a user won't provide a real email, they're unlikely to be a valuable customer.
How many disposable email domains do you detect?
We currently track 277,000+ disposable email domainsβand growing daily.
Our database is continuously updated through:
- π€ Automated scrapers β Monitoring new temp mail services
- π₯ Community reports β User submissions via report@tempmailchecker.com
- π Manual verification β Human review before adding
- π MX record analysis β Detecting catch-all temp mail servers
New domains are typically added within 24 hours of discovery.
Do you detect subdomains of disposable services?
Yes! Many disposable email services use wildcard subdomains to evade detection. For example:
random123.mailinator.comuser.guerrillamail.comanything.tempmail.net
We detect these by checking the parent domain. Any subdomain of a known disposable service is automatically flagged.
What about plus-addressing (user+tag@gmail.com)?
Plus-addressing (like john+newsletter@gmail.com) is a legitimate feature of Gmail, Outlook, and other major providers. We do NOT flag these as disposable.
The email still goes to a real, permanent inboxβthe user just uses the tag for organization.
+tag portion before storing emails. But this is a separate concern from disposable detection.
API & Integration
Technical details for developers integrating the API
How does the API work?
Simple: one request, one boolean. Send a GET request with the email, get back whether it's disposable.
curl "https://tempmailchecker.com/check?email=test@mailinator.com" \
-H "X-API-Key: your_api_key"
Response:
{"temp": true}
That's it. temp: true = disposable, temp: false = legitimate.
What's the API response time?
Blazing fast. Our API is optimized for real-time validation:
| Metric | Time |
|---|---|
| Server processing | <5ms |
| EU β EU latency | ~30ms |
| US β US latency | ~35ms |
| Asia β Asia latency | ~40ms |
| Cross-region (worst case) | ~150ms |
Use the endpoint closest to your users for best performance.
Which API endpoint should I use?
Choose based on where your servers or users are located:
| Region | Endpoint | Best For |
|---|---|---|
| πͺπΊ EU | tempmailchecker.com | Europe, Africa, Middle East |
| πΊπΈ US | us.tempmailchecker.com | Americas |
| π Asia | asia.tempmailchecker.com | Asia-Pacific, Australia |
All endpoints share the same database and accept the same API keys. Choose the one with lowest latency to your infrastructure.
How do I integrate with Python?
import requests
def is_disposable_email(email: str, api_key: str) -> bool:
"""Check if an email is disposable."""
response = requests.get(
"https://tempmailchecker.com/check",
params={"email": email},
headers={"X-API-Key": api_key}
)
return response.json().get("temp", False)
# Usage
if is_disposable_email("user@mailinator.com", "your_key"):
print("Blocked: disposable email detected")
else:
print("Allowed: legitimate email")
How do I integrate with JavaScript/Node.js?
async function isDisposableEmail(email, apiKey) {
const response = await fetch(
`https://tempmailchecker.com/check?email=${encodeURIComponent(email)}`,
{ headers: { 'X-API-Key': apiKey } }
);
const data = await response.json();
return data.temp;
}
// Usage
const isDisposable = await isDisposableEmail('user@tempmail.com', 'your_key');
if (isDisposable) {
throw new Error('Disposable emails not allowed');
}
How do I integrate with PHP?
<?php
function isDisposableEmail($email, $apiKey) {
$url = "https://tempmailchecker.com/check?email=" . urlencode($email);
$opts = [
"http" => [
"header" => "X-API-Key: " . $apiKey
]
];
$context = stream_context_create($opts);
$response = file_get_contents($url, false, $context);
$data = json_decode($response, true);
return $data['temp'] ?? false;
}
// Usage
if (isDisposableEmail($_POST['email'], 'your_key')) {
die('Disposable emails are not allowed');
}
What are the rate limits?
| Plan | Requests | Period |
|---|---|---|
| Free | 25 | Per day |
| Starter ($9) | 5,000 | Per month |
| Growth ($29) | 25,000 | Per month |
| Scale ($69) | 100,000 | Per month |
| Enterprise | Unlimited | Custom |
Check your current usage via the dashboard or the /usage endpoint.
What happens if I exceed my rate limit?
You'll receive a 429 Too Many Requests response:
{
"error": "Rate limit exceeded",
"limit": 25,
"used": 25,
"resets_at": "2025-12-06T00:00:00Z"
}
We send email warnings at 80% usage so you have time to upgrade before hitting the limit.
Do you support batch checking multiple emails?
Not yetβbatch endpoints are on our roadmap. For now, you can send parallel requests. Our API handles high concurrency well.
import asyncio
import aiohttp
async def check_emails(emails, api_key):
async with aiohttp.ClientSession() as session:
tasks = [check_one(session, email, api_key) for email in emails]
return await asyncio.gather(*tasks)
# Check 100 emails in parallel
results = asyncio.run(check_emails(email_list, "your_key"))
Need bulk validation? Contact us for enterprise options.
How do I authenticate API requests?
Include your API key in the X-API-Key header:
GET /check?email=user@example.com HTTP/1.1
Host: tempmailchecker.com
X-API-Key: tmck_your_api_key_here
Get your API key from the signup page or dashboard.
Pricing & Billing
Plans, payments, and subscription management
Is there a free tier?
Yes! Every account gets 25 free requests per day, forever. No credit card required.
Perfect for:
- Testing the API before committing
- Personal projects and side projects
- Low-volume websites (<750 signups/month)
What payment methods do you accept?
We use Stripe for secure payments. Accepted methods:
- π³ Credit/Debit cards (Visa, Mastercard, Amex, Discover)
- π Apple Pay
- π€ Google Pay
- π¦ Bank transfers (in supported regions)
- π Link by Stripe
Can I upgrade or downgrade anytime?
Yes, no lock-in contracts.
- Upgrade: Takes effect immediately. New limits apply instantly.
- Downgrade: Takes effect at your next billing cycle.
- Cancel: Anytime, no penalties. You keep access until the end of your billing period.
Do you offer refunds?
We offer a 7-day money-back guarantee on all paid plans.
If you're not satisfied, contact us within 7 days of your first payment for a full refundβno questions asked.
Do unused requests roll over?
No, unused requests don't roll over. Your quota resets:
- Free plan: Daily at midnight UTC
- Paid plans: Monthly on your billing anniversary
We recommend choosing a plan that matches your average usage rather than peak usage.
Can I get invoices for my payments?
Yes! Invoices are automatically generated for every payment and available in your dashboard under "Subscription".
Need to add VAT/tax ID or company details? Manage this in the Stripe billing portal.
Accuracy & Coverage
Detection quality and domain management
How accurate is the detection?
Very accurate. We focus on precision to avoid false positives:
- False positives: Extremely rare (<0.01%). We manually verify domains before adding.
- False negatives: Can occur with brand-new services, but we typically catch them within 24 hours.
We never flag legitimate email providers (Gmail, Outlook, Yahoo, corporate domains, etc.).
I found a disposable domain you're missing. How do I report it?
Email us at report@tempmailchecker.com with:
- The domain name
- Link to the temp mail service (if known)
- Any additional context
We review all submissions and typically add verified domains within 24 hours.
My domain is incorrectly flagged. How do I get it unblocked?
Contact us at support@tempmailchecker.com with:
- Your domain name
- Proof of domain ownership (DNS TXT record or WHOIS)
- Brief description of your service
We manually review all unblock requests and respond within 48 hours.
How often is the domain list updated?
Continuously. Our automated scrapers run 24/7 monitoring:
- New temp mail service launches
- Domain changes on existing services
- Community-reported domains
The API always uses the latest listβno action required on your end.
Can I add custom whitelists or blacklists?
Not currently via the API, but you can implement this in your application:
WHITELIST = {"partner.com", "trusted.org"}
BLACKLIST = {"competitor.com"}
def check_email(email, api_key):
domain = email.split("@")[1].lower()
if domain in WHITELIST:
return False # Always allow
if domain in BLACKLIST:
return True # Always block
# Fall back to API
return is_disposable_email(email, api_key)
Enterprise plans include custom rulesβcontact us for details.
Security & Privacy
Data protection, compliance, and security practices
Do you store the emails I check?
We log request metadata for rate limiting and analytics:
- β Timestamp
- β Domain portion only (not full email)
- β Result (temp: true/false)
- β We do NOT store full email addresses long-term
Logs are automatically purged after 30 days.
Is the API connection secure?
Yes. All API traffic is encrypted via HTTPS/TLS 1.3.
- π TLS 1.3 encryption
- π API keys are hashed (bcrypt) in our database
- π‘οΈ DDoS protection via Cloudflare
- π Regular security audits
Are you GDPR compliant?
Yes. We're based in the EU and fully GDPR compliant:
- β Minimal data collection (only what's necessary)
- β Data stored in EU data centers
- β No data sellingβever
- β Right to deletion (request anytime)
- β DPA available for enterprise customers
Can I rotate my API key if it's compromised?
Yes. You can regenerate your API key instantly from the dashboard.
- Log in to your dashboard
- Click "Regenerate API Key"
- Update your integration with the new key
The old key is immediately invalidated.
Troubleshooting
Common issues and how to fix them
I'm getting a 401 Unauthorized error
This means your API key is missing or invalid. Check:
- β
API key is in the
X-API-Keyheader (not query param) - β No extra spaces or newlines in the key
- β
Key starts with
tmck_ - β Account is active (check dashboard)
curl -H "X-API-Key: tmck_abc123..." "https://tempmailchecker.com/check?email=test@example.com"
I'm getting a 429 Rate Limit error
You've exceeded your request quota. Options:
- Wait for reset: Free plans reset daily at midnight UTC
- Upgrade: Get more requests with a paid plan
- Optimize: Cache results for repeated email checks
Check your usage: GET /usage?key=your_api_key
API requests are timing out
Timeouts are rare but can happen. Try:
- Use a closer endpoint: EU, US, or Asia based on your location
- Check status: Visit status page for outages
- Increase timeout: Set at least 5 seconds
- Retry logic: Implement exponential backoff
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
session = requests.Session()
retries = Retry(total=3, backoff_factor=0.5)
session.mount('https://', HTTPAdapter(max_retries=retries))
A legitimate email is being flagged as disposable
This is rare but can happen. Please report it:
- Email support@tempmailchecker.com
- Include the domain being flagged
- Explain why it's legitimate
We'll investigate and whitelist if appropriate (usually within 48 hours).
How do I get help with an issue?
Multiple ways to reach us:
- π§ Email: support@tempmailchecker.com
- π¬ Contact form: Contact page
- π GitHub: Open an issue
We typically respond within 24 hours on business days.
Still have questions?
Can't find what you're looking for? Our team is here to help you integrate and scale.