The inbox for agents. Create shared inboxes, connect your own agents, and build workflows around email.
Resend started with sending. In 2025, we added receiving, so your app could get mail, too. Webhooks fire, but the rest is up to you.
"The rest" turned out to be a lot of work. Once email comes in, someone has to read it, sort it, reply to it, and remember where the conversation left off. Increasingly, that someone is an agent.
Today we're announcing Inboxes.
Built for agents, but ready for your whole team.
An inbox sends and receives email at an address on one of your domains, like support@example.com. Every message is grouped into a thread, and every thread is available to your app, your team, and your agents.
Share an inbox with your team, assign conversations, leave notes, and pick up where someone else left off. The same inbox can be worked by people and agents side by side.
You can build and use Inboxes to fit any use case.
Inboxes are API-first. Create an inbox, list conversations as they arrive, and reply from your app, an agent, or an automated workflow.
import { Resend } from 'resend';const resend = new Resend('re_xxxxxxxxx');const { data, error } = await resend.inboxes.threads.list({inboxId: 'b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1',});
Replies stay in the same thread, and reuse the thread's subject when you don't set one:
import { Resend } from 'resend';const resend = new Resend('re_xxxxxxxxx');const { data, error } = await resend.inboxes.threads.emails.reply({inboxId: 'b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1',threadId: '4d8e2a1c-9b3f-4c6d-8a21-3e5f7c9c0d12',emailId: '5b1a9f47-2c8d-4e6f-9a03-1d2e3f4a5b60',cc: ['billing@example.com'],bcc: ['records@example.com'],html: '<p>Refund issued for order 1041.</p>',text: 'Refund issued for order 1041.',});
To support building custom experiences, we're releasing a full set of primitives centered on the inbox experience.
inbox.email.received to inbox.thread.assigned.Connect the agents you already use, like Claude Code, Cursor, Codex, Grok, or Gemini, through MCP or skills.
Build, manage, and triage inboxes with your agents using the API, CLI, or MCP server.
Ask your agent to summarize what came in overnight, find the invoice from last month, or draft a reply to the customer who's been waiting since Tuesday.
The inbox UI includes built-in agents that can build custom, dynamic views of emails and threads to fit your needs.
You can also customize built-in agents to help you triage, organize, and respond to email.
Through the dashboard or via the API, give it instructions, a tone, and the actions it's allowed to take. It handles routine email work as it arrives, triggered by webhooks.
import { Resend } from 'resend';const resend = new Resend('re_xxxxxxxxx');const { data, error } = await resend.inboxes.agent.update({inboxId: 'b3e2b2b6-3f0e-4c8e-9ad3-2f43a1e2c7f1',instructions: 'Answer refund questions yourself. Escalate legal threats.',tone: 'friendly and concise',enabledActions: ['draft_reply', 'add_labels'],});
The agent can draft replies, forward threads, add labels, assign threads, mark spam, archive, and delete. You decide which of those it gets. Start with drafts and labels, and widen the scope as you build trust.
Your team stays in control the whole time.
You can start for free with up to 3 inboxes today.
Additional inboxes are available on paid plans on a pay-as-you-go basis ($1/inbox).