Email

What is email threading, and how do replies stay together?

Email threading keeps replies together by linking each message to the original message ID with In-Reply-To and References headers.

A client groups a reply with earlier messages by inspecting its headers. The message IDs in In-Reply-To and References let it show one conversation.

Which headers keep replies in one thread?

The replying message puts the parent message's Message-ID in In-Reply-To. It also carries the chain of related message IDs in References. A client can rebuild the conversation when several replies branch from one message.

RFC 5322 section 3.6.4 says In-Reply-To may identify the message or messages to which the new message is a reply. References may identify the related messages in the thread.

What does a threaded reply look like?

A message with Message-ID: <m1@example.com> can receive a reply with these headers:

In-Reply-To: <m1@example.com>
References: <m1@example.com>

A reply to that reply appends the new parent to References:

In-Reply-To: <m2@example.com>
References: <m1@example.com> <m2@example.com>

Keep each ID exactly as the sender supplied it. Do not invent a new ID for the parent or copy a subject line as a substitute.

HeaderIllustrative valueJob
Message-ID<reply@example.com>Identifies this message
In-Reply-To<original@example.com>Names the message being answered
References<original@example.com>Carries the ancestry chain

These values are synthetic examples. A Re: subject alone does not identify the parent message.

Why can a reply leave the thread?

A client may start a new conversation when In-Reply-To and References are missing or point at a different message. Changing the subject can also affect grouping because clients combine headers with their own subject rules.

A forwarded message is usually a new conversation. It contains the old content for context. It does not automatically identify the original message as its parent.

Reply sends to the author or Reply-To address. Reply-all also keeps the original To and Cc recipients, subject to the sender's mailbox rules. A client can still group or split messages differently, because rendering and grouping are client behavior.

How do I preserve a thread with Bird?

When you reply through a Bird mailbox, call replyEmailThreadMessage for the received message at POST /v1/email/threads/{thread_id}/messages/{message_id}/reply. The operation uses the mailbox write scope. Bird derives the subject and reply headers. The outbound message stays in that thread. Use compose for a new thread. The mailboxes guide shows the reply flow and webhook events for incoming mail.

If your integration sends raw mail, preserve the parent Message-ID in In-Reply-To and the full chain in References. Store those headers with the message record so retries use the same relationship.

In short

  • In-Reply-To names the message being answered.
  • References carries the related message chain.
  • A missing or unrelated header can start a new conversation.
  • Bird mailbox replies stay in the received message's thread.

Build on the same network.

A test API key is yours immediately. Production unlocks when you add a payment method and verify a sender.

Start with one channel.
Add the others when you're ready.

A test API key is yours immediately. Production unlocks when you add a payment method and verify a sender.

Using Claude Code, Cursor, or Codex? Copy a setup prompt and your agent installs the Bird CLI and skills for you. Pick yours:

Cursor