---
title: "List messages"
method: GET
path: "/messages"
tags: ["Messages"]
---

# List messages

`GET /messages`

Returns previously sent messages, most recent first, each carrying its status, recipient, channel, and provider. Paged by cursor.

## Query parameters

- `archived` boolean, nullable
- `cursor` string, nullable
- `event` string, nullable
- `list` string, nullable
- `messageId` string, nullable
- `notification` string, nullable
- `provider` string[]
- `recipient` string, nullable
- `status` string[]
- `tag` string[]
- `tags` string, nullable
- `tenant_id` string, nullable
- `enqueued_after` string, nullable
- `traceId` string, nullable

## Response `200`

- ListMessagesResponse
  - `paging` Paging, required
    - `cursor` string, nullable
    - `more` boolean, required
  - `results` MessageDetails[], required — An array of messages with their details.
    - `id` string, required — A unique identifier associated with the message you wish to retrieve (results from a send).
    - `status` 'CANCELED' | 'CLICKED' | 'DELAYED' | 'DELIVERED' | 'DIGESTED' | 'ENQUEUED' | 'FILTERED' | 'OPENED' | 'ROUTED' | 'SENT' | 'SIMULATED' | 'THROTTLED' | 'UNDELIVERABLE' | 'UNMAPPED' | 'UNROUTABLE', required
    - `enqueued` integer, required — A UTC timestamp at which Courier received the message request. Stored as a millisecond representation of the Unix epoch.
    - `sent` integer — A UTC timestamp at which Courier passed the message to the Integration provider. Stored as a millisecond representation of the Unix epoch.
    - `delivered` integer — A UTC timestamp at which the Integration provider delivered the message. Stored as a millisecond representation of the Unix epoch.
    - `opened` integer — A UTC timestamp at which the recipient opened a message for the first time. Stored as a millisecond representation of the Unix epoch.
    - `clicked` integer — A UTC timestamp at which the recipient clicked on a tracked link for the first time. Stored as a millisecond representation of the Unix epoch.
    - `recipient` string, required — A unique identifier associated with the recipient of the delivered message.
    - `event` string, required — A unique identifier associated with the event of the delivered message.
    - `notification` string, required — A unique identifier associated with the notification of the delivered message.
    - `error` string, nullable — A message describing the error that occurred.
    - `reason` 'BOUNCED' | 'FAILED' | 'FILTERED' | 'NO_CHANNELS' | 'NO_PROVIDERS' | 'OPT_IN_REQUIRED' | 'PROVIDER_ERROR' | 'UNPUBLISHED' | 'UNSUBSCRIBED'

## Changes

- **2026-07-29** `f76bed79a913` — 2 info
  - api tag `Messages` added
  - api tag `Sent Messages` removed
- **2026-03-12** `19330fca8fa9` — 4 breaking
  - the response property `results/items/clicked` became optional for the status `200`
  - the response property `results/items/delivered` became optional for the status `200`
  - the response property `results/items/opened` became optional for the status `200`
  - the response property `results/items/sent` became optional for the status `200`
- **2025-10-15** `e67d02739533` — 2 info
  - api tag `Sent Messages` added
  - api tag `Messages` removed
- **2025-10-07** `7143ea51f307` — 3 warning
  - added the new `BOUNCED` enum value to the `results/items/reason` response property for the response status `200`
  - added the new `FAILED` enum value to the `results/items/reason` response property for the response status `200`
  - added the new `OPT_IN_REQUIRED` enum value to the `results/items/reason` response property for the response status `200`

[Change history](https://skmtc.dev/trycourier/apis/courier/changes/messages/get.md)

---

[API](https://skmtc.dev/trycourier/apis/courier.md) · [All operations](https://skmtc.dev/trycourier/apis/courier/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/trycourier/courier/revisions/cb8586034158/schema)
