---
title: "Email Threading with Message-ID"
slug: message-id-for-sent-emails
description: "All email webhooks and GET email endpoints now include the Message-ID."
created_at: "2026-07-08"
updated_at: "2026-07-08"
image: https://cdn.resend.com/posts/message-id-for-sent-emails.jpg
humans: ["vitor-capretz"]
---

Every email carries a `Message-ID` header, the unique identifier that mail clients and servers use to recognize a message and group conversations into threads.

Starting today, we're including `message_id` in **all email webhooks** and in the **retrieve and list email endpoints**. This has been one of our most requested features, and it unlocks new use cases without any new primitives.

## What you can build with it

- **Threaded replies**: pass the `message_id` as the `In-Reply-To` and `References` headers on your next send, so Gmail, Outlook, and Apple Mail group it into the same conversation.
- **Reply matching**: when an inbound reply arrives, its headers reference the original Message-ID, so you can link the reply back to the exact email that started the thread.
- **Cross-system correlation**: reconcile emails sent through Resend with mail server logs, support tools, or your own database using an identifier the whole email ecosystem understands.
- **Deliverability investigations**: when working with a recipient's mail admin, the Message-ID is how they find the message on their side.

## Included in every email webhook

All `email.*` webhook events now include `message_id` in the payload. This includes `email.sent`, which fires as soon as the email is accepted for delivery, so you can capture the Message-ID immediately.

```json
{
  "type": "email.sent",
  "created_at": "2026-07-08T23:41:12.126Z",
  "data": {
    "email_id": "56761188-7520-42d8-8898-ff6fc54ce618",
    --highlight-start
    "message_id": "<111-222-333@email.example.com>",
    --highlight-end
    "created_at": "2026-07-08T23:41:11.894719+00:00",
    "from": "Acme <onboarding@resend.dev>",
    "to": ["delivered@resend.dev"],
    "subject": "Sending this example",
    "tags": {
      "category": "confirm_email"
    }
  }
}
```

## Included when retrieving emails

The [`GET /emails/:email_id`](/docs/api-reference/emails/retrieve-email) endpoint now returns `message_id` for every sent email, so you can look it up at any time, not just when a webhook fires. The [`GET /emails`](/docs/api-reference/emails/list-emails) list endpoint returns it for every email in the page too, so you can backfill Message-IDs in bulk.

```json
{
  "object": "email",
  "id": "4ef9a417-02e9-4d39-ad75-9611e0fcc33c",
  --highlight-start
  "message_id": "<111-222-333@email.example.com>",
  --highlight-end
  "to": ["delivered@resend.dev"],
  "from": "Acme <onboarding@resend.dev>",
  "created_at": "2026-04-03 22:13:42.674981+00",
  "subject": "Hello World",
  "html": "Congrats on sending your <strong>first email</strong>!",
  "text": null,
  "bcc": [],
  "cc": [],
  "reply_to": [],
  "last_event": "delivered",
  "scheduled_at": null
}
```

## Conclusion

Threading, reply matching, and correlation are the foundation of building conversations on top of email. Exposing the Message-ID is the first step, and we're working on more primitives to make replies even easier.

If you have any questions, please reach out to us and we'll be happy to help.
