Why Developers Need a Dedicated Temp Mail API in 2026
Email is still at the center of nearly every application authentication flow — sign-up confirmations, OTP delivery, password resets, trial activations. Testing these flows correctly requires real inboxes with real delivery behavior. And doing it at any meaningful scale requires programmatic access, not manual browser sessions.
That's the core problem a temp mail API solves: programmatic creation and management of disposable email inboxes, so your tests, automation workflows, and QA pipelines can run end-to-end without touching real user accounts or polluting production data.
But not all temp mail APIs are built the same. Some are scrappy community tools with no SLA and a single free tier. Others are enterprise testing platforms with pricing that starts at hundreds of dollars per month. The right choice depends entirely on what you're building and how much control you need over the inbox lifecycle.
This guide covers everything: the full FreeCustom.Email API v2.0 — every endpoint, authentication model, WebSocket spec, and OTP extraction feature — followed by a deep, honest comparison against every major competitor available in 2026.
Start building with the FreeCustom.Email API →
FreeCustom.Email API v2.0: What It Is and Who It's For
The FreeCustom.Email API is a RESTful + WebSocket interface for programmatic disposable email infrastructure. It gives developers full lifecycle control over temporary inboxes: register them, receive messages in real time, read full content including HTML and attachments, extract OTPs automatically, and delete messages when done.
Base URL: https://api2.freecustom.email
API version: 2.0.0 (updated March 2026)
Auth model: Bearer token — all authenticated routes require Authorization: Bearer fce_<your_key> in the request header. Keys are prefixed fce_ for easy identification.
The API is organized into four functional areas:
Account — Plan info, feature flags, live usage stats
Inboxes — Register, list, and unregister inboxes
Messages — List, read (with full HTML/text/attachments), and delete messages
OTP — Dedicated OTP and verification link extraction endpoint
Complete API Endpoint Reference
Account Endpoints
GET /v1/me — Get Account Info
Returns the authenticated developer's full account state: current plan, credit balance, feature flags enabled on the plan, and active rate limits.
curl https://api2.freecustom.email/v1/me \
-H "Authorization: Bearer fce_your_api_key"Response example:
{
"success": true,
"data": {
"plan": "startup",
"credits": 25000,
"features": {
"otp_extraction": true,
"attachments": true,
"max_attachment_size_mb": 10,
"custom_domains": false,
"websocket": true,
"max_ws_connections": 5
},
"rate_limits": {
"requests_per_second": 25,
"requests_per_month": 500000
},
"inboxes_registered": 12
}
}Response headers expose live rate limit state for every request:
X-RateLimit-Limit-Second/X-RateLimit-Remaining-SecondX-RateLimit-Limit-Month/X-RateLimit-Remaining-Month
This per-response header approach means you can build adaptive throttling into your application without a separate usage poll.
GET /v1/usage — Get Live Usage Stats
Returns current billing period usage with percentage consumed — perfect for dashboards, alerting, or dynamic throttling logic.
curl https://api2.freecustom.email/v1/usage \
-H "Authorization: Bearer fce_your_api_key"Response includes:
Plan name and billing period
Requests used / limit / remaining / percent_used
Credit balance with notes
Per-second rate limit currently active
GET /v1/plans — List Plans and Credit Packages (public, no auth)
The only public endpoint — no API key required. Returns all available plans, their feature sets, rate limits, and available credit top-up packages. Useful for building pricing pages, upgrade prompts, or self-service plan comparison tools.
curl https://api2.freecustom.email/v1/plansInbox Management Endpoints
POST /v1/inboxes — Register an Inbox
Registers a specific email address as an API-managed inbox. Once registered, the API will track and serve incoming messages for that address.
curl -X POST https://api2.freecustom.email/v1/inboxes \
-H "Authorization: Bearer fce_your_api_key" \
-H "Content-Type: application/json" \
-d '{"inbox": "qa-test-march@ditapi.info"}'Response (201 Created):
{
"success": true,
"data": {
"inbox": "qa-test-march@ditapi.info",
"registered_at": "2026-03-05T10:23:11Z"
}
}Important notes:
Custom domain inboxes require Growth plan or higher and prior domain verification
Registering an already-registered inbox returns
409 already_registeredInvalid addresses return
400 invalid_inboxPlan restrictions return
403 plan_restrictionwith anupgrade_url
GET /v1/inboxes — List Registered Inboxes
Returns all inboxes currently registered under your API key, with a count.
curl https://api2.freecustom.email/v1/inboxes \
-H "Authorization: Bearer fce_your_api_key"DELETE /v1/inboxes/{inbox} — Unregister an Inbox
Removes an inbox from your account. The address must be URL-encoded (e.g., qa-test%40ditapi.info).
curl -X DELETE \
"https://api2.freecustom.email/v1/inboxes/qa-test%40ditapi.info" \
-H "Authorization: Bearer fce_your_api_key"Message Endpoints
GET /v1/inboxes/{inbox}/messages — List Messages
Returns the message list for a registered inbox with cursor-based pagination.
curl "https://api2.freecustom.email/v1/inboxes/qa-test%40ditapi.info/messages?limit=20" \
-H "Authorization: Bearer fce_your_api_key"Query parameters:
Param | Type | Default | Description |
|---|---|---|---|
| integer | 20 | Max messages to return (max 100) |
| string | — | Message ID — returns messages older than this (cursor pagination) |
Message summary object includes:
{
"id": "msg_abc123",
"from": "noreply@someservice.com",
"subject": "Verify your email",
"date": "2026-03-05T10:25:00Z",
"has_attachment": false,
"otp": "482910",
"verification_link": "https://app.example.com/verify?token=xyz"
}Note: On free plan, otp returns __DETECTED__ (indicating an OTP is present) rather than the actual value. Full extraction requires Developer plan or higher.
GET /v1/inboxes/{inbox}/messages/{id} — Get Full Message
Returns complete message detail including full HTML body, plain text, extracted OTP, verification link, and attachment metadata.
curl "https://api2.freecustom.email/v1/inboxes/qa-test%40ditapi.info/messages/msg_abc123" \
-H "Authorization: Bearer fce_your_api_key"Response data includes:
{
"id": "msg_abc123",
"from": "noreply@someservice.com",
"to": "qa-test@ditapi.info",
"subject": "Verify your email",
"date": "2026-03-05T10:25:00Z",
"html": "<html>...full email HTML...</html>",
"text": "Your verification code is 482910",
"otp": "482910",
"verification_link": "https://app.example.com/verify?token=xyz",
"has_attachment": true,
"attachments": [
{
"filename": "welcome.pdf",
"content_type": "application/pdf",
"size_bytes": 48320
}
]
}This is the richest endpoint in the API — full HTML rendering, automatic OTP extraction, automatic verification link detection, and complete attachment metadata in a single call.
DELETE /v1/inboxes/{inbox}/messages/{id} — Delete a Message
Removes a specific message from an inbox.
curl -X DELETE \
"https://api2.freecustom.email/v1/inboxes/qa-test%40ditapi.info/messages/msg_abc123" \
-H "Authorization: Bearer fce_your_api_key"OTP Endpoint (Developer Plan+)
GET /v1/inboxes/{inbox}/otp — Get Latest OTP
The most developer-focused endpoint in the API. Returns the extracted OTP code and verification link from the most recently received message that contains one — in a single, clean call.
curl "https://api2.freecustom.email/v1/inboxes/qa-test%40ditapi.info/otp" \
-H "Authorization: Bearer fce_your_api_key"Response:
{
"success": true,
"data": {
"inbox": "qa-test@ditapi.info",
"otp": "482910",
"verification_link": "https://app.example.com/verify?token=xyz",
"from": "noreply@someservice.com",
"subject": "Verify your email",
"message_id": "msg_abc123",
"received_at": "2026-03-05T10:25:00Z",
"message": null
}
}If no OTP has arrived yet, all fields return null — making it easy to poll this endpoint in a test loop until the code appears. This endpoint eliminates the need to fetch, parse, and regex-search message content in your test code. The extraction is done server-side, and you get a clean structured response.
Real-Time Email with WebSockets
One of FreeCustom.Email API v2.0's most powerful features is its WebSocket push interface, available on Startup plan and above. Instead of polling the message list endpoint repeatedly — which adds latency, burns through rate limits, and complicates test orchestration — you subscribe to a WebSocket connection and receive new emails the moment they arrive.
WebSocket endpoint:
wss://api2.freecustom.email/v1/wsConnection parameters:
Query param | Required | Description |
|---|---|---|
| Yes | Your |
| No | Subscribe to a specific inbox; omit to receive events for all registered inboxes |
Connection example (Node.js):
const WebSocket = require('ws');
const ws = new WebSocket(
'wss://api2.freecustom.email/v1/ws?api_key=fce_your_key&mailbox=qa-test@ditapi.info'
);
ws.on('message', (data) => {
const event = JSON.parse(data);
if (event.type === 'new_message') {
console.log('New email received:', event.data.inbox);
console.log('OTP:', event.data.message.otp);
console.log('Verification link:', event.data.message.verification_link);
}
if (event.type === 'ping') {
ws.send(JSON.stringify({ type: 'pong' }));
}
});Server → Client Events
connected — Fires on successful connection. Includes:
Current plan
subscribed_to— which inbox(es) you're monitoringmax_connections— connection limit for your plancurrent_connections— connections currently open
new_message — Fires on every incoming email. Includes:
{
"type": "new_message",
"data": {
"inbox": "qa-test@ditapi.info",
"message": {
"id": "msg_abc123",
"from": "noreply@someservice.com",
"subject": "Verify your email",
"date": "2026-03-05T10:25:00Z",
"has_attachment": false,
"otp": "482910",
"verification_link": "https://app.example.com/verify?token=xyz"
}
}
}ping — Server heartbeat every 30 seconds. Respond with pong to keep the connection alive.
WebSocket Close Codes
Code | Meaning |
|---|---|
| Invalid or missing API key |
| Plan too low (WebSocket requires Startup+) |
| Inbox not registered to this account |
| Connection limit reached for your plan |
Authentication, Error Handling, and Rate Limits
Authentication
All authenticated routes use Bearer token authentication:
Authorization: Bearer fce_your_api_key_hereThe fce_ prefix makes API keys immediately identifiable in logs, configuration files, and secret scanning tools. Missing or invalid keys return 401 unauthorized. Revoked keys return 401 key_revoked.
Error Response Format
All errors follow a consistent structure:
{
"success": false,
"error": "rate_limit_exceeded",
"message": "You have exceeded your per-second rate limit.",
"upgrade_url": "https://www.freecustom.email/pricing",
"credits_url": "https://www.freecustom.email/credits",
"hint": "Consider upgrading to Startup for 25 req/s"
}Plan restriction errors (403) include an upgrade_url. Rate limit errors (429) include both an upgrade_url and a credits_url for purchasing additional credits, plus a Retry-After header indicating how long to wait.
Rate Limiting
The API enforces two independent rate limit dimensions:
Per-second limit — Burst protection. If exceeded, returns
429 rate_limit_exceeded. TheRetry-Afterheader tells you exactly how many seconds to wait.Monthly quota — Total requests in the billing period. If exceeded, returns
429 monthly_quota_exceeded. Resolvable by upgrading your plan or purchasing credit top-ups (no interruption to service).
Both limits are exposed in real-time via response headers on every request, making it straightforward to build adaptive rate management into any client.
Complete Integration Example: Automated Sign-Up Testing
Here's a full end-to-end test flow using the FreeCustom.Email API in Python — registering an inbox, triggering a sign-up, waiting for the OTP via WebSocket, and cleaning up:
import requests
import websocket
import json
import threading
API_KEY = "fce_your_api_key"
BASE_URL = "https://api2.freecustom.email/v1"
TEST_INBOX = "e2e-test-signup@ditapi.info"
HEADERS = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}
# Step 1: Register inbox
requests.post(f"{BASE_URL}/inboxes", headers=HEADERS, json={"inbox": TEST_INBOX})
# Step 2: Trigger sign-up in your app (using your test framework here)
# app.register_user(email=TEST_INBOX)
# Step 3: Wait for OTP via WebSocket
otp_received = threading.Event()
otp_code = {}
def on_message(ws, message):
event = json.loads(message)
if event.get("type") == "new_message":
otp = event["data"]["message"].get("otp")
if otp:
otp_code["value"] = otp
otp_received.set()
elif event.get("type") == "ping":
ws.send(json.dumps({"type": "pong"}))
ws = websocket.WebSocketApp(
f"wss://api2.freecustom.email/v1/ws?api_key={API_KEY}&mailbox={TEST_INBOX}",
on_message=on_message
)
thread = threading.Thread(target=ws.run_forever)
thread.start()
# Wait up to 30 seconds for OTP
otp_received.wait(timeout=30)
ws.close()
print(f"OTP received: {otp_code.get('value')}")
# Step 4: Complete verification in your app
# app.verify_otp(otp_code["value"])
# Step 5: Clean up
messages = requests.get(
f"{BASE_URL}/inboxes/{TEST_INBOX}/messages", headers=HEADERS
).json()
for msg in messages["data"]["messages"]:
requests.delete(
f"{BASE_URL}/inboxes/{TEST_INBOX}/messages/{msg['id']}", headers=HEADERS
)This pattern — register inbox, trigger action, receive via WebSocket, assert, clean up — maps cleanly onto Playwright, Cypress, Selenium, or any other test framework.
Deep Competitor Comparison: FreeCustom.Email API vs. Everyone Else (2026)
The temp mail API landscape in 2026 includes a mix of lightweight free tools, dedicated testing platforms, and enterprise testing suites. Here's a comprehensive, factual comparison.
Competitor Overview
Mail.tm API — A genuinely free, account-based temp mail API with no API key requirement, no paid tiers, and SSE for real-time delivery. The model requires creating a temporary "account" (with a password) for each inbox rather than a developer API key pattern. No OTP extraction, no custom domains, no attachment API, no SLA. Good for hobby projects and open-source tools. Not suitable for commercial or production use.
Temp-mail.org (via RapidAPI) — Available through RapidAPI's marketplace. Basic get-emails-by-hash functionality. No WebSocket, no OTP extraction, no inbox registration model. Pricing is marketplace-metered with limited transparency. The model is hash-based rather than address-based, which makes test orchestration less intuitive. Has a premium tier but capabilities are constrained.
Mailsac — An established disposable email platform that's been around for nearly a decade. Strong enterprise positioning with SAML SSO, team accounts, sub-accounts, and webhook forwarding. Supports WebSocket and REST. Focused primarily on the enterprise QA market with yearly billing models. Pricing is opaque without direct quotes for higher tiers. No native OTP extraction endpoint.
MailSlurp — A full email API that handles both sending and receiving — making it significantly more capable than a pure temp mail API, but also significantly more complex and expensive. Starts at approximately $19-23/month with paid tiers up to $430/month for enterprise. Has official SDKs in JavaScript, Python, PHP, Java, Go, Ruby, and more. No free tier for production use. Excellent for teams that need a complete email testing platform with SMTP, not just disposable receive-only inboxes.
Mailinator — An enterprise email and SMS testing platform. Private domain support, webhook delivery, message routing rules. Originally famous for its completely public inboxes (anyone can read anything@mailinator.com). Upgraded plans add private domains and API access. Pricing is enterprise-scale; not publicly listed. Includes SMS testing features that others don't.
Guerrilla Mail — Primarily a consumer browser tool with a basic API. No OTP extraction, no WebSocket, no custom domains. Mostly suitable for very simple integrations or manual testing workflows. Not built for production automation.
Feature Comparison Table
Feature | FreeCustom.Email API | Mail.tm | Mailsac | MailSlurp | Mailinator |
|---|---|---|---|---|---|
Auth model | Bearer | Per-inbox token (no global key) | API key | API key | API key |
REST API | ✅ Full | ✅ Basic | ✅ Full | ✅ Full (send+receive) | ✅ Full |
WebSocket / real-time push | ✅ (Startup+) | ✅ SSE | ✅ | ✅ | ✅ Webhook |
OTP auto-extraction | ✅ Dedicated endpoint | ❌ | ❌ | ❌ (manual parse) | ❌ |
Verification link extraction | ✅ Automatic | ❌ | ❌ | ❌ | ❌ |
Custom domains | ✅ (Growth+) | ❌ | ✅ | ✅ | ✅ |
Attachment support | ✅ (plan-based) | ❌ | ✅ | ✅ | ✅ |
Outbound sending | ❌ (receive-only) | ❌ | ❌ (receive) | ✅ | ❌ |
Cursor pagination | ✅ | ❌ | ✅ | ✅ | ✅ |
Free tier | ✅ (with OTP preview) | ✅ (fully free) | ✅ (limited) | ❌ (paid from ~$19/mo) | ❌ (enterprise) |
Pay-as-you-go credits | ✅ | ❌ | ❌ | ❌ | ❌ |
Rate limit headers on every response | ✅ | ❌ | ❌ | ❌ | ❌ |
Public plans endpoint (no auth) | ✅ | ❌ | ❌ | ❌ | ❌ |
Consistent error format | ✅ (all errors structured) | ⚠️ Partial | ✅ | ✅ | ✅ |
SAML SSO | ❌ | ❌ | ✅ Business+ | ✅ Team+ | ✅ |
SMS testing | ❌ | ❌ | ❌ | ✅ | ✅ |
OpenAPI / Swagger spec | ✅ (v3.1.0) | ✅ | ✅ | ✅ | ✅ |
Where FreeCustom.Email API Uniquely Wins
1. OTP extraction as a first-class API feature. No other temp mail API in this comparison offers a dedicated /otp endpoint that returns a structured {otp, verification_link, message_id, received_at} response from the most recent email containing a code. Every competitor requires you to fetch the raw message, parse the HTML or text body, and extract the code yourself — which means writing and maintaining regex patterns across different email templates from different senders. The OTP endpoint eliminates that entire category of test maintenance burden.
Additionally, even on the free plan, the message list endpoint signals "otp": "__DETECTED__" when an OTP is present — so free tier users know an OTP arrived even before upgrading to read it.
2. Rate limit transparency on every response. Knowing your current rate limit state without making a separate API call is a meaningful operational advantage for high-frequency automation workflows. Every response from the FreeCustom.Email API includes four rate limit headers: second-level limit and remaining, month-level limit and remaining. No other provider in this comparison exposes per-response rate limit state at both time dimensions simultaneously.
3. Pay-as-you-go credit top-ups. Monthly quota exceeded? Don't want to upgrade your entire plan? FreeCustom.Email is the only provider in this comparison with a credit purchase model — buy additional requests without changing your subscription tier. For teams with variable usage patterns (heavy QA sprints followed by quiet periods), this flexibility is practically significant.
4. Structured error responses with upgrade and credits URLs embedded. When you hit a plan restriction or rate limit, the error response itself tells you exactly where to go to fix it — with upgrade_url and credits_url fields embedded directly in the error JSON. This is a small detail but a meaningful DX (developer experience) improvement over raw HTTP 403/429 responses that require out-of-band documentation lookup.
5. Verification link extraction alongside OTP. The /otp endpoint and the message detail endpoint both return verification_link — a server-side extracted URL from the email body. For test flows involving email verification (click a link to confirm your account), this means you don't need to parse HTML or regex-search for URLs. The API gives you the link directly.
Where Competitors Win
Mail.tm wins on zero-cost access with no API key requirements — genuinely useful for open-source tools and community projects where infrastructure cost is a constraint. The trade-off is no SLA, no OTP features, no commercial terms, and a per-inbox auth model that's more complex to orchestrate at scale.
MailSlurp wins if you also need to send email — it's the only full SMTP-capable API in this comparison that handles both inbound and outbound at scale. For teams testing complex email flows that involve replies, forwarding, or outbound transactional triggers, MailSlurp's bidirectional capability is genuinely necessary. The cost and complexity premium is real, but so is the capability delta.
Mailsac wins for large enterprises that need SAML SSO, team management with role-based access, and the kind of procurement-friendly billing (PO-based, enterprise MSA) that large organizations require. If you're deploying into a Fortune 500 with a dedicated IT procurement process, Mailsac's enterprise tier structure is better aligned with those workflows.
Mailinator wins if you need SMS testing alongside email — it's the only provider in this comparison with native SMS inbox support, making it the right choice for teams testing multi-channel authentication (email + SMS OTP).
Pricing Comparison
Provider | Free Tier | Entry Paid Tier | Notes |
|---|---|---|---|
FreeCustom.Email | ✅ Yes (OTP preview, basic limits) | See pricing page | Credit top-ups available; no forced upgrade |
Mail.tm | ✅ Fully free | No paid tier | No SLA, community project |
Mailsac | ✅ Limited free | Business/Enterprise (annual billing) | Pricing not public; contact sales |
MailSlurp | ❌ No free tier | ~$19–23/month (Starter) | Paid from day one; no free production use |
Mailinator | ❌ No | Enterprise pricing | Not publicly listed; contact sales |
Practical Integration Patterns
CI/CD Pipeline Integration (GitHub Actions)
# .github/workflows/email-test.yml
name: Email Flow Tests
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run email verification tests
env:
FCE_API_KEY: ${{ secrets.FCE_API_KEY }}
TEST_INBOX: "ci-test-${{ github.run_id }}@ditapi.info"
run: |
# Register inbox
curl -X POST https://api2.freecustom.email/v1/inboxes \
-H "Authorization: Bearer $FCE_API_KEY" \
-H "Content-Type: application/json" \
-d "{\"inbox\": \"$TEST_INBOX\"}"
# Run your test suite
npm test -- --email $TEST_INBOX
# Cleanup: unregister inbox
ENCODED=$(python3 -c "import urllib.parse; print(urllib.parse.quote('$TEST_INBOX'))")
curl -X DELETE "https://api2.freecustom.email/v1/inboxes/$ENCODED" \
-H "Authorization: Bearer $FCE_API_KEY"Playwright Test Integration
// tests/signup.spec.ts
import { test, expect } from '@playwright/test';
const API_KEY = process.env.FCE_API_KEY!;
const BASE = 'https://api2.freecustom.email/v1';
const INBOX = `playwright-${Date.now()}@ditdrive.info`;
async function registerInbox() {
await fetch(`${BASE}/inboxes`, {
method: 'POST',
headers: {
Authorization: `Bearer ${API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ inbox: INBOX }),
});
}
async function waitForOtp(maxWaitMs = 30000): Promise<string> {
const deadline = Date.now() + maxWaitMs;
while (Date.now() < deadline) {
const res = await fetch(`${BASE}/inboxes/${encodeURIComponent(INBOX)}/otp`, {
headers: { Authorization: `Bearer ${API_KEY}` },
});
const data = await res.json();
if (data.data?.otp) return data.data.otp;
await new Promise((r) => setTimeout(r, 2000));
}
throw new Error('OTP not received within timeout');
}
test('user can sign up and verify email', async ({ page }) => {
await registerInbox();
await page.goto('https://yourapp.com/signup');
await page.fill('[name=email]', INBOX);
await page.fill('[name=password]', 'TestPass123!');
await page.click('[type=submit]');
const otp = await waitForOtp();
await page.fill('[name=otp]', otp);
await page.click('[type=submit]');
await expect(page).toHaveURL('/dashboard');
});JavaScript / Node.js Polling Pattern
const FCE_BASE = 'https://api2.freecustom.email/v1';
const headers = { Authorization: `Bearer fce_your_key` };
async function pollForOtp(inbox, timeoutMs = 30000) {
const start = Date.now();
const encoded = encodeURIComponent(inbox);
while (Date.now() - start < timeoutMs) {
const res = await fetch(`${FCE_BASE}/inboxes/${encoded}/otp`, { headers });
const { data } = await res.json();
if (data?.otp) {
return { otp: data.otp, link: data.verification_link };
}
// Respect rate limits from response headers
const remaining = res.headers.get('X-RateLimit-Remaining-Second');
const delay = parseInt(remaining) < 3 ? 2000 : 500;
await new Promise((r) => setTimeout(r, delay));
}
throw new Error(`OTP not received for ${inbox} within ${timeoutMs}ms`);
}
// Usage
const inbox = `signup-test-${Date.now()}@ditapi.info`;
await fetch(`${FCE_BASE}/inboxes`, {
method: 'POST',
headers: { ...headers, 'Content-Type': 'application/json' },
body: JSON.stringify({ inbox }),
});
// Trigger your app's signup flow here...
const { otp, link } = await pollForOtp(inbox);
console.log(`OTP: ${otp}, Verification link: ${link}`);Plan Selection Guide
Choosing the right FreeCustom.Email API plan depends on your scale, team size, and which features you need. Here's a practical breakdown:
Use Case | Recommended Tier |
|---|---|
Evaluating the API / personal side projects | Free (OTP preview included) |
Solo developer with regular QA workflows | Developer (full OTP extraction) |
Small team, CI/CD pipeline, WebSocket required | Startup |
Custom domain inboxes, high-volume testing | Growth+ |
Variable usage with occasional spikes | Any plan + credit top-ups |
See the FreeCustom.Email pricing page for current plan limits and feature details. You can also call GET /v1/plans (no auth required) programmatically to retrieve current plan data in your application.
Security and Privacy Characteristics
No shared inbox exposure. Registered inboxes are private to your API key. Unlike services with public inboxes (like Mailsac's public @mailsac.com addresses), inboxes registered via the FreeCustom.Email API are account-scoped — only your key can read their messages.
API key scoping. The fce_ prefix convention makes keys identifiable in secret scanning tools (like GitHub's secret scanning or tools like truffleHog), helping prevent accidental exposure in version control.
Rate limit abuse prevention. Both the per-second and per-month limits exist to prevent runaway automation loops from creating unintended usage spikes. The Retry-After header on 429 responses makes well-behaved client implementation straightforward.
HTTPS throughout. All API traffic is encrypted in transit. The WebSocket endpoint is WSS (WebSocket Secure).
For more on FreeCustom.Email's privacy model, see Is Temp Mail Safe? A Complete Privacy & Security Guide and FreeCustom.Email Just Got More Powerful: Attachments & Advanced Security.
Getting Started in Under 5 Minutes
# 1. Get your API key from the dashboard
# https://www.freecustom.email/dashboard
# 2. Check your account status
curl https://api2.freecustom.email/v1/me \
-H "Authorization: Bearer fce_your_key_here"
# 3. Register your first test inbox
curl -X POST https://api2.freecustom.email/v1/inboxes \
-H "Authorization: Bearer fce_your_key_here" \
-H "Content-Type: application/json" \
-d '{"inbox": "my-first-test@ditapi.info"}'
# 4. Check for messages
curl "https://api2.freecustom.email/v1/inboxes/my-first-test%40ditapi.info/messages" \
-H "Authorization: Bearer fce_your_key_here"
# 5. Get the latest OTP (Developer plan+)
curl "https://api2.freecustom.email/v1/inboxes/my-first-test%40ditapi.info/otp" \
-H "Authorization: Bearer fce_your_key_here"Full interactive documentation is available at FreeCustom.Email API Docs and API Playground. Questions or issues? Reach the team via the contact page or submit feedback at freecustom.email/feedback.
Conclusion: The Right Temp Mail API for Modern Development
The FreeCustom.Email API v2.0 occupies a specific and well-defined niche in the 2026 email API landscape: it's the best option for developers and QA teams who need disposable inbox infrastructure with first-class OTP extraction, real-time WebSocket delivery, and a developer experience built around automated testing workflows — at a price point that starts free and scales affordably.
It's not a full email platform (no outbound sending), and it's not an enterprise compliance tool (no SAML SSO). For those specific needs, MailSlurp and Mailsac are the right choices respectively. But for the vast majority of development teams testing sign-up flows, OTP delivery, email verification, and onboarding sequences — FreeCustom.Email's API is the most purpose-built, DX-optimized option available.
Get your API key and start building →
Related Developer Guides
Build Your Own Temp Mail Service: The Complete Full-Stack Guide (2026)
Build Your Own Temp Mail Website in Minutes with Our Open-Source Project & API
How to Receive OTP Without Using Your Real Email: The Ultimate Guide (2026)
Under the Hood: The In-Depth Technology Behind Disposable Email Addresses
Temp Mail for Business: Secure Disposable Emails for Testing, Trials & Privacy
FreeCustom.Email Just Got More Powerful: Attachments & Advanced Security
The Next Evolution of Temp Mail: Introducing Pro Plans, Custom Domains, and Permanent Storage
Private or Custom Domains: How to Get Your Own Custom Temporary Email in 2026
Best Temporary Email Services in 2026: FreeCustom.Email vs. 9 Competitors
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.
No comments yet. Be the first to share your thoughts.