---
title: "List messages in a thread"
method: GET
path: "/threads/{threadId}/messages"
tags: ["Messages"]
---

# List messages in a thread

`GET /threads/{threadId}/messages`

List messages in a thread with cursor pagination.

## Path parameters

- `threadId` string, uuid, required — Thread ID to list messages for.

## Query parameters

- `limit` integer — Maximum number of messages to return per page.
- `cursor` string, uuid — Cursor from a previous response's nextCursor to fetch the next page.

## Response `200`

OK

- object
  - `messages` object[], required
    - `id` string, uuid, required
    - `role` 'user' | 'assistant', required
    - `content` union[], required
      - union
        - object
          - `type` 'message', required
          - `message` string, required
        - object
          - `type` 'reasoning', required
          - `reasoning` string, required
          - `status` 'in_progress' | 'complete'
        - object
          - `type` 'tool_call', required
          - `name` string, required
          - `params` unknown
          - `result` unknown
          - `status` 'in_progress' | 'success' | 'error' | 'unknown'
          - `toolCallId` string
          - `durationMs` number
        - object
          - `type` 'artifact', required
          - `name` 'timeseries' | 'table' | 'log_detail' | 'integration_required' | 'alert_card' | 'issue_card' | 'mdx', required
          - `data` unknown
          - `toolCallId` string
        - object
          - `type` 'fork', required
          - `sourceThreadId` string, required
          - `sourceMessageId` string, required
          - `sourceThreadTitle` string, nullable, required
        - object
          - `type` 'summary', required
          - `summary` string, required
        - object
          - `type` 'slack_context', required
          - `channelId` string, required
          - `isTruncated` boolean
          - `messages` object[], required
            - `timestamp` string, required
            - `slackUserId` string
            - `displayName` string, required
            - `text` string, required
            - `isBot` boolean, required
            - `files` object[]
              - …
        - object
          - `type` 'teams_context', required
          - `conversationId` string, required
          - `isTruncated` boolean
          - `messages` object[], required
            - `activityId` string
            - `displayName` string, required
            - `text` string, required
            - `isBot` boolean, required
            - `createdDateTime` string
    - `source` 'slack' | 'teams' | 'linear' | 'github' | 'app' | 'mcp' | 'agent' | 'api' | 'cli' | 'web' | 'sdk' | 'bitbucket' | 'system', required
    - `createdAt` string, date-time, required
  - `nextCursor` string, uuid, nullable, required — Pass as 'cursor' to fetch the next page. Null when there are no more results.

---

[API](https://skmtc.dev/sazabi/apis/sazabi-public-api.md) · [All operations](https://skmtc.dev/sazabi/apis/sazabi-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/sazabi/sazabi-public-api/revisions/1d12b71c735a/schema)
