Live on Product Hunt today. Tell us what to ship next →

A real inbox, on demand. One API call, no signup.

Spin up a disposable email address that actually receives mail, then poll it from your test suite or your own script. Built for verification-email testing, signup-flow QA, and anywhere you'd otherwise burn a real inbox.

Free — no API key required to create a mailbox

No signup, no account: random private addresses for tests. Need a permanent inbox for an AI agent instead? How we compare to Resend Inboxes.

Quickstart

# create a mailbox (default: expires in 15 min)
curl -X POST https://receivemail.dev/mailboxes
# => {"address":"a1b2c3d4e5f6@receivemail.dev","expiresAt":"...","secret":"..."}
# now trigger your app's verification email to that address, then poll:
curl https://receivemail.dev/mailboxes/a1b2c3d4e5f6@receivemail.dev/messages \
  -H "Authorization: Bearer <secret from above>"
# => {"address":"...","messages":[{"from_address":"...","subject":"...","body_text":"..."}]}

Use it from Claude, Cursor or any MCP client

Remote MCP server, no key needed. Tools: create_mailbox, wait_for_email, list_messages. mcptry status

claude mcp add --transport http receivemail https://receivemail.dev/mcp
{ "mcpServers": { "receivemail": { "url": "https://receivemail.dev/mcp" } } }

Need the SMS code too?

Plenty of signups ask for a phone number after the email. sms-florin rents real UK numbers that receive the verification SMS — same idea as this, by API or in the browser, pay per code.

Endpoints

EndpointDescription
POST /mailboxesCreate a new address. Optional {"ttlMinutes": 1-60} body, default 15. Returns the address and a per-mailbox secret — save it, it's the only way to read this mailbox later.
GET /mailboxes/:addressMailbox metadata (created/expiry). Needs the mailbox's own secret as a Bearer token.
GET /mailboxes/:address/messagesLast 50 messages received, newest first. Same secret.
GET /mailboxes/:address/waitLong-poll: waits up to timeout seconds (max 25) for a message newer than since (ISO 8601), then returns it, or {"timed_out":true}. Same secret.

Limits

Need more than the free tier?

The free API stays free. Paid plans give you an API key instantly after checkout — send it as Authorization: Bearer rmk_… on POST /mailboxes.

Pro — $7/month: mailboxes that live up to 24h (vs. 60 min free), 120 creates/min per key instead of the per-IP limit (for CI with many parallel jobs), and every message comes back with the verification code already extracted in an otp field — no regex in your tests.

Pro + Webhooks — $19/month: everything in Pro, plus pass a webhookUrl when you create a mailbox and every email that lands is POSTed to you the moment it arrives — {address, from, subject, bodyText, otp, receivedAt}, HMAC-signed with your key. Stop polling.

Want something else — private domain, HTML attachments? Tell us what you'd actually use, free to ask:

Guides