---
title: "Read the conversation with Hedge on a submission"
method: GET
path: "/broker/submissions/{submission_id}/thread"
tags: ["Submissions"]
---

# Read the conversation with Hedge on a submission

`GET /broker/submissions/{submission_id}/thread`

## Request

- Base URL: `https://api.hedgespecialty.com/api/v1`
- URL: `https://api.hedgespecialty.com/api/v1/broker/submissions/{submission_id}/thread`
- Auth: OAuth 2
  - Authorization code: `https://api.hedgespecialty.com/api/v1/oauth/authorize`
  - Client credentials
  - Token URL: `https://api.hedgespecialty.com/api/v1/oauth/token`

Everything Hedge has said to your brokerage about this submission
and everything your brokerage said back, oldest first: the
clearance email, questions, market-plan updates, quote deliveries,
your email replies, and messages exchanged with the assistant
(through the portal or `POST .../thread`). Each item is a
`ThreadMessage`; `body_text` is always plain text. Carrier and
insured correspondence is never included.

**The end-of-stream signal is the cursor, never page length.** A
non-null `next_cursor` means more messages may exist: store it and
poll again with `since=next_cursor` until you receive a null.
`next_cursor` is null only when the request proved your position
is the tail. Message ids are stable, so re-reading an older cursor
is always safe (dedupe by `id`). Prefer the `submission.message`
webhook for push delivery of the same objects.

## Path parameters

- `submission_id` string, uuid, required

## Query parameters

- `since` string
- `limit` integer

## Response `200`

One page of messages plus the follow-up cursor

- ThreadPage
  - `messages` ThreadMessage[]
    - `id` string, uuid, required
    - `channel` 'email' | 'chat', required
    - `direction` 'inbound' | 'outbound', required
    - `kind` string, required: The email's type (e.g. initial_clearance, market_plan_update, quote_delivery, broker_reply) or `chat`.
    - `occurred_at` string, date-time, required
    - `subject` string, nullable
    - `body_text` string, required: Plain text. HTML-only emails are converted server-side.
    - `from` string, nullable
    - `to` string[]
    - `attachments` object[]
      - `name` string, required
      - `download_path` string, nullable: Present when the file is a finalized document you can fetch via `GET /broker/finalized-documents/{document_id}/pdf` (relative to the base URL).
    - `in_reply_to` string, nullable: RFC 5322 Message-ID this email replied to, when known.
    - `delivered_via` 'email' | 'partner', nullable: How a Hedge-written message reached you. `partner` means it was delivered to a partner app's thread (for example Hedge Connector) instead of being emailed. Null for your own messages and chat rows.
  - `next_cursor` string, nullable

## Other responses

- `404`: Not found (or not your brokerage's)
- `422`: Invalid since cursor

## Changes

- **2026-09-28** `3156f892e627`: 1 info
  - added the optional property `messages/items/delivered_via` to the response with the `200` status
- **2026-09-20** `7928528d98b2`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/hedgespecialty/apis/hedge-submission-api/changes/broker/submissions/:submission_id/thread/get.md)

---

[API](https://skmtc.dev/hedgespecialty/apis/hedge-submission-api.md) - [All operations](https://skmtc.dev/hedgespecialty/apis/hedge-submission-api/llms.txt) - [OpenAPI document](https://skmtc.dev/hedgespecialty/apis/hedge-submission-api/revisions/beefa9cdc11c?raw)
