---
title: "Get Thread Response"
method: GET
path: "/v1/omni-ai/threads/{thread_id}/response"
tags: ["Omni AI"]
---

# Get Thread Response

`GET /v1/omni-ai/threads/{thread_id}/response`

## Request

- Base URL: `https://api.clearstreet.com`
- URL: `https://api.clearstreet.com/v1/omni-ai/threads/{thread_id}/response`
- Auth: HTTP bearer

Returns the running response, or else the next queued response. Poll it
while a thread is open to follow every response in order, including answers
that start without a request: a response with no `user_message_id` presents
a background result, such as a subagent's report. Refresh messages when any
response ends. An idle owned thread returns HTTP 200 with `data: null`.

## Path parameters

- `thread_id` string, uuid, required

## Query parameters

- `account_id` integer

## Response `200`

Current response snapshot or idle thread

- object
  - `error` ApiError: A direct mapping of tonic::Status, for use in HTTP responses.
    - `code` integer, required: The error code is used to identify the nature of the error. It corresponds to an HTTP status code.
    - `details` object[]
    - `message` string, required: A human-readable message providing more details about the error.
  - `metadata` ResponseMetadata, required: Metadata for the response. This will always contain a request ID which can be used to identify the request to Clear Street for tracing, and optionally may include pagination data.
    - `next_page_token` string, byte, nullable: Base64URL-encoded pagination token
    - `page_number` integer, nullable: Pagination. Included if this was a GET (list) response
    - `previous_page_token` string, byte, nullable: Base64URL-encoded pagination token
    - `request_id` string, required: A unique ID for this request, generated upon ingestion of the request.
    - `total_items` integer, nullable: Total number of items available (not just in this page).
    - `total_pages` integer, nullable: Total number of pages available.
  - `data` Response, required: Dynamic pollable response.
    - `content` ResponseContent: Dynamic response content container. May include thinking parts.
      - `parts` ResponseContentPart[], required
        - union: Dynamic content part visible on a pollable response.
          - object: Text content part.
            - `text` string, required
            - `type` 'text', required
          - object: Thinking content part shown on dynamic response polling.
            - `thoughts` string[], required
            - `type` 'thinking', required
          - object: Structured action content part.
            - `action` union, required: Structured actions that Omni AI can return to clients. These actions provide machine-readable instructions for the client to execute, such as prefilling an order ticket, opening a chart, or navigating to a route.
              - …
            - `action_id` string, uuid, required
            - `clicked` boolean, required: Whether the current user clicked this action.
            - `clicked_item_ids` string[]: IDs of nested items clicked by the current user.
            - `item_id` string, uuid, nullable: Interaction-tracking identity. Absent on messages created before tracking. When a null/undefined value is observed, it indicates that there is no available data.
            - `type` 'structured_action', required
          - object: Chart payload content part.
            - `payload` ChartPayload, required: Typed chart payload rendered inline in assistant content.
              - …
            - `type` 'chart', required
          - object: Suggested actions payload content part.
            - `payload` SuggestedActionsPayload, required: Suggested follow-up buttons rendered at the end of an assistant message.
              - …
            - `type` 'suggested_actions', required
          - object: Escape-hatch custom payload content part.
            - `payload` object, required
            - `type` 'custom', required
    - `error` ErrorStatus: Shared sanitized error payload.
      - `code` string, required: `FAILED`, or `execution_interrupted` when Omni lost the worker running the response; partial content is kept; send the message again.
      - `details` object, nullable: When a null/undefined value is observed, it indicates it does not apply.
      - `message` string, required
    - `id` string, uuid, required
    - `output_message_id` string, uuid, nullable: When a null/undefined value is observed, it indicates it does not apply.
    - `status` 'queued' | 'running' | 'succeeded' | 'failed' | 'canceled' | 'steered' | 'merged', required: Dynamic lifecycle status for a pollable response. `succeeded`, `failed`, `canceled`, `steered` and `merged` are terminal. `steered`: the response ended as written because the user sent a newer message, and a later response in the thread continues the work. `merged`: the response ended without text, and a later response answers its message. Treat an unknown status as terminal.
    - `thread_id` string, uuid, required
    - `user_message_id` string, uuid, nullable: The user message this response answers. Omitted when the response presents a background result, such as a subagent's report, and answers no user message; its output message then appears in the thread without a preceding request. When a null/undefined value is observed, it indicates it does not apply.

## Other responses

- `400`: Invalid request or supplied account ID
- `401`: Authentication required
- `403`: Caller lacks linked-account access
- `404`: Resource not found or not owned by caller
- `409`: Thread scope changed or conflicting retry; refresh before retrying
- `500`: Internal server error

## Changes

- **2026-11-04** `52e77ea7d731`: 2 breaking, 2 warning
  - the response property `allOf[subschema #2]/data/oneOf[#/components/schemas/Response]/user_message_id` became nullable for the status `200`
  - the response property `allOf[subschema #2]/data/oneOf[#/components/schemas/Response]/user_message_id` became optional for the status `200`
  - added the new `merged` enum value to the `allOf[subschema #2]/data/oneOf[#/components/schemas/Response]/status` response property for the response status `200`
  - added the new `steered` enum value to the `allOf[subschema #2]/data/oneOf[#/components/schemas/Response]/status` response property for the response status `200`
- …earlier changes not shown

[Operation history](https://skmtc.dev/clear-street/apis/clear-street-trading-api/changes/v1/omni-ai/threads/:thread_id/response/get.md)

---

[API](https://skmtc.dev/clear-street/apis/clear-street-trading-api.md) - [All operations](https://skmtc.dev/clear-street/apis/clear-street-trading-api/llms.txt) - [OpenAPI document](https://skmtc.dev/clear-street/apis/clear-street-trading-api/revisions/52e77ea7d731?raw)
