---
title: "Get Thread"
method: GET
path: "/harness/thread"
tags: ["harness"]
---

# Get Thread

`GET /harness/thread`

## Request

- Base URL: `https://api.getathly.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.getathly.com/harness/thread`
- Auth: HTTP bearer

## Query parameters

- `since_seq` integer
- `athlete_slug` string, required

## Response `200`

Successful Response

- HarnessThreadResponse: Messages after the cursor, plus the pair's turn-owed marker — the composing indicator's page-load seed (timestamptz UTC, unlike message ``created_at``); Realtime UPDATEs on ``harness.user_profiles`` keep it live afterward. ``None`` means the coach is not composing.
  - `messages` HarnessMessage[], required
    - `seq` integer, required
    - `id` string, required
    - `role` string, required
    - `content` string, required
    - `origin` 'cli', nullable
    - `created_at` string, date-time, required
    - `session_ref` SessionRef: A user message's structured link to one training surface. Session refs carry a timeline entry and optional exercise (ATH-466); week refs carry that week's Monday and how many weeks after the send's own week it was (``week_offset``: 0 this week, 1 next). Display names, dates and the offset are frozen at send time, and them going stale after a rename, a replan or the week passing is fine.
      - `entry` string, nullable
      - `exercise_key` string, nullable
      - `session_title` string, nullable
      - `exercise_name` string, nullable
      - `entry_date` string, date, nullable
      - `week_start` string, date, nullable
      - `week_offset` integer
    - `call` HarnessCall: A voice call as the app shows it (ATH-531): its card's state. Real, tz-aware time. ``summary_status`` says where the summary stands (``pending``, ``done`` with ``summary`` set, or ``failed``); ``athlete_summary`` is what the card shows, written with it. The app follows it over the Realtime UPDATE on ``harness.calls``.
      - `id` string, required
      - `status` 'live' | 'ended', required
      - `started_at` string, date-time, required
      - `ended_at` string, date-time, nullable
      - `summary` string, nullable
      - `athlete_summary` string, nullable
      - `summary_status` 'pending' | 'done' | 'failed', required
  - `composing_since` string, date-time, nullable
  - `last_read_seq` integer
  - `checkin_ask_dismissed_at` string, date-time, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/getathly/apis/athly-api.md) - [All operations](https://skmtc.dev/getathly/apis/athly-api/llms.txt) - [OpenAPI document](https://skmtc.dev/getathly/apis/athly-api/revisions/6adfdc258d75?raw)
