List messages
Returns the workspace's sent and scheduled messages, newest first, as a cursor page. Each item has the aggregate delivery status and per-state recipient counts. Message bodies are omitted.
Combine filters to narrow the page:
- Delivery status.
- Category.
- Tag.
- The broadcast that sent the messages.
- An exact to or from address.
- A created_after or created_before time window.
Request
- Base URL: https://us1.platform.bird.com
- URL: https://us1.platform.bird.com/v1/email/messages
- Auth: one of:
- HTTP bearer
- API key in cookie bird_session
Query parameters
Maximum number of items to return per page.
Cursor from the next_cursor field of a previous list response. Returns items immediately after the cursor position in the current sort order.
Cursor from the prev_cursor or refresh_cursor field of a previous list response. Returns items immediately before the cursor position in the current sort order. prev_cursor returns the preceding page. refresh_cursor anchors at the first row of that response, which on a newest-first sort is how to fetch the items that have appeared since.
Limits the response to resources created at or after this timestamp. Combine it with created_before to select a time window. Use an RFC 3339 timestamp with a timezone offset.
Limits the response to resources created before this timestamp. Combine it with created_after to select a time window. Use an RFC 3339 timestamp with a timezone offset.
Filter messages by broadcast ID.
Aggregate delivery status of an email, derived from its recipients' states.
In flight:
- scheduled: The message is queued to send at a future time and has not been dispatched yet.
- accepted: The initial status of an immediate send. The message is queued for its recipients.
- processed: Delivery is underway, so at least one recipient's message is on its way out and none has failed.
- deferred: At least one recipient's mailbox provider asked for a retry, and delivery attempts continue.
Final:
- delivered: Every recipient's mail server accepted the message.
- bounced: Every recipient permanently failed (bounced or was rejected).
- rejected: Every recipient was rejected before a delivery attempt (for example, all recipients were suppressed).
- partial_failure: Some recipients permanently failed while others were delivered or are still in flight.
- canceled: A scheduled message was canceled before it was sent.
complained takes precedence over every other status: at least one recipient reported the message as spam, regardless of what happened to the rest.
Filter by aggregate delivery status.
Filter by tag. Accepts name to match any record carrying that tag name, or name:value to match a specific tag pair (for example category:welcome). Repeat the parameter to add more tags. A record must match every tag listed to be returned.
Content classification, which controls suppression policy:
- marketing: Blocks on all suppression reasons.
- transactional: Allows delivery through complaint and unsubscribe suppressions, for receipts, password resets, and similar operational mail.
Filter by category.
Filter by recipient address. Exact match against any to/cc/bcc recipient on the message. The address is normalized to lowercase before comparison.
Filter by sender address. Exact match against the message from field. The address is normalized to lowercase before comparison.
Headers
Workspace context for the request. Required for dashboard authentication and master keys. Workspace keys and access tokens already identify their workspace; send that workspace or omit the header. A different one is rejected.
Organization context for the request. Required for dashboard authentication. An API key or access token carries its own organization, so send either that organization or no header at all; a different one is rejected.
Response
Paginated list of messages.
Example response
{
"data": [
{
"id": "em_01krdgeqcxet5s7t44vh8rt9mg",
"from": {
"email": "onboarding@messagebird.dev",
"name": "Bird"
},
"to": [
{
"email": "delivered@messagebird.dev"
}
],
"subject": "Hello from Bird",
"category": "marketing",
"status": "accepted",
"broadcast_id": "eb_01krdgeqcxet5s7t44vh8rt9mg",
"accepted_count": 1,
"processed_count": 0,
"delivered_count": 0,
"bounced_count": 0,
"complained_count": 0,
"deferred_count": 0,
"rejected_count": 0,
"open_count": 0,
"click_count": 0,
"track_opens": false,
"track_clicks": false,
"created_at": "2026-07-01T12:00:00Z"
}
],
"next_cursor": "eyJ2IjoxLCJzIjoiXCIyMDI2LTA1LTI1VDE0OjAzOjEwWlwiIiwiaSI6IjAxOTJmM2IxLTRjN2UtN2EyYi05ZDYxLThmM2E1YzJlN2I0MCJ9",
"refresh_cursor": "eyJ2IjoxLCJzIjoiXCIyMDI2LTA1LTI1VDE2OjQyOjAxWlwiIiwiaSI6IjAxOTJmM2IxLTllMDQtN2NkMy1iODE3LTJhNmY0ZDFjOGUwOSJ9"
}Changes
No recorded changes to this operation across all 2 revisions of this API.