Move Resend receiving to Bird Agent Mailboxes
Move an application-owned email conversation to a Bird mailbox. Resend already supports receiving and threaded replies; this migration changes how your application addresses and processes those conversations.
Map receiving and reply identities
Resend's incoming event distinguishes the API resource email_id from the RFC email message_id. Its reply guide uses the latter in In-Reply-To, with References for repeated replies. Keep those values separate during migration. See Resend reply handling.
| Resend workflow | Bird mailbox workflow |
|---|---|
| Receiving domain or account receiving subdomain | Create a dedicated Bird mailbox and test its actual address before changing how customers reach it. |
| data.email_id for the received API resource | Save the new Bird rem_ message ID with your application case; retain old IDs for archive access. |
| RFC data.message_id used in email headers | Use Bird's thr_ and rem_ IDs for the thread reply operation. Do not submit an RFC Message-ID as a Bird resource ID. |
| Retrieve received content after notification | Read the Bird thread message, including extracted_text when the worker needs the new text without quoted history. |
| Build reply headers in the send request | Call email.threads.messages.reply; the operation derives recipients and threading headers from the source message. |
| Retrieve attachment metadata and a download URL | List Bird attachment metadata, then retrieve bytes through its authenticated thread-message attachment endpoint. |
The receiving and attachment capabilities are documented in Resend receiving. If the application only needs to parse incoming mail, consider Bird inbound email before introducing a mailbox.
Keep the application case stable
Record the provider, incoming resource ID and application case ID for historical messages. For new Bird mail, add the mailbox and thread IDs. Do not infer that two conversations are the same because they share a subject.
Keep an old case's archive reference when a customer resumes it after the switch. If the application explicitly associates a new Bird thread with that case, record that decision in the case store; do not rewrite provider IDs or assume the old thread was imported.
Build the Bird workflow
Start with the complete Node.js support inbox or Python support inbox. Each creates a mailbox, receives a message, records an application-owned support case and acknowledges it in the original thread. A later message updates that case; a repeated message does not send another acknowledgement.
The examples keep a small local checkpoint for development. Put the same case, incoming-message and outgoing-operation identities in your application's durable store before running multiple workers. Keep the business action separate from the email: acknowledging a refund request does not issue a refund.
Then add the signed event receiver and attachment workflow. Store the received-message ID with the case before acknowledging the event. Retrieve attachment metadata and bytes through the documented operations; keep any retained files under your application's access and retention rules.
Verify replies and retries
Test unrelated messages with the same subject, a reply, a forwarded message and a second customer response. Inspect the resulting conversation in the controlled recipient's mailbox as well as the returned API records.
Repeat an incoming event and confirm it reuses the existing work item. A lost send response needs reconciliation before another reply: Bird's completed-response retention is three hours, and a send can take effect before a response is retained. See idempotency and recovery. Keep a business outcome such as a completed refund separate from the acknowledgement email.
Move inbound routing
Switch a controlled address or cohort after the receiving and reply tests pass. Reconcile existing Resend jobs before disabling their consumer. If outbound notifications remain on Resend, leave those sends separate or follow the Email API migration.
On rollback, pause new Bird assignments and resolve outstanding sends before restoring the old route. Keep both historical message references until the application's retention policy allows their removal.
Next steps
- Compare Bird and Resend
- Mailbox integration and retention
- Resolve receiving and reply problems
- All mailbox migration guides
- Mailbox resources
- Email pricing
Related resources
Continue with the documentation, guides and examples for this topic. Resources are in English.
Watch the guideGetting started with emailExplore the capabilityEmailFollow the learning pathBuild your first integrationImplementation guideSend your first email
Try the practice and get an implementation brief