The email API
your agent already knows

MCP-native disposable inboxes for automated tests. Point your coding agent at api.email and it does the rest.

No email confirmation. Namespace and API key in one call.

GET /v1/wait?tag=signup · 200 OK
{ "message": {
    "subject": "Your verification code",
    "extracted": { "otp_codes": ["482913"] } },
  "timed_out": false }

How it works

01

Sign up.

Call the signup tool over MCP, or send POST /v1/signup. No email confirmation is required — you get a namespace and an API key back immediately.

02

Send mail to it.

Any address at your namespace works without registering it first, for example [email protected]. The SMTP server accepts it right away.

03

Read it back.

List messages, fetch one by id, or wait for the next one to arrive, over REST or MCP. OTP codes and verification links are extracted for you.

One scenario, three ways

$ curl "https://api.email/v1/wait?tag=signup" \
    -H "Authorization: Bearer ae_live_51f..."

{ "message": {
    "subject": "Your verification code",
    "extracted": { "otp_codes": ["482913"] } },
  "timed_out": false }
> tool_call wait_for_message
  { "tag": "signup", "timeout": 30 }

< tool_result
  { "message": {
      "subject": "Your verification code",
      "extracted": { "otp_codes": ["482913"] } },
    "timed_out": false }
S: 220 api.email ESMTP ready
C: MAIL FROM:<[email protected]>
S: 250 OK
C: RCPT TO:<[email protected]>
S: 250 OK
C: DATA
C: Subject: Your verification code
C:
C: Your code is 482913. It expires in 10 minutes.
C: .
S: 250 OK: queued as 1a2b3c

Everything after "message received"

Extraction

OTP codes and verification links are parsed out of every message automatically.

Wait API

Long-poll up to 30 seconds instead of writing sleep-and-retry loops.

Attachments

Download any attachment straight through the API.

Webhooks

Get pushed a notification on arrival, with retries.

Namespaces

Isolated inbox environments per team or per project.

Usage API

Quota and consumption, available programmatically.

Point an agent at it

  • MCP server at /mcp
  • llms.txt and llms-full.txt for context loading
  • OpenAPI 3.1 at /openapi.json
mcp-client config
{ "mcpServers": { "email": { "url": "https://api.email/mcp" } } }

Pricing

Free

$0/month

  • 100 emails/mo
  • 1 namespace
  • 1 day retention
Start free

Pro

$49/month

  • 25,000 emails/mo
  • 10 namespaces
  • 30 days retention
Start free

Upgrade from the dashboard once you're in.

FAQ

How fast do messages show up?

Messages are visible immediately after the SMTP server accepts them — no batching or delay. If you're waiting on one, wait returns as soon as it arrives, or after up to 30 seconds if it doesn't.

Can I send outbound mail from api.email?

No. The service only receives — your app or agent sends mail from wherever it already does, and api.email is just the inbox it lands in.

What happens when retention expires?

Messages are deleted automatically once your plan's retention window passes: 1 day on Free, 7 days on Dev, 30 days on Pro.

Is my mail private?

Each namespace is isolated from every other namespace, and only your API key can read or list its messages.

How do I use it in CI?

Call the REST API with your API key, for example curl -H "Authorization: Bearer <key>" https://api.email/v1/wait?tag=signup, and assert on the response in your test.

Do I need an MCP client to use it?

No. MCP is one way in for agent tooling, but the REST API covers everything on its own — nothing requires an MCP client.

Give your test suite an inbox

Start free