<Intro>

<EndpointHeader />

<Description>

Returns a single message with its aggregate delivery `status` and per-state recipient counts. The response never includes the `html`/`text` bodies; when content storage is enabled for the send, fetch the stored bodies with [Get stored message content](/docs/api/reference/get-email-message-content). Per-recipient statuses and the event timeline are separate sub-resources.

</Description>

</Intro>

<Parameters in="path">

<Parameter name="message_id" type="string">

<Description>

ID of the message to fetch, from the send response's `id` field (`em_`-prefixed).

</Description>

</Parameter>

</Parameters>

<Payload kind="response">

<Field name="id" type="string" required>

<Description>

Message ID.

</Description>

</Field>

<Field name="from" type="object" required>

<Description>

Sender address. `name` is present when a display name was provided on the send.

</Description>

<FieldChildren kind="response">

<Field name="email" type="string" prefix="from." required>

<Description>

Email address.

</Description>

</Field>

<Field name="name" type="string" prefix="from.">

<Description>

Display name shown alongside the address in mail clients.

</Description>

</Field>

</FieldChildren>

</Field>

<Field name="to" type="array of object" required>

<Description>

Primary recipients. Length is the recipient count; use the broadcasts endpoint for audience-targeted sends. Each entry's `name` is present when a display name was provided on the send.

</Description>

<FieldChildren kind="response">

<Field name="email" type="string" prefix="to." required>

<Description>

Email address.

</Description>

</Field>

<Field name="name" type="string" prefix="to.">

<Description>

Display name shown alongside the address in mail clients.

</Description>

</Field>

</FieldChildren>

</Field>

<Field name="cc" type="array of object">

<Description>

CC recipients.

</Description>

<FieldChildren kind="response">

<Field name="email" type="string" prefix="cc." required>

<Description>

Email address.

</Description>

</Field>

<Field name="name" type="string" prefix="cc.">

<Description>

Display name shown alongside the address in mail clients.

</Description>

</Field>

</FieldChildren>

</Field>

<Field name="bcc" type="array of object">

<Description>

BCC recipients.

</Description>

<FieldChildren kind="response">

<Field name="email" type="string" prefix="bcc." required>

<Description>

Email address.

</Description>

</Field>

<Field name="name" type="string" prefix="bcc.">

<Description>

Display name shown alongside the address in mail clients.

</Description>

</Field>

</FieldChildren>

</Field>

<Field name="subject" type="string" required>

<Description>

Message subject line.

</Description>

</Field>

<Field name="category" type="string" required>

<Description>

Content classification. Controls suppression policy — `marketing` blocks on all suppression reasons; `transactional` allows delivery through complaint and unsubscribe suppressions.

</Description>

<Description>

Possible values: `marketing`, `transactional`

</Description>

</Field>

<Field name="reply_to" type="nullable array">

<Description>

Reply-To addresses, if set on the send. Empty/null when no Reply-To was provided.

</Description>

</Field>

<Field name="status" type="object" required>

<Description>

Aggregate delivery status derived from recipient states. `scheduled` means the message is queued to send at a future time and has not been dispatched yet. `accepted` means Bird has the send and is preparing to deliver. `processed` means Bird has processed the message and queued it for delivery to the recipient's mail server. `canceled` means a scheduled message was canceled before it was sent.

</Description>

</Field>

<Field name="accepted_count" type="integer" required>

<Description>

Number of recipients currently in the `accepted` state — Bird has the send and is preparing to deliver.

</Description>

</Field>

<Field name="processed_count" type="integer" required>

<Description>

Number of recipients for whom Bird has processed the message and queued it for delivery.

</Description>

</Field>

<Field name="delivered_count" type="integer" required>

<Description>

Number of recipients whose messages were accepted by the remote MTA.

</Description>

</Field>

<Field name="bounced_count" type="integer" required>

<Description>

Number of recipients that resulted in a permanent delivery failure.

</Description>

</Field>

<Field name="complained_count" type="integer" required>

<Description>

Number of recipients that reported spam.

</Description>

</Field>

<Field name="deferred_count" type="integer" required>

<Description>

Number of recipients in transient delivery deferral; the provider is retrying.

</Description>

</Field>

<Field name="rejected_count" type="integer" required>

<Description>

Number of recipients rejected before delivery. See the per-recipient `rejection_reason` field on `GET /v1/email/messages/{message_id}/recipients` for the specific cause (suppression match, transmission failure, generation failure, or policy refusal).

</Description>

</Field>

<Field name="processing_latency_ms" type="nullable integer">

<Description>

Time between Bird accepting the send and the message being processed for delivery, in milliseconds, for the fastest recipient. Null until the first recipient reaches `processed`.

</Description>

</Field>

<Field name="delivery_latency_ms" type="nullable integer">

<Description>

Time between the message being processed and the receiving mail server accepting it, in milliseconds, for the fastest delivered recipient. Null until the first recipient is delivered.

</Description>

</Field>

<Field name="total_latency_ms" type="nullable integer">

<Description>

End-to-end accept → delivered time for the fastest delivered recipient, in milliseconds. Null until the first recipient is delivered.

</Description>

</Field>

<Field name="open_count" type="integer" required>

<Description>

Total open events across all recipients.

</Description>

</Field>

<Field name="click_count" type="integer" required>

<Description>

Total click events across all recipients.

</Description>

</Field>

<Field name="tags" type="array of object">

<Description>

Structured `{name, value}` filter labels applied to this send. See EmailMessageSendRequest for the tags vs metadata distinction.

</Description>

<FieldChildren kind="response">

<Field name="name" type="string" prefix="tags." required>

<Description>

Tag name. ASCII letters, digits, underscore, and hyphen only. Case-sensitive. Maximum 32 characters.

</Description>

</Field>

<Field name="value" type="string" prefix="tags." required>

<Description>

Tag value. ASCII letters, digits, underscore, and hyphen only. Case-sensitive. Maximum 64 characters.

</Description>

</Field>

</FieldChildren>

</Field>

<Field name="metadata" type="object">

<Description>

Arbitrary JSON metadata stored on the message object and echoed in webhook payloads. See EmailMessageSendRequest for the tags vs metadata distinction.

</Description>

</Field>

<Field name="attachments" type="array of object">

<Description>

Attachment metadata for the send. Empty when no attachments were included. Raw content is not echoed; when content storage is enabled, download an attachment by its `id` via the message's attachment endpoint.

</Description>

<FieldChildren kind="response">

<Field name="id" type="string" prefix="attachments.">

<Description>

Attachment ID, stable per email send.

</Description>

</Field>

<Field name="filename" type="string" prefix="attachments." required>

<Description>

Filename as shown to the recipient.

</Description>

</Field>

<Field name="content_type" type="string" prefix="attachments.">

<Description>

Resolved MIME type at send time.

</Description>

</Field>

<Field name="size" type="integer" prefix="attachments." required>

<Description>

Decoded size in bytes.

</Description>

</Field>

<Field name="inline" type="boolean" prefix="attachments.">

<Description>

True when the attachment was sent inline via a `content_id` reference in the HTML body, false for regular file attachments.

</Description>

</Field>

<Field name="content_id" type="nullable string" prefix="attachments.">

<Description>

The Content-ID set at send time, when the attachment was inline.

</Description>

</Field>

</FieldChildren>

</Field>

<Field name="track_opens" type="boolean" required>

<Description>

Whether open tracking is enabled for this send.

</Description>

</Field>

<Field name="track_clicks" type="boolean" required>

<Description>

Whether click tracking is enabled for this send.

</Description>

</Field>

<Field name="created_at" type="string" required>

<Description>

When the send request was accepted.

</Description>

</Field>

<Field name="thread_id" type="nullable string">

<Description>

Thread this message belongs to. Null until threading is enabled.

</Description>

</Field>

<Field name="in_reply_to_message_id" type="nullable string">

<Description>

The message this one is a reply to, if any.

</Description>

</Field>

<Field name="delivered_at" type="nullable string">

<Description>

When all recipients reached a terminal delivered state, or null if not yet fully delivered.

</Description>

</Field>

<Field name="scheduled_at" type="nullable string">

<Description>

When this message is scheduled to send, for a send created with a future send time. Null for an immediate send. Stays set after the scheduled send fires.

</Description>

</Field>

</Payload>