---
title: "List messages in a thread"
method: GET
path: "/v1/users/{user_id}/threads/{thread_id}/messages"
tags: ["Threads"]
---

# List messages in a thread

`GET /v1/users/{user_id}/threads/{thread_id}/messages`

## Request

- Base URL: `http://0.0.0.0:3000`
- URL: `http://0.0.0.0:3000/v1/users/{user_id}/threads/{thread_id}/messages`
- Auth: none declared

Returns a page of messages belonging to the specified thread, in thread order.

**Path parameters:**
- `user_id` — authenticated user's UUID (must match the caller's user)
- `thread_id` — opaque thread ID (`thr_xxx`) or numeric for backwards compatibility

**Default expand:** `body_html,headers` — overrideable via the `expand` query param. Add `raw` when you need RFC 5322 MIME.

**Response fields:** identical shape to `GET /v1/users/:user_id/messages`, so a mailbox UI can switch between list + thread views without reshaping its parser.

**Ordering:** `received_at` ASC — earliest message first.

**Pagination (cursor-only):** default limit 50, max 100. Pass `pagination.next_cursor` back as `?cursor=` to walk forward. `has_more=false` means the last page.

## Path parameters

- `user_id` string, uuid, required
- `thread_id` string, required

## Query parameters

- `limit` string
- `cursor` string
- `expand` string

## Response `200`

Default Response

- object
  - `success` true, required
  - `data` object[], required
    - `id` string, required
    - `integration_id` string, required
    - `body_text` string, nullable
    - `body_html` string, nullable
    - `raw` string, nullable
    - `headers` object[], nullable
      - `name` string, required
      - `value` string, required
    - `subject` string, nullable, required
    - `received_at` string, required
    - `parent_message_id` string, nullable, required
    - `thread_id` string, nullable, required
    - `thread_position` number, nullable, required
    - `is_bot` boolean, required
    - `conversation_id` string, nullable, required
    - `primary_entity_id` string, nullable, required
    - `entity_ids` string[], required
    - `sender_name` string, nullable, required
    - `sent_by` string, required
    - `display_source` string, nullable, required
  - `pagination` union, required
    - object
      - `limit` number, required
      - `has_more` true, required
      - `next_cursor` string, required
    - object
      - `limit` number, required
      - `has_more` false, required

## Other responses

- `400`: Default Response
- `403`: Default Response
- `404`: Default Response
- `500`: Default Response

---

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