Skip to content
catchotp
In public beta

Programmable email inboxes for testing OTPs, signup flows, and AI agents.

Catch one-time codes from any service in real-time. Skip the disposable-inbox hassle. Start free, scale to teams.

  • No credit card required
  • Free forever tier
  • Available via API, CLI, MCP

Built for developers

The primitives you actually need.

We boiled email-testing down to three things: create, wait, parse. Everything else is in your way.

Programmable

REST API, CLI, and Node/Python/Go SDKs. Create inboxes in milliseconds; receive structured JSON when mail arrives.

Real-time waiters

Block your test until the OTP arrives. No polling loops, no flaky waits. p95 latency under 1s end-to-end.

OTP auto-extracted

We parse the code from the email body for you. Works with 95%+ of major services out of the box.

Quickstart

Catch your first OTP in 60 seconds.

One API key. Three lines of code. Same shape across Node, Python, and curl.

import { CatchOTP } from '@catchotp/sdk';
const client = new CatchOTP({ apiKey: process.env.CATCHOTP_KEY });

const inbox = await client.inboxes.create({ mode: 'ephemeral', ttlMinutes: 10 });
// → use inbox.address as the email when signing up to the service under test

const otp = await client.inboxes.waitForOtp(inbox.id, { timeoutSeconds: 30 });
console.log(otp); // → "123456"
Tip: pair with @catchotp/cypress or @catchotp/playwright for zero-boilerplate tests.

Use cases

From CI pipelines to autonomous agents.

Start receiving emails in 60 seconds.

No credit card. Free forever tier. Upgrade when you outgrow it.