The temp email API built for your test suite
Create, read, and delete disposable inboxes programmatically. Perfect for CI/CD pipelines, QA automation, and staging environments.
Everything you need, nothing you don't
A clean REST API designed for automated testing from day one.
Instant Inbox Creation
One POST request returns a unique email address. No auth flow, no setup wizard — just an inbox.
Webhook Support
Get notified the moment an email arrives. Perfect for async test flows that can't afford to poll.
Auto-Cleanup
Inboxes auto-delete after expiry. No manual teardown in your test suite — zero leaked state.
OTP-Ready Bodies
Every email exposes a clean textBody field — pull verification codes out with a one-line regex in any language.
Integrate in minutes, not days
Real-world test code you can copy-paste into your project today.
// __tests__/signup.test.ts (Jest + fetch)
import { describe, it, expect } from '@jest/globals';
const BASE = 'https://api.openinbox.io/api';
const KEY = process.env.OPENINBOX_API_KEY!; // premium key — needed to poll
describe('User signup flow', () => {
it('sends a verification email and confirms the account', async () => {
// 1 — Create a disposable inbox (no auth required)
const inbox = await fetch(`${BASE}/inbox`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
}).then(r => r.json());
// 2 — Register with the temp address
await fetch('https://yourapp.com/api/register', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
email: inbox.email,
password: 'Test1234!',
}),
});
// 3 — Poll for the verification email (X-API-KEY required)
let emails: any[] = [];
for (let i = 0; i < 10; i++) {
await new Promise(r => setTimeout(r, 3000));
const res = await fetch(
`${BASE}/inbound/api/emails?inboxEmail=${encodeURIComponent(inbox.email)}`,
{ headers: { 'X-API-KEY': KEY } },
).then(r => r.json());
emails = res.emails ?? [];
if (emails.length) break;
}
expect(emails.length).toBeGreaterThan(0);
expect(emails[0].subject).toContain('Verify');
// 4 — Extract the OTP from the email body with a regex
const otp = emails[0].textBody?.match(/\b\d{4,8}\b/)?.[0];
expect(otp).toBeDefined();
// 5 — Confirm account
const confirm = await fetch('https://yourapp.com/api/verify', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email: inbox.email, code: otp }),
}).then(r => r.json());
expect(confirm.verified).toBe(true);
});
});Built for the tests you actually write
See how teams use OpenInbox across their testing stack.
Pricing for developers
Start free — upgrade when you need higher limits or webhooks.
Pro
Billed monthly · cancel anytime
- 3,000 API requests/day
- 10 concurrent inboxes
- Webhook notifications
- Auto-parsed OTP codes
- Up to 3 custom domains
- Priority support
Business
- 10,000 API requests/day
- Unlimited inboxes
- Webhook notifications
- Auto-parsed OTP codes
- Up to 10 custom domains
- Dedicated support
All plans include: HTTPS only, zero data retention after expiry, GDPR compliant. See full plan comparison →
Works with your existing stack
Docs & guides for your stack
Language-specific quickstarts, test-framework integrations, and the core API reference — pick your starting point.
By language
By test framework
Get your free API key in 30 seconds
No credit card required. Create an account, grab your key, and start testing.
