Email Inboxes for Software Testing

Disposable inboxes, APIs, and MCP servers for Playwright, Cypress, Selenium, and AI agents. Test magic links, OTPs, signup flows, and any feature that touches email.

Trusted by developers building reliable authentication, onboarding, and notification tests.

Instant Inboxes
Real-time Delivery
SMS Coming Soon

Real apps rely on email. Your tests should too.

Magic login links, email OTPs, password resets, user invitations, reports, receipts - your product depends on email flows.

But most automation breaks here because you don't have a real inbox to test with.

✕
await page.click('#send-magic-link');

// Test fails - no way to receive the email

Stamp0 fixes that with:

  • Instant disposable inboxes
  • A simple REST API
  • Real-time message fetch & polling
  • MCP server for Claude Code, Cursor, and custom agents
  • Coming soon: phone numbers + SMS inboxes

Now every test can walk through the full flow - reliably, repeatedly, at scale.

Built for end-to-end testing

Create inboxes
on demand

Zero collisions. Zero cleanup.

Provision unique inboxes for every test run or environment. Each test gets its own isolated inbox, ensuring parallel tests never interfere with each other.

// POST /inboxes
{
"id": "inb_x7k2m9p4",
"address": "test-x7k2@stamp0.email"
}

Fetch emails instantly

Parse OTPs, extract links, validate templates.

Poll or fetch messages via API or MCP. Parse OTPs from email bodies, extract magic links from HTML content, and validate your email templates are rendering correctly.

Verify your email

noreply@yourapp.com

2s ago

Your OTP code is:

847291

Works with every framework

If it needs email, Stamp0 handles it.

Playwright, Cypress, Selenium, Puppeteer, custom scripts, CI - integrate with any testing framework. Simple REST API means zero framework lock-in.

MCP for AI-powered testing

Let AI agents handle email flows.

Let Claude Code, Cursor, or any MCP-compatible agent request inboxes, read emails, and auto-generate tests. The only email testing service with first-class MCP support.

Coming Soon

Test phone verification flows.

Test phone verification flows, 2FA, and number-based onboarding without real devices. Same simple API, same parallel isolation.

What you can test with Stamp0

If it lands in an inbox, you can test it.

Signup & verification

Test user registration flows end-to-end

Magic login links

Verify passwordless authentication works

Email OTP authentication

Test one-time password delivery and validation

Forgot password flows

Ensure password reset emails arrive correctly

Billing & report notifications

Verify transactional emails reach users

Marketing email rendering

QA your email templates and layouts

Team invitations & onboarding

Test multi-user invitation workflows

Transactional email QA

Validate all automated emails in your system

How It Works

Simple, predictable, API-first

1

Create an inbox

POST /inboxes → get inboxId + address

const inbox = await stamp0.inbox.create();
// { id: "inb_x7k2m9p4", address: "test-x7k2@stamp0.email" }
2

Run your test flow

Trigger email: OTP, login link, password reset, invoice, etc.

await page.fill('#email', inbox.address);
await page.click('#send-verification');
3

Retrieve the message

GET /messages?inboxId=xyz → parse OTP/link and continue

const message = await stamp0.inbox.waitForMessage(inbox.id);
const otp = extractOTP(message.text);
4

(Optional) Use MCP agents

Let your coding agent read inboxes and write tests autonomously

// In Claude Code or Cursor:
// "Create an inbox and test the magic link flow"
// The agent handles everything automatically

Why developers choose Stamp0

Fast & scalable

Inboxes provision in milliseconds. Built for parallel test runs.

CI-ready

Perfect for GitHub Actions, GitLab, CircleCI, and enterprise pipelines.

Isolated environments

Every test has a clean inbox - no state, no noise.

Agent-friendly

The only email testing service with first-class MCP support.

Example

A complete email-based login test in Playwright

magic-link.spec.ts
1import { test, expect } from '@playwright/test';
2import { Stamp0 } from '@stamp0/sdk';
3
4const stamp0 = new Stamp0({ apiKey: process.env.STAMP0_API_KEY });
5
6test('magic link login flow', async ({ page }) => {
7 // Create a unique inbox for this test
8 const inbox = await stamp0.inbox.create();
9
10 // Navigate to login and request magic link
11 await page.goto('/login');
12 await page.fill('#email', inbox.address);
13 await page.click('#send-link');
14
15 // Wait for the magic link email to arrive
16 const message = await stamp0.inbox.waitForMessage(inbox.id);
17 const loginUrl = extractMagicLink(message.html);
18
19 // Click the magic link and verify login
20 await page.goto(loginUrl);
21 await expect(page.locator('[data-testid="dashboard"]')).toBeVisible();
22});
23
24function extractMagicLink(html: string): string {
25 const match = html.match(/href="([^"]*magic-link[^"]*)"/);
26 return match?.[1] ?? '';
27}

FAQs