Built For Real Product Teams
Ship email features with confidence before your users ever see a broken message
Catch sign-up links, password reset emails, OTP codes, and template regressions in one place. Use your current integration flow, then verify results through a clean inbox API and dashboard.
Who It Helps
Made for the teams that ship email-dependent features
You do not need to be an email infrastructure expert. You need clear answers: “Did this message arrive?”, “Does this link work?”, “Is this the right code?”.
QA Engineers
Validate sign-up, reset, and notification flows with deterministic inbox checks in manual and automated tests.
Product Teams
Launch user journeys faster with confidence that onboarding and lifecycle emails behave as intended.
Developers
Keep existing SMTP or provider SDK integrations and add message assertions without rewriting app logic.
How It Works
From “send email” to “assert result” in three steps
Start with a public inbox for quick checks, then switch to private team workspaces when you need longer retention and access controls.
Create test inbox
Generate alias on `@free.api.email` or use your private workspace domain.
Run your normal flow
Send through your existing app logic: SMTP, Postmark, SendGrid, or Mailgun-style request.
Assert expected outcome
Check subject, links, OTP codes, and attachments directly from API or dashboard.
Quickstart Example
Wait up to 30 seconds for a message and validate it in the same test step.
alias="signup-smoke"
# 1) trigger your app flow with: [email protected]
# 2) fetch captured message
curl "https://v1.api.email/free/messages/signup-smoke?wait=30"
# response includes:
# - subject
# - links (magic links)
# - codes (OTP)
# - attachments Provider-Compatible Endpoints
Keep official SDKs and switch only host/base URL plus API key when running tests against api.email.
Postmark (`postmark`)
import postmark from "postmark";
const client = new postmark.ServerClient(process.env.API_EMAIL_KEY, {
requestHost: "v1.api.email",
useHttps: true
});
await client.sendEmail({
From: "QA <[email protected]>",
To: "[email protected]",
Subject: "Verify signup",
HtmlBody: "<a href='https://app.test/verify?token=123456'>Verify</a>"
}); SendGrid (`@sendgrid/client`)
import sgClient from "@sendgrid/client";
sgClient.setApiKey(process.env.API_EMAIL_KEY);
await sgClient.request({
method: "POST",
url: "https://v1.api.email/v3/mail/send",
body: {
from: { email: "[email protected]" },
personalizations: [{ to: [{ email: "[email protected]" }] }],
subject: "Verify signup",
content: [{ type: "text/plain", value: "OTP: 123456" }]
}
}); Mailgun (`mailgun.js`)
import Mailgun from "mailgun.js";
import FormData from "form-data";
const mailgun = new Mailgun(FormData);
const mg = mailgun.client({
username: "api",
key: process.env.API_EMAIL_KEY,
url: "https://v1.api.email"
});
await mg.messages.create("sandbox.api.email", {
from: "QA <[email protected]>",
to: ["[email protected]"],
subject: "Verify signup",
text: "OTP: 123456"
}); Works With Existing Integrations
Keep your current provider workflow and switch endpoint/base URL only when testing.
Scales With Team Needs
Start free for local QA, upgrade for private domains, API keys, and longer message history.
What You Get
Everything your team needs from each test email
Stop manually opening inboxes and parsing raw email bodies. Every captured message is returned in a format that is ready for QA checks and CI assertions.
Structured Message Data
Read sender, recipients, subject, text/html body, and attachments from one clean response. Your tests can assert business outcomes instead of parsing MIME.
Magic Links + OTP Extraction
Links are extracted automatically, and verification codes (4-8 digits) are available as separate fields for auth-flow automation.
Retention By Plan
Start with short-lived public inboxes for quick checks, then move to private workspaces with longer message history as your QA process grows.
Webhook Reliability + Logs
Webhooks respect retry timing and provide clear delivery logs in the dashboard, including success/error status and response payloads.
FAQ
What product teams usually ask first
Short answers to the practical questions that come up during setup and rollout.
Do we need to rewrite our email integration?
- No. Keep your existing app logic and message templates.
- For testing, switch SMTP host or API base URL only.
- Use the same flow your users rely on in production.
Will it work with our current provider SDK?
- Yes. Postmark, SendGrid, and Mailgun-style endpoints are supported.
- Your developers can keep current SDK calls in tests.
- Switching usually means changing credentials and base URL.
Can we start without creating a paid workspace?
- Yes. Free public inboxes are available for fast local checks.
- They are ideal for demos, spikes, and smoke tests.
- Move to private workspaces when you need longer retention and team access control.
Can this fit into CI and release gates?
- Yes. Poll inbox API with wait and assert links, OTPs, subjects, and attachments.
- Webhook retries respect retry timing and reduce flaky notifications.
- Dashboard logs help debug failed callbacks and test runs quickly.
Plans
Pick the setup that matches your release stage
Every plan supports the same core testing flow. Upgrade when your team needs privacy, retention, and higher collaboration limits.
Free
$0/mo
- Public inboxes for local checks and quick demos
- Magic links and OTP extraction for auth testing
- Fast API reads with wait support
- Short retention window
Most Used
Starter
$12/mo
- Private workspace with API keys
- 7-day retention for routine QA and CI
- Provider-compatible testing via SMTP/API emulators
- Webhook logs for callback debugging
Pro
$39/mo
- Longer retention for release audits and investigations
- Custom domains for production-like test scenarios
- Higher alias and webhook limits for larger teams
- Billing and workspace controls for scale