---
title: "Post a message to an existing chat and stream the reply"
method: POST
path: "/v1/chats/{chatId}"
tags: ["Chats"]
---

# Post a message to an existing chat and stream the reply

`POST /v1/chats/{chatId}`

## Path parameters

- `chatId` string, required

## Request body

- SendChatMessageRequest
  - `message` string, required
  - `model` 'auto' | 'anthropic/claude-opus-5' | 'anthropic/claude-opus-4.8' | 'anthropic/claude-sonnet-5' | 'anthropic/claude-sonnet-4.6' | 'anthropic/claude-haiku-4.5' | 'openai/gpt-5.4' | 'openai/gpt-5.5'
  - `enableThinking` boolean
  - `thinkingLevel` 'off' | 'low' | 'medium' | 'high'
  - `timezone` string
  - `context` union[]
    - union
      - object
        - `type` 'github-repo', required
        - `integrationId` string, required
        - `owner` string, required
        - `repo` string, required
      - object
        - `type` 'linear-team', required
        - `integrationId` string, required
        - `teamName` string
      - object
        - `type` 'mcp-server', required
        - `integrationId` string, required
        - `name` string, required
  - `externalChannelId` ExternalChannelId, nullable
    - `source` 'discord' | 'slack' | 'dashboard', required
    - `id` string

## Response `200`

Streaming UI message stream (newline-delimited JSON chunks). Read the `X-Chat-Id` response header for the chat id, or take it from the `start` chunk's `messageMetadata.chatId`.

## Other responses

- `400` — Invalid request body
- `401` — Missing or invalid API key
- `403` — Forbidden, or usage limit reached
- `404` — Chat not found
- `429` — Rate limit exceeded. This endpoint allows 30 requests per 1 minute per organization.
- `500` — Failed to process chat request
- `503` — Authentication service unavailable

---

[API](https://skmtc.net/usenotra/apis/notra-api.md) · [All operations](https://skmtc.net/usenotra/apis/notra-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/usenotra/notra-api/revisions/4e07496e06b0/schema)
