email-messages

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.
get/v1/email/messages

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

limitinteger

Maximum number of items to return per page.

starting_afterstring

Cursor from the next_cursor field of a previous list response. Returns items immediately after the cursor position in the current sort order.

ending_beforestring

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.

created_afterstring date-time
Example:2026-05-01T00:00:00Z

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.

created_beforestring date-time
Example:2026-06-01T00:00:00Z

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.

broadcast_idstring
Example:eb_01krdgeqcxet5s7t44vh8rt9mg

Filter messages by broadcast ID.

status'scheduled' | 'accepted' | 'processed' | 'deferred' | 'delivered' | 'partial_failure' | 'bounced' | 'complained' | 'rejected' | 'canceled'

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.

tagstring[]

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.

category'marketing' | 'transactional'

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.

tostring email
Example:delivered@messagebird.dev

Filter by recipient address. Exact match against any to/cc/bcc recipient on the message. The address is normalized to lowercase before comparison.

fromstring email
Example:noreply@acme.com

Filter by sender address. Exact match against the message from field. The address is normalized to lowercase before comparison.

Headers

X-Workspace-Idstring

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.

X-Organization-Idstring

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.

next_cursorstring nullable required

Cursor for the next page. Pass back as starting_after to advance forward. null when no next page exists.

prev_cursorstring nullable required

Cursor for the previous page. Pass back as ending_before to step backward. null when no previous page exists.

refresh_cursorstring nullable required

Refresh anchor, the first row of this response. Pass back as ending_before to fetch what precedes it in the current sort order. On a newest-first sort those are the items that have appeared since; on any other sort they are the items that sort earlier, so refreshing such a list means re-fetching it instead. Non-null whenever data is non-empty; null only on an empty page. Distinct from prev_cursor.

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.