Trusted by developers building reliable authentication, onboarding, and notification tests.
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.
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
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.
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
Simple, predictable, API-first
Create an inbox
POST /inboxes → get inboxId + address
const inbox = await stamp0.inbox.create();
// { id: "inb_x7k2m9p4", address: "test-x7k2@stamp0.email" }Run your test flow
Trigger email: OTP, login link, password reset, invoice, etc.
await page.fill('#email', inbox.address);
await page.click('#send-verification');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);(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 automaticallyWhy 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.
A complete email-based login test in Playwright
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 test8 const inbox = await stamp0.inbox.create();9 10 // Navigate to login and request magic link11 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 arrive16 const message = await stamp0.inbox.waitForMessage(inbox.id);17 const loginUrl = extractMagicLink(message.html);18 19 // Click the magic link and verify login20 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}