Introduction
Temp-Mail.org is one of the oldest names in disposable email. Millions of users have used it to shield their real inboxes from spam, and its RapidAPI integration introduced a generation of developers to the concept of programmatic temp mail. If you discovered disposable email APIs in 2018–2022, there is a reasonable chance Temp-Mail.org was your first.
But the API has not kept pace with what modern development workflows actually require. It distributes through RapidAPI rather than owning its developer experience. Its authentication model is built on MD5 hashes — a design that dates back to an era before security-conscious API design was standard. There is no WebSocket push, no long-polling, no OTP extraction, no official SDK, no CLI, no webhook support, and no MCP interface for AI agents. Every request returns a raw email body that you parse yourself.
FreeCustom.Email is the modern replacement: official JavaScript and Python SDKs with TypeScript types, built-in OTP and magic link extraction, server-side long-polling, WebSocket delivery in under 200ms, and a free tier that covers real CI/CD workloads — all accessible via a native developer experience that doesn't route through a third-party API marketplace.
This guide gives you the complete comparison — technically honest, with working code you can use today.
How Temp-Mail.org's API Actually Works
Understanding Temp-Mail.org's API design reveals why it creates problems in automated testing contexts.
MD5-Based Inbox Addressing
Temp-Mail.org does not have an inbox registration step. Instead, you identify a mailbox by computing the MD5 hash of the email address and passing that hash in your API request.
To check the inbox for mytest@example.com, you would:
MD5-hash the string
mytest@example.com→a1b2c3d4e5f6...Call
GET /request/mail/id/a1b2c3d4e5f6.../format/json/
This has a significant security implication: the MD5 hash of any email address is trivially computable by anyone who knows the address. If your test email address is known or guessable, another client can read your test inbox without any authentication credential.
Polling-Only Architecture
There is no WebSocket. There is no long-poll. You call the messages endpoint in a loop until an email appears.
RapidAPI Dependency
The API is hosted and monetized through RapidAPI. Your API key is a RapidAPI key, not a Temp-Mail.org key. This means an additional dependency in your stack, RapidAPI's rate limiting layer on top of the API's own limits, and RapidAPI's pricing structure (which adds a margin on top of what the API provider charges).
No Official SDK
There is no official JavaScript, Python, or any other language SDK. Every integration is raw HTTP calls.
Temp-Mail.org API: Endpoint Reference
The full endpoint surface is small:
Endpoint | Method | Description |
|---|---|---|
| GET | List available domains |
| GET | List messages for inbox (MD5 of email) |
| GET | Get single message body |
| GET | Delete a message |
| GET | Get message attachments |
Notable absences: no inbox creation, no wait endpoint, no OTP endpoint, no webhook registration, no custom domain management.
The MD5 Problem in Practice
Here is what a basic Temp-Mail.org integration looks like:
// Temp-Mail.org — raw HTTP, MD5, polling loop, manual OTP parse
const crypto = require('crypto');
const RAPIDAPI_KEY = process.env.RAPIDAPI_KEY;
function md5(str) {
return crypto.createHash('md5').update(str).digest('hex');
}
async function getMessages(email) {
const hash = md5(email);
const res = await fetch(
`https://privatix-temp-mail-v1.p.rapidapi.com/request/mail/id/${hash}/`,
{
headers: {
'x-rapidapi-key': RAPIDAPI_KEY,
'x-rapidapi-host': 'privatix-temp-mail-v1.p.rapidapi.com',
},
}
);
return res.json();
}
async function waitForOtp(email, maxAttempts = 20, intervalMs = 3000) {
for (let i = 0; i < maxAttempts; i++) {
const messages = await getMessages(email);
// Error response when no emails present
if (messages.error) {
await new Promise(r => setTimeout(r, intervalMs));
continue;
}
// Manual OTP extraction from raw text body
for (const msg of messages) {
const body = msg.mail_text || '';
const match = body.match(/\b(\d{6})\b/);
if (match) return match[1];
}
await new Promise(r => setTimeout(r, intervalMs));
}
throw new Error('OTP not found after maximum attempts');
}
// Usage
const testEmail = 'mytest@a-domain-from-their-list.com';
// Note: NO inbox registration — anyone who knows this email can read it
const otp = await waitForOtp(testEmail);Problems with this code:
MD5 is computed client-side — the inbox has zero access control
Polling loop burns API quota on every iteration, including empty responses
Regex extracts the OTP — breaks when email template changes
messages.erroras the empty-inbox signal is fragile — error structure variesNo typed exceptions — failures are silent or produce confusing errors
20 × 3s = 60-second maximum wait before your test silently fails
FreeCustom.Email: The Modern Replacement
The same test flow with FreeCustom.Email and the official SDK:
// FreeCustom.Email — official SDK, typed, auto-extracted OTP
import { FreecustomEmailClient } from 'freecustom-email';
const client = new FreecustomEmailClient({
apiKey: process.env.FCE_API_KEY!, // fce_...
timeout: 10_000,
retry: { attempts: 2, initialDelayMs: 500 },
});
const otp = await client.getOtpForInbox(
'mytest@ditapi.info',
async () => {
// Your app sends the OTP email here
await fetch('https://yourapp.com/api/signup', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email: 'mytest@ditapi.info' }),
});
},
{
timeoutMs: 30_000,
autoUnregister: true,
},
);
console.log('OTP:', otp); // '847291' — no MD5, no regex, no loopPython equivalent:
import asyncio, os, httpx
from freecustom_email import FreeCustomEmail
client = FreeCustomEmail(api_key=os.environ["FCE_API_KEY"])
async def send_signup_email():
async with httpx.AsyncClient() as http:
await http.post(
"https://yourapp.com/api/signup",
json={"email": "mytest@ditapi.info"},
)
async def main():
otp = await client.get_otp_for_inbox(
inbox="mytest@ditapi.info",
trigger_fn=send_signup_email,
timeout_ms=30_000,
auto_unregister=True,
)
print(f"OTP: {otp}") # '847291'
asyncio.run(main())No MD5. No polling loop. No regex. No RapidAPI dependency. Typed exceptions on failure.
Installation
JavaScript / TypeScript (Node.js 18+, Deno, Bun)
npm install freecustom-email
# or: pnpm add freecustom-email
# or: yarn add freecustom-emailPython (3.9+, async + sync modes)
pip install freecustom-emailCLI
npm install -g fcemail
# or: brew install fceSide-by-Side API Comparison
Getting Available Domains
Temp-Mail.org (RapidAPI):
// Raw HTTP — no SDK, RapidAPI headers required
const res = await fetch(
'https://privatix-temp-mail-v1.p.rapidapi.com/request/domains/',
{
headers: {
'x-rapidapi-key': process.env.RAPIDAPI_KEY,
'x-rapidapi-host': 'privatix-temp-mail-v1.p.rapidapi.com',
},
}
);
const domains = await res.json();
// ['@domain1.com', '@domain2.com', ...]FreeCustom.Email SDK:
// Official SDK — typed response, no middleware layer
const domains = await client.domains.list();
// [{ domain: 'ditapi.info', tier: 'free', tags: ['popular'] }, ...]
const withExpiry = await client.domains.listWithExpiry();
for (const d of withExpiry) {
if (d.expiring_soon) {
console.warn(`${d.domain} expires in ${d.expires_in_days} days`);
}
}# Python SDK
domains = await client.domains.list()
all_domains = await client.domains.list_with_expiry()
for d in all_domains:
if d.expiring_soon:
print(f"Warning: {d.domain} expires in {d.expires_in_days} days")See platform domains documentation.
Reading Messages
Temp-Mail.org:
// MD5 hash required — anyone with the email address can do this
const crypto = require('crypto');
const hash = crypto.createHash('md5').update('mytest@domain.com').digest('hex');
const res = await fetch(
`https://privatix-temp-mail-v1.p.rapidapi.com/request/mail/id/${hash}/`,
{
headers: {
'x-rapidapi-key': RAPIDAPI_KEY,
'x-rapidapi-host': 'privatix-temp-mail-v1.p.rapidapi.com',
},
}
);
const data = await res.json();
// If no emails: { "error": "There are no emails yet" }
// If emails: array of message objectsFreeCustom.Email SDK:
// Private inbox — only your API key can read it
const messages = await client.messages.list('mytest@ditapi.info');
// Typed array of Message objects
// Get specific message with full body
const msg = await client.messages.get('mytest@ditapi.info', 'D3vt8NnEQ');
console.log(msg.subject, msg.otp, msg.verificationLink);# Python SDK
messages = await client.messages.list("mytest@ditapi.info")
for msg in messages:
print(msg.subject, msg.otp, msg.verification_link)
print(msg.from_) # 'from_' to avoid Python keyword conflictWaiting for Email
Temp-Mail.org — client-side polling loop:
async function pollForEmail(email, maxWaitMs = 30000, intervalMs = 3000) {
const hash = crypto.createHash('md5').update(email).digest('hex');
const deadline = Date.now() + maxWaitMs;
while (Date.now() < deadline) {
const res = await fetch(
`https://privatix-temp-mail-v1.p.rapidapi.com/request/mail/id/${hash}/`,
{ headers: { 'x-rapidapi-key': RAPIDAPI_KEY, 'x-rapidapi-host': '...' } }
);
const data = await res.json();
if (!data.error && Array.isArray(data) && data.length > 0) {
return data[0]; // First email found
}
await new Promise(r => setTimeout(r, intervalMs));
// Each empty poll consumes a RapidAPI request from your quota
}
throw new Error('No email received');
}FreeCustom.Email SDK — server-side long-poll:
// Single call — server holds connection until email arrives
const msg = await client.messages.waitFor('mytest@ditapi.info', {
timeoutMs: 30_000,
pollIntervalMs: 2_000,
match: m => m.from.includes('noreply@yourapp.com'), // optional filter
});
console.log('OTP:', msg.otp); // auto-extracted (Growth+)
console.log('Link:', msg.verificationLink);# Python SDK — server-side long-poll with optional filter
msg = await client.messages.wait_for(
"mytest@ditapi.info",
timeout_ms=30_000,
poll_interval_ms=2_000,
match=lambda m: "noreply" in m.from_,
)
print(f"OTP: {msg.otp}")
print(f"Link: {msg.verification_link}")Complete Feature Comparison
Feature | FreeCustom.Email | Temp-Mail.org |
|---|---|---|
Free plan | ✅ 5,000 req/mo | ✅ (limited via RapidAPI) |
Starting paid price | $7/mo (direct) | RapidAPI tiers (add platform margin) |
Native API | ✅ Direct | ❌ Via RapidAPI only |
Inbox privacy | ✅ Auth-gated | ❌ MD5-addressable (no auth) |
Inbox registration | ✅ (1 API call) | ❌ (zero-setup, zero security) |
OTP auto-extraction | ✅ Growth+ | ❌ |
Magic link extraction | ✅ Growth+ | ❌ |
Long-polling | ✅ Developer+ | ❌ |
WebSocket push | ✅ Startup+ | ❌ |
Webhooks | ✅ Growth+ | ❌ |
Custom domains | ✅ Growth+ | ❌ |
Official JS/TS SDK | ✅ (ESM+CJS, types) | ❌ |
Official Python SDK | ✅ (async+sync) | ❌ |
CLI tool | ✅ | ❌ |
MCP / AI agents | ✅ Growth+ | ❌ |
Message retention | 10h–24h+ (plan-based) | 1–2 hours |
Typed error handling | ✅ | ❌ (varies by response) |
Per-request pricing | ✅ transparent | ✅ (RapidAPI tier) |
Parallel worker safety | ✅ private inboxes | ❌ shared MD5 space |
Security: The MD5 Inbox Problem at Scale
The MD5-addressing model is worth examining carefully in the context of automated testing.
In a typical QA pipeline, you generate test email addresses programmatically — often with patterns like qa-{timestamp}@domain.com or test-{userid}@domain.com. The reasoning is that unique addresses prevent inbox collision.
With Temp-Mail.org, uniqueness does not imply privacy. The MD5 hash of any email address is deterministic and computable by anyone. If your CI environment logs test email addresses (as most do), and your logs are accessible to your wider team, those email addresses — and therefore those inbox contents — are readable without authentication.
In contrast, FreeCustom.Email inboxes are private to your API key. Even if a test email address is logged or shared, no one else can read the inbox without your API key. This is the correct security model for test infrastructure that handles tokens, OTPs, and verification links.
The RapidAPI Layer: What It Means for Your Stack
Routing through RapidAPI adds complexity that is often invisible until it causes problems:
Rate limiting is applied twice: RapidAPI enforces its own rate limits on top of the API provider's limits. A burst of test requests in a CI job can hit RapidAPI's per-second throttling before reaching the API's own limits.
Billing is opaque: Your invoice comes from RapidAPI, not Temp-Mail.org. Understanding exactly how many requests each API call consumed requires navigating RapidAPI's analytics dashboard.
Key rotation complexity: Rotating your API key means rotating a RapidAPI key and updating all services that depend on it — the process varies by RapidAPI plan.
Outage chain: If RapidAPI has an outage, your tests fail even if Temp-Mail.org's servers are operational.
FreeCustom.Email authenticates directly with Authorization: Bearer fce_... — no middleware layer, no additional dependency.
WebSocket: Real-Time Email That Temp-Mail.org Can't Do
Temp-Mail.org has no WebSocket interface. FreeCustom.Email's SDK delivers emails in under 200ms with auto-reconnect (Startup+ plans):
// JavaScript SDK
const ws = client.realtime({
mailbox: 'mytest@ditapi.info',
autoReconnect: true,
reconnectDelayMs: 3_000,
maxReconnectAttempts: 10,
pingIntervalMs: 30_000,
});
ws.on('connected', info => console.log('Plan:', info.plan));
ws.on('email', email => {
console.log('OTP:', email.otp); // auto-extracted (Growth+)
console.log('Link:', email.verificationLink);
console.log('From:', email.from);
});
ws.on('reconnecting', ({ attempt, maxAttempts }) =>
console.log(`Reconnecting ${attempt}/${maxAttempts}...`)
);
ws.on('error', err => {
if (err.upgrade_url) console.log('Upgrade at:', err.upgrade_url);
});
await ws.connect();
// ws.disconnect() when done# Python SDK
ws = client.realtime(
mailbox="mytest@ditapi.info",
auto_reconnect=True,
reconnect_delay=3.0,
max_reconnect_attempts=10,
ping_interval=30.0,
)
@ws.on("connected")
async def on_connect(info):
print(f"Plan: {info.plan}")
@ws.on("email")
async def on_email(email):
print(f"OTP: {email.otp}")
print(f"Link: {email.verification_link}")
await ws.connect()
await ws.wait() # Block until disconnectedCLI: No Equivalent in Temp-Mail.org
FreeCustom.Email is the only disposable email platform with an official CLI. This enables shell-based and CI-native OTP workflows that Temp-Mail.org simply cannot support:
# Authenticate once
fce auth login
# Create an inbox
fce inbox create --domain ditapi.info
# Watch inbox in real-time — emails print as they arrive
fce watch mytest@ditapi.info
# Extract OTP to stdout — ideal for shell scripting
OTP=$(fce otp mytest@ditapi.info)
echo "Got OTP: $OTP"
# Full CI step
- name: Retrieve signup OTP
env:
FCE_API_KEY: ${{ secrets.FCE_API_KEY }}
run: |
OTP=$(fce otp ${{ env.TEST_EMAIL }})
echo "TEST_OTP=$OTP" >> $GITHUB_ENVSee CLI documentation and CLI authentication documentation.
MCP: AI Agent Integration (Growth+ plans)
Temp-Mail.org has no MCP interface. FreeCustom.Email's MCP server enables AI agents to handle email verification autonomously — one tool call for the entire OTP flow:
Claude Desktop config:
{
"mcpServers": {
"fce-mcp": {
"command": "npx",
"args": ["-y", "fce-mcp-server"],
"env": {
"FCE_API_KEY": "your_growth_or_enterprise_key"
}
}
}
}Claude Web: Settings → Integrations → Add Custom Connector → URL: https://mcp.freecustom.email/mcp
Available MCP tools:
Tool | Purpose | Cost |
|---|---|---|
| Full OTP flow in one call | 5× |
| Get OTP from existing inbox | 3× |
| Long-poll for next email | 10× |
| Fetch most recent message | 2× |
| List messages | 1× |
See MCP documentation and AI agent use case.
Playwright: Complete Working Test
Replacing a Temp-Mail.org polling loop with a FreeCustom.Email SDK integration in Playwright:
// tests/signup.spec.ts
import { test, expect } from '@playwright/test';
import { FreecustomEmailClient, TimeoutError, PlanError } from 'freecustom-email';
const client = new FreecustomEmailClient({
apiKey: process.env.FCE_API_KEY!,
retry: { attempts: 2, initialDelayMs: 500 },
});
test.describe('OTP signup', () => {
let email: string;
test.beforeEach(async ({}, testInfo) => {
// Unique per worker — safe for parallel runs
email = `qa-w${testInfo.workerIndex}-${Date.now()}@ditapi.info`;
await client.inboxes.register(email);
});
test.afterEach(async () => {
await client.inboxes.unregister(email);
});
test('signup and verify OTP', async ({ page }) => {
await page.goto('/signup');
await page.fill('[data-testid="email"]', email);
await page.fill('[data-testid="password"]', 'SecurePass@2026!');
await page.click('[data-testid="signup-btn"]');
await expect(page.locator('[data-testid="otp-screen"]')).toBeVisible({ timeout: 5000 });
// Server-side long-poll — no loop, no MD5, no regex
const otp = await client.otp.waitFor(email, {
timeoutMs: 30_000,
pollIntervalMs: 2_000,
});
expect(otp).toMatch(/^\d{4,8}$/);
await page.fill('[data-testid="otp-input"]', otp);
await page.click('[data-testid="verify-btn"]');
await expect(page).toHaveURL(/\/dashboard/);
});
});See Playwright & Selenium use case.
Error Handling: Typed vs Untyped
Temp-Mail.org error handling:
// Inconsistent — errors come as properties on the response body
const data = await res.json();
if (data.error) {
// data.error might be a string, might be an object, might not exist
console.error('Error:', data.error);
}
// No typed exceptions, no retryAfter, no upgradeUrlFreeCustom.Email SDK — typed exceptions:
import {
AuthError, PlanError, RateLimitError, TimeoutError, FreecustomEmailError
} from 'freecustom-email';
try {
const otp = await client.otp.waitFor('mytest@ditapi.info', { timeoutMs: 30_000 });
} catch (err) {
if (err instanceof AuthError) {
console.error('Invalid or revoked API key');
} else if (err instanceof PlanError) {
console.error('Plan too low:', err.message);
if (err.upgradeUrl) console.log(err.upgradeUrl);
} else if (err instanceof RateLimitError) {
console.error(`Rate limited. Retry after ${err.retryAfter}s`);
} else if (err instanceof TimeoutError) {
console.error('No OTP received within 30 seconds');
} else if (err instanceof FreecustomEmailError) {
console.error(`[${err.status}] ${err.code}: ${err.message}`);
}
}from freecustom_email.errors import (
AuthError, PlanError, RateLimitError, WaitTimeoutError, FreecustomEmailError
)
try:
otp = await client.otp.wait_for("mytest@ditapi.info", timeout_ms=30_000)
except WaitTimeoutError as e:
print(f"No OTP in {e.timeout_ms}ms for {e.inbox}")
except PlanError as e:
print(f"Upgrade required. Upgrade at: {e.upgrade_url}")
except RateLimitError as e:
print(f"Rate limited. Retry after {e.retry_after}s")
except AuthError:
print("Invalid API key")See errors documentation.
Account and Usage Monitoring
// JavaScript SDK
const info = await client.account.info();
console.log(info.plan, info.credits, info.api_inbox_count);
console.log('OTP extraction:', info.features?.otp_extraction);
console.log('WebSocket:', info.features?.websocket);
const usage = await client.account.usage();
console.log(`${usage.requests_used} / ${usage.requests_limit} requests used`);
console.log('Resets at:', usage.resets);# Python SDK
info = await client.account.info()
print(info.plan, info.credits, info.api_inbox_count)
print(f"OTP extraction: {info.features.otp_extraction}")
usage = await client.account.usage()
print(f"{usage.requests_used} / {usage.requests_limit} used")
print(f"Resets: {usage.resets}")Pricing: Direct vs RapidAPI
FreeCustom.Email charges you directly at published, transparent prices:
Plan | Price/mo | Requests/mo | OTP Extract | WebSocket | Long-Poll |
|---|---|---|---|---|---|
Free | $0 | 5,000 | — | — | — |
Developer | $7 | 100,000 | — | — | ✅ |
Startup | $19 | 500,000 | — | ✅ 5 conn | ✅ |
Growth | $49 | 2,000,000 | ✅ | ✅ | ✅ |
Enterprise | $149 | 10,000,000 | ✅ | ✅ 100 conn | ✅ |
Temp-Mail.org's pricing is set by RapidAPI's tier structure, which adds its own margin. Billing, quota, and rate limiting are all managed by a third party rather than by the API you are actually depending on.
See API pricing.
Migrating from Temp-Mail.org: What to Change
If you have an existing Temp-Mail.org integration, migration typically involves four changes:
1. Replace RapidAPI key with FCE API key
# Old
RAPIDAPI_KEY=your_rapidapi_key
# New
FCE_API_KEY=fce_your_key_here2. Add inbox registration (one call)
await client.inboxes.register('mytest@ditapi.info');3. Replace polling loop with waitFor
// Old: while loop, MD5, empty poll handling
// New: one call
const msg = await client.messages.waitFor('mytest@ditapi.info', { timeoutMs: 30_000 });4. Remove manual OTP parsing
// Old: msg.mail_text.match(/\b(\d{6})\b/)[1]
// New (Growth+): msg.otpThe quickstart guide walks through a complete integration from scratch.
FAQ
Q: Does FreeCustom.Email require RapidAPI? No. The API is native — authenticate with Authorization: Bearer fce_... directly. No third-party marketplace dependency.
Q: Is the MD5 inbox model actually a security risk in practice? For production apps using real user data in test emails, yes. For throwaway test data where security is irrelevant, it is less of a concern. For any test that handles tokens, OTPs, or verification links, it is a real risk.
Q: What is the Node.js version requirement for the SDK? Node.js 18+. ESM and CJS builds included. Also works with Deno and Bun. See JS SDK documentation.
Q: Does the Python SDK support Django (synchronous)? Yes — FreeCustomEmail(api_key="...", sync=True) gives synchronous operation with no asyncio required. See Python SDK documentation.
Q: What is the message retention period? 10 hours on the Free plan, 24 hours on Developer, and longer on higher plans depending on account settings. Temp-Mail.org deletes messages in 1–2 hours.
Q: Can I use my own domain for test inboxes? Yes on Growth+ plans. See custom domains documentation.
Q: Are there integrations for no-code automation? Yes — Zapier, n8n, Make.com, and OpenClaw.
Q: Is there a changelog for API updates? Yes — see the API changelog.
Q: Where can I find the full API FAQ? See API FAQ documentation.
Conclusion
Temp-Mail.org was an important tool in its era, and its RapidAPI distribution made disposable email accessible to developers who might not have found it otherwise. But its architecture — MD5-based addressing with no real inbox security, polling-only delivery, no OTP extraction, no official SDK, no CLI, and an external API marketplace dependency — reflects design decisions from a different generation of API development.
In 2026, the requirements are different: private isolated inboxes, automatic OTP and magic link extraction, real-time WebSocket delivery, official typed SDKs, a CLI for shell scripting, and MCP support for the growing category of AI agent workflows. FreeCustom.Email was built with all of these as first-class requirements.
The free plan is a genuine starting point. The $7/month Developer tier covers serious CI workloads. The Growth plan at $49/month unlocks the full feature set — OTP extraction, webhooks, custom domains, and MCP.
→ Get started free at FreeCustom.Email → npm install freecustom-email → pip install freecustom-email → Read the Quickstart guide → Compare all pricing plans → Try the API Playground
Written by
Dishant Singh
A full stack developer with good knowledge of email server, SEO, proxies, and networking, have more than 3 years of experience in building webapps for the netizens. Developing open source, fast, and free SaaS for all.
Frequently Asked Questions
Q: Does FreeCustom.Email require RapidAPI?+
No. The API is native — authenticate with Authorization: Bearer fce_... directly. No third-party marketplace dependency.
Q: Is the MD5 inbox model actually a security risk in practice?+
For production apps using real user data in test emails, yes. For throwaway test data where security is irrelevant, it is less of a concern. For any test that handles tokens, OTPs, or verification links, it is a real risk.
Q: What is the Node.js version requirement for the SDK?+
Node.js 18+. ESM and CJS builds included. Also works with Deno and Bun. See JS SDK documentation.
Q: Does the Python SDK support Django (synchronous)?+
Yes — FreeCustomEmail(api_key="...", sync=True) gives synchronous operation with no asyncio required. See Python SDK documentation.
Q: What is the message retention period?+
10 hours on the Free plan, 24 hours on Developer, and longer on higher plans depending on account settings. Temp-Mail.org deletes messages in 1–2 hours.
Q: Can I use my own domain for test inboxes?+
Yes on Growth+ plans. See custom domains documentation.
Q: Are there integrations for no-code automation?+
Yes — Zapier, n8n, Make.com, and OpenClaw.
Q: Is there a changelog for API updates?+
Yes — see the API changelog.
Q: Where can I find the full API FAQ?+
See API FAQ documentation.
No comments yet. Be the first to share your thoughts.