---
title: "Send"
method: POST
path: "/harness/send"
tags: ["harness"]
---

# Send

`POST /harness/send`

## 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/send`
- Auth: HTTP bearer

## Request body

- HarnessSendRequest
  - `athlete_slug` string, required
  - `content` string, required
  - `client_id` string, uuid, nullable
  - `entry` string, nullable
  - `exercise_key` string, nullable
  - `week` boolean
  - `week_start` string, date, nullable

## Response `202`

Successful Response

- HarnessSendResponse: The fire-and-forget 202 (ATH-454): the *persisted user message* alone, with its real ``seq``/``id``/``created_at`` so the client reconciles its optimistic bubble without waiting for Realtime. The reply arrives over Realtime like every other message.
  - `message` 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

## 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)
