Open source · Apache 2.0 · free to start

Every agent gets its own inbox.

The first open-source email service built for AI agents. Give each one a real, authenticated address — then put it to work like anyone else on the team: it takes requests, replies in thread, and checks with you before anything ships.

$ claude plugin install e2a@e2a·OAuth, no API key·Apache 2.0
e2a – open-source email API for agents - Give your AI agents a real, authenticated email address. | Product Hunt
01 · Quick start

Install the plugin. Your agent has an inbox.

The plugin registers the hosted MCP server and an operate-well skill, so your agent can send, receive, reply in-thread, and hold mail for review out of the box. First tool use runs an OAuth flow in your browser — no API key to paste.

~/my-agent
# add the marketplace, then install the plugin
claude plugin marketplace add tokencanopy/e2a
claude plugin install e2a@e2a
 
# then just ask, in plain language:
# "Create an email agent and listen for new mail."
# "Reply to Dana's thread and hold it for my approval."
02 · Build agent systems

Already have an agent framework?

The SDKs are plain async clients, so an inbox drops into whatever you already run — LangChain, Google ADK, the OpenAI Agents SDK. Same hosted MCP server, or go straight at the API.

TypeScript and Python SDKs with one-call webhook verification and a WebSocket listen() stream, a CLI that bridges inbound mail to a local handler, and HMAC-signed webhooks for cloud runtimes. Conversation threading survives the email ↔ structured-data boundary, so multi-turn replies keep their session.

~/my-agent
# pip install e2a
 
from e2a.v1 import AsyncE2AClient
 
# conversation_id threads multi-turn replies —
# bind it to your framework's session id
async with AsyncE2AClient(api_key="e2a_…") as client:
  async for event in client.listen("[email protected]"):
    if event.type != "email.received": continue
    d = event.data
    reply = await agent.run(d["conversation_id"])
    await client.messages.reply(d["delivered_to"], d["message_id"], {"text": reply})
03 · Human-in-the-loop

Approve before your agent hits send.

Flip one switch and outbound messages pause for your review instead of going straight out. You get a notification — click to see recipients, subject, and body on a secure confirmation page. Approve, edit, or reject.

Per-agent, opt-in, off by default. Configurable TTL with auto-approve or auto-reject on expiry. Reviewable from the dashboard, SDK, or one-click magic links in your inbox.

hitl.ts · sdk
// Turn on HITL in the dashboard, or hold outbound for
// review via the agent's protection config.
 
// review held messages with an account-scoped key
const held = await client.reviews.list().toArray({ limit: 50 });
  msg_abc123 [email protected] in 47m
  msg_def456 [email protected] in 2h 12m
 
// approve (sends it) or reject with a reason
await client.reviews.approve("msg_abc123");
  → approved · delivering now
04 · Use cases

What you can build.

If it can receive email and take action, e2a can power it.

Support
Support and intake
Triage inbound requests, answer common questions, and hand off to humans without changing how customers reach you.
Admin
Scheduling and admin
Coordinate meetings, send reminders, and follow up where most people already live — their inbox.
Sales
Sales and follow-through
Qualify leads, reply to outreach, and keep conversations moving with a verified agent identity.
Auth
OTP and verification
Receive verification codes, confirmation emails, and magic links — then act on them automatically.
Voice
Voice agents
After a call ends, your voice agent sends a follow-up, receives a reply, and keeps the thread going.
Procurement
Procurement
Coordinate with vendors, chase POs, and manage supplier threads with partners who still run on email.

Your agent's inbox is one sign-in away.

Free to start. No credit card. Up and running in under two minutes.

Have feedback? We'd love to hear from you.