---
title: "Post Message Stream"
method: POST
path: "/chat/threads/{thread_id}/messages/stream"
tags: ["chat"]
---

# Post Message Stream

`POST /chat/threads/{thread_id}/messages/stream`

## Request

- Base URL: `https://api.nicheangle.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.nicheangle.com/chat/threads/{thread_id}/messages/stream`
- Auth: none declared

The desk's message turn (H-1, now THE message route — the non-streaming
twin is gone; the web cut over). Appends the user's turn, runs the desk
driver, and streams the reply PROSE token-by-token over SSE (`delta` events),
then a terminal `done` event with the persisted messages. The pipeline phase
feed (run SSE) is unchanged — it still drives 'what's happening'. [IP] the
stream carries only assistant prose (run_agent_streaming's text deltas); the
tool channel never leaves the server.

Recovery contract: the user message is persisted before the driver runs, and
the driver turn runs on its OWN db session in a task that survives client
disconnect — so a dropped stream is recovered by refetching the thread,
never by re-sending (which would run the turn twice).

## Path parameters

- `thread_id` string, uuid, required

## Headers

- `authorization` string, nullable

## Request body

- PostMessageRequest
  - `content` string, required
  - `turn_id` string, nullable

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/nicheangle/apis/signal-api.md) · [All operations](https://skmtc.dev/nicheangle/apis/signal-api/llms.txt) · [OpenAPI document](https://skmtc.dev/nicheangle/apis/signal-api/revisions/ed8b47ff5891?raw)
