---
title: "List events for a message"
method: GET
path: "/v1/amb/messages/{message_id}/events"
tags: ["amb-messages"]
---

# List events for a message

`GET /v1/amb/messages/{message_id}/events`

## Request

- Base URL: `https://us1.platform.bird.com`
- URL: `https://us1.platform.bird.com/v1/amb/messages/{message_id}/events`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `bird_session`

Returns a message's lifecycle events in chronological order, one entry per status transition (`amb.accepted`, `amb.sent`, `amb.send_failed`, `amb.received`). The timeline is bounded and returned in full, so this list is not paginated. Event history does not expire based on age.

## Query parameters

- `type` string: Message timeline event type: - `amb.accepted`: The API accepted the request. - `amb.sent`: The message was handed to Apple. - `amb.send_failed`: Apple refused the message, or its send attempts were exhausted. - `amb.rejected`: Bird refused the message before any send attempt. - `amb.received`: An inbound message arrived from the customer. This is an open enum. Accept unrecognized values.

## Headers

- `X-Workspace-Id` string
- `X-Organization-Id` string

## Response `200`

Event timeline for this message.

- AMBMessageEventList
  - `data` AMBMessageEvent[], required: The message's events, oldest first. Not paginated: a message's timeline is bounded and returned in full.
    - `id` string, required
    - `type` string, required: Message timeline event type: - `amb.accepted`: The API accepted the request. - `amb.sent`: The message was handed to Apple. - `amb.send_failed`: Apple refused the message, or its send attempts were exhausted. - `amb.rejected`: Bird refused the message before any send attempt. - `amb.received`: An inbound message arrived from the customer. This is an open enum. Accept unrecognized values.
    - `occurred_at` string, date-time, required: When this event occurred.
    - `error` AMBError, nullable: Failure detail for a message or invitation that could not be sent or was rejected.
      - `code` string, required: Machine-readable reason a send failed, in one of two namespaces: `bird:` for a reason Bird's own pipeline assigned (for example `bird:business_not_registered`), or `apple:` followed by the HTTP status Apple's API returned for the send attempt (for example `apple:404`). This is an open, growing set in both namespaces; accept unrecognized values.
      - `description` string, required: The failure in words. Free-form, so branch on `code` and show this to a human.
      - `occurred_at` string, date-time, required: When the failure occurred.

## Other responses

- `400`: Bad request
- `401`: Authentication required
- `403`: Insufficient permissions
- `404`: Resource not found
- `422`: The request has invalid field values, violates a business rule, or carries a query parameter the endpoint does not declare. Field validation errors use `type: validation_error` and include the affected fields in `details`. Business-rule errors identify the failed rule in `type`.
- `429`: Rate limit exceeded
- `500`: Internal server error
- `503`: The service is temporarily unavailable. If `Retry-After` is present, wait for that delay before retrying; otherwise, retry with exponential backoff. Reuse the same idempotency key and request when retrying a mutation.

---

[API](https://skmtc.dev/messagebird/apis/bird-api.md) · [All operations](https://skmtc.dev/messagebird/apis/bird-api/llms.txt) · [OpenAPI document](https://skmtc.dev/messagebird/apis/bird-api/revisions/6dfce1179799?raw)
