## List sequence messages

**get** `/v1/sequences/{id}/messages`

Returns a paginated list of a sequence’s messages: every outbound email and LinkedIn message, and each enrollment’s first reply. Results are sorted by `createdAt`, newest first. Superseded outbound attempts are not included, and list items omit content; retrieve a message to read it. Use `offset` and `limit` to paginate through results, and bracketed filters to narrow the list. See <u>[List endpoints](/using-the-api/list-endpoints/)</u> for more information about pagination.

Supported filters: `contactId`, `enrollmentId`, `sequenceStepId`, `sequenceStepType` (EMAIL, LINKEDIN_MESSAGE, LINKEDIN_INVITE), `channel` (EMAIL, LINKEDIN), `direction` (OUTBOUND, INBOUND) and `status` (AWAITING_REVIEW, SCHEDULED, QUEUED, SENT, SKIPPED, FAILED, CANCELLED), with `[equal]` or no operator; and `sentAt`, `openedAt`, `readAt`, `repliedAt`, `bouncedAt`, `acceptedAt` or `receivedAt` with `[greaterThan]`, `[greaterThanOrEqual]`, `[lessThan]` or `[lessThanOrEqual]` (ISO 8601 timestamps with a timezone). Filters are combined with AND; a `status` filter excludes incoming replies.

**[Required scope](/using-the-api/scopes/):** `sequences:read`

**[Rate limit category](/using-the-api/rate-limits/):** Search

### Path Parameters

- `id: string`

  Unique identifier of the sequence.

### Query Parameters

- `limit: optional number`

  Maximum number of records to return. Defaults to 25, maximum 25.

- `offset: optional number`

  Number of records to skip for pagination. Defaults to 0.

### Returns

- `SequenceListMessagesResponse object { data, object, totalCount }`

  - `data: array of object { id, acceptedAt, bouncedAt, 14 more }  or object { id, channel, contactId, 7 more }`

    - `OutboundMessage object { id, acceptedAt, bouncedAt, 14 more }`

      - `id: string`

        Unique identifier of the message.

      - `acceptedAt: string`

        When the connection request was accepted; null until then.

      - `bouncedAt: string`

        When the email bounced; null until then.

      - `channel: "EMAIL" or "LINKEDIN"`

        Channel the message went over.

        - `"EMAIL"`

        - `"LINKEDIN"`

      - `contactId: string`

        ID of the contact.

      - `createdAt: string`

        When the message was created, or when a reply was received. Lists sort by this field, newest first.

      - `direction: "OUTBOUND"`

        Always `OUTBOUND`.

        - `"OUTBOUND"`

      - `enrollmentId: string`

        ID of the enrollment the message belongs to.

      - `openedAt: string`

        When the email was opened; null until then.

      - `readAt: string`

        When the LinkedIn message was read; null until then.

      - `reference: object { id, objectType }  or object { id, objectType }`

        The email or LinkedIn message record behind this sequence message, readable with <u>[Retrieve an email](/api/resources/email/methods/retrieve)</u> or <u>[Retrieve a message](/api/resources/message/methods/retrieve)</u> under their own scopes; null when there is none.

        - `Email object { id, objectType }`

          - `id: string`

            ID of the email.

          - `objectType: "email"`

            Always `email`.

            - `"email"`

        - `Message object { id, objectType }`

          - `id: string`

            ID of the message.

          - `objectType: "message"`

            Always `message`.

            - `"message"`

      - `repliedAt: string`

        When the contact replied to this message; null until then.

      - `sentAt: string`

        When the message was sent; null until then.

      - `sequenceStepId: string`

        ID of the step that sent the message or, for a reply, the step it replied to.

      - `sequenceStepType: "EMAIL" or "LINKEDIN_MESSAGE" or "LINKEDIN_INVITE"`

        Type of that step.

        - `"EMAIL"`

        - `"LINKEDIN_MESSAGE"`

        - `"LINKEDIN_INVITE"`

      - `status: "AWAITING_REVIEW" or "SCHEDULED" or "QUEUED" or 4 more`

        `AWAITING_REVIEW` is waiting for approval; `SCHEDULED` is composed and waiting for its send time; `QUEUED` is due and waiting on the sender. `SENT`, `SKIPPED`, `FAILED` and `CANCELLED` are final.

        - `"AWAITING_REVIEW"`

        - `"SCHEDULED"`

        - `"QUEUED"`

        - `"SENT"`

        - `"SKIPPED"`

        - `"FAILED"`

        - `"CANCELLED"`

      - `statusChangedAt: string`

        When `status` last changed.

    - `Reply object { id, channel, contactId, 7 more }`

      - `id: string`

        Unique identifier of the message.

      - `channel: "EMAIL" or "LINKEDIN"`

        Channel the message went over.

        - `"EMAIL"`

        - `"LINKEDIN"`

      - `contactId: string`

        ID of the contact.

      - `createdAt: string`

        When the message was created, or when a reply was received. Lists sort by this field, newest first.

      - `direction: "INBOUND"`

        Always `INBOUND`.

        - `"INBOUND"`

      - `enrollmentId: string`

        ID of the enrollment the message belongs to.

      - `receivedAt: string`

        When the reply was received.

      - `reference: object { id, objectType }  or object { id, objectType }`

        The email or LinkedIn message record behind this sequence message, readable with <u>[Retrieve an email](/api/resources/email/methods/retrieve)</u> or <u>[Retrieve a message](/api/resources/message/methods/retrieve)</u> under their own scopes; null when there is none.

        - `Email object { id, objectType }`

          - `id: string`

            ID of the email.

          - `objectType: "email"`

            Always `email`.

            - `"email"`

        - `Message object { id, objectType }`

          - `id: string`

            ID of the message.

          - `objectType: "message"`

            Always `message`.

            - `"message"`

      - `sequenceStepId: string`

        ID of the step that sent the message or, for a reply, the step it replied to.

      - `sequenceStepType: "EMAIL" or "LINKEDIN_MESSAGE" or "LINKEDIN_INVITE"`

        Type of that step.

        - `"EMAIL"`

        - `"LINKEDIN_MESSAGE"`

        - `"LINKEDIN_INVITE"`

  - `object: "list"`

    - `"list"`

  - `totalCount: number`

### Example

```http
curl https://api.lightfield.app/v1/sequences/$ID/messages \
    -H 'Lightfield-Version: 2026-03-01' \
    -H "Authorization: Bearer $API_KEY"
```

#### Response

```json
{
  "data": [
    {
      "id": "id",
      "acceptedAt": "acceptedAt",
      "bouncedAt": "bouncedAt",
      "channel": "EMAIL",
      "contactId": "contactId",
      "createdAt": "createdAt",
      "direction": "OUTBOUND",
      "enrollmentId": "enrollmentId",
      "openedAt": "openedAt",
      "readAt": "readAt",
      "reference": {
        "id": "id",
        "objectType": "email"
      },
      "repliedAt": "repliedAt",
      "sentAt": "sentAt",
      "sequenceStepId": "sequenceStepId",
      "sequenceStepType": "EMAIL",
      "status": "AWAITING_REVIEW",
      "statusChangedAt": "statusChangedAt"
    }
  ],
  "object": "list",
  "totalCount": -9007199254740991
}
```
