Free tier — 50 inboxes/month

Email API for Automated Testing

Create temporary inboxes, receive emails, auto-extract OTP codes. One API call in your Playwright, Cypress, or Selenium tests.

Live on Product Hunt — Support us!
test.spec.ts
// Create inbox
const inbox = await fetch('https://api.mcatch.dev/api/inboxes', {
  method: 'POST',
  headers: { 'X-API-Key': process.env.MAILCATCH_KEY }
}).then(r => r.json());

// Use inbox.address for signup
await page.fill('#email', inbox.address);
await page.click('#submit');

// Wait for OTP email
const msg = await fetch(
  `https://api.mcatch.dev/api/inboxes/${inbox.id}/wait`,
  { headers: { 'X-API-Key': process.env.MAILCATCH_KEY } }
).then(r => r.json());

// msg.otp_code = "482913" ✓
await page.fill('#otp', msg.otp_code);
0+
Emails processed
99.9%
Uptime
< 2s
Avg delivery time
0+
QA engineers

Everything you need for email testing

Stop creating Gmail accounts for tests. MailCatch gives you programmatic email in seconds.

Instant Inboxes

Create a unique email address with one API call. Each test gets its own inbox.

Auto OTP Parsing

We extract verification codes from emails automatically. No regex needed.

Long Polling

Wait for emails with a single request. No polling loops in your test code.

Webhooks

Get notified instantly when an email arrives. Perfect for async workflows.

CI/CD Ready

Works in GitHub Actions, GitLab CI, Bitbucket Pipelines. Just add your API key.

Dashboard

View all inboxes, messages, and usage in a clean web interface.

How it works

Three steps to automated email testing. No configuration, no SMTP setup.

1

Create Inbox

One API call creates a unique @mcatch.dev address ready to receive emails.

POST /api/inboxes
2

Trigger Email

Use the address in your signup, verification, or password reset flow.

page.fill("#email", inbox.address)
3

Get Message

Wait for the email with long polling. OTP codes are auto-extracted if present.

GET /api/inboxes/{id}/wait

Works with your test framework

Add email testing to your existing tests in minutes.

import { test, expect } from '@playwright/test';

test('user signup with OTP', async ({ page, request }) => {
  // 1. Create inbox
  const inbox = await request.post('https://api.mcatch.dev/api/inboxes', {
    headers: { 'X-API-Key': process.env.MAILCATCH_KEY }
  }).then(r => r.json());

  // 2. Fill signup form
  await page.goto('https://myapp.com/signup');
  await page.fill('#email', inbox.address);
  await page.fill('#password', 'TestPass123!');
  await page.click('#submit');

  // 3. Wait for verification email
  const message = await request.get(
    `https://api.mcatch.dev/api/inboxes/${inbox.id}/wait`,
    { headers: { 'X-API-Key': process.env.MAILCATCH_KEY } }
  ).then(r => r.json());

  // 4. Enter OTP
  await page.fill('#otp-input', message.otp_code);
  await page.click('#verify');

  await expect(page.locator('#welcome')).toBeVisible();
});
AI-Powered Integration

Generate test code with AI

Copy this prompt into ChatGPT, Claude, or any AI assistant — ask it to generate tests for your framework in seconds

ai-prompt.txt
You are integrating with MailCatch API for test email automation.

Base URL: https://api.mcatch.dev
Auth: Header "x-api-key: <YOUR_API_KEY>"
(Set as env var MAILCATCH_KEY — never paste real keys into AI assistants)

## Available endpoints:

### Create inbox
POST /api/inboxes
Response: { "id": "inbox_1", "address": "[email protected]" }

### List messages
GET /api/inboxes/:id/messages
Response: { "data": [{ "id": "msg_1", "from_address": "[email protected]", "subject": "Your OTP", "otp_code": "482901", "received_at": "2026-01-01T00:00:00Z" }] }

### Wait for message (long-poll)
GET /api/inboxes/:id/wait?timeout=30
Waits up to 30s. Returns message on success, HTTP 408 on timeout.

### Delete inbox
DELETE /api/inboxes/:id

## Typical test flow:
1. Create inbox → get address
2. Trigger action that sends email (registration, password reset, OTP)
3. GET /wait?timeout=30 — waits for the email
4. Extract OTP from otp_code field (auto-detected)
5. Use OTP in test
6. Delete inbox (cleanup)

1.

Copy the prompt above

2.

Paste into ChatGPT or Claude

3.

Ask: "Generate Playwright tests"

Frequently asked questions

Everything you need to know about MailCatch.

Simple, transparent pricing

Start free. Upgrade when you need more.

Free

$0forever

For personal projects and getting started

Get Started
  • 50 inboxes/month
  • 1 API key
  • 24h message retention
  • Auto OTP parsing
  • Long polling

Solo

$10/month

For individual QA engineers

Start Solo
  • 200 inboxes/month
  • 2 API keys
  • 48h message retention
  • Auto OTP parsing
  • Long polling
  • Priority support
Most Popular

Pro

$15/month

For QA teams with shared workflows

Start Pro
  • 1,000 inboxes/month
  • 5 API keys
  • 7 days message retention
  • 3 Workspaces
  • Webhooks
  • Up to 10 members
  • Priority support

Team

$35/month

For QA teams and CI/CD pipelines at scale

Start Team
  • 10,000 inboxes/month
  • Unlimited API keys
  • 30 days message retention
  • 10 Workspaces
  • Webhooks
  • Unlimited members
  • Dedicated support

Ready to automate your email testing?

Start free. No credit card required. Set up in under 2 minutes.