---
title: "Send Agent message"
method: POST
path: "/v1/agent-chats/{chatId}/messages"
tags: ["Agent"]
---

# Send Agent message

`POST /v1/agent-chats/{chatId}/messages`

## Request

- Base URL: `https://api.inth.com`
- URL: `https://api.inth.com/v1/agent-chats/{chatId}/messages`
- Auth: HTTP bearer

Sends a follow-up message to one of your chats and answers 202 once the agent has accepted it. A chat answers one message at a time: a send while `status` is `running` answers 409. Replies use organization credits. Requires agents.write and a user token; `messages` and `title` are empty unless the token also has agents.read.

## Path parameters

- `chatId` string, required

## Request body

- union
  - object
    - `message` string, required
    - `attachmentIds` string[]: Ordered ready attachment IDs owned by the caller. Retain the exact ordered list for retries.
    - `clientMessageId` string, uuid: A UUID v4 you choose. Reuse the exact ID, text and ordered attachmentIds to reconcile an uncertain response. The same ID with changed content returns409. Use a new ID for a distinct turn.
  - object
    - `attachmentIds` string[], required: Ordered ready attachment IDs owned by the caller. Retain the exact ordered list for retries.
    - `message` string, required
    - `clientMessageId` string, uuid: A UUID v4 you choose. Reuse the exact ID, text and ordered attachmentIds to reconcile an uncertain response. The same ID with changed content returns409. Use a new ID for a distinct turn.

## Response `202`

The accepted chat.

- object
  - `success` true, required
  - `data` AgentChat, required
    - `id` string, required
    - `organizationId` string, required
    - `title` string, required
    - `status` 'idle' | 'running', required
    - `messages` object[], required
      - `activities` object[]
        - `detail` string
        - `href` string
        - `id` string, required
        - `kind` 'research' | 'search' | 'source' | 'other', required
        - `status` 'running' | 'completed' | 'failed', required
        - `title` string, required
      - `author` object
        - `id` string, required
        - `name` string, required
      - `attachments` object[]
        - `id` string, required
        - `fileName` string, required
        - `mediaType` 'application/json' | 'application/pdf' | 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' | 'image/gif' | 'image/jpeg' | 'image/png' | 'image/webp' | 'text/csv' | 'text/markdown' | 'text/plain', required
        - `sizeBytes` integer, required
      - `clientMessageId` string
      - `id` string, required
      - `research` object
        - `passages` object[]
          - `id` string, required
          - `receiptId` string, required
          - `text` string, required
          - `truncated` boolean, required
        - `anchoring` 'message' | 'paragraph', required
        - `anchors` object[], required
          - `claimId` string, required
          - `paragraphIndex` integer, required
        - `answerConfidence` 'degraded' | 'partial' | 'evidence-linked' | 'verified', required
        - `answerSha256` string, required
        - `claims` object[], required
          - `claimId` string, required
          - `issueId` string
          - `jurisdiction` string
          - `proposition` string
          - `qualification` string, nullable
          - `receiptIds` string[]
          - `status` 'contradicted' | 'qualified' | 'supported' | 'unsupported', required
        - `coverage` object, required
          - `qualified` integer, required
          - `supported` integer, required
          - `unresolvedCells` integer, required
        - `freezeReason` string
        - `mode` 'app-composed' | 'forced-failure' | 'model-prose' | 'model-prose-degraded-anchoring' | 'oversized-evidence', required
        - `plannerQualifications` string[]
        - `receipts` object[], required
          - `authority` string
          - `date` string, nullable
          - `dateKind` 'accessed' | 'effective' | 'published'
          - `docType` string
          - `id` string, required
          - `title` string, required
          - `url` string
        - `requiredNotices` string[]
        - `synthesisRequirementIds` string[]
        - `truncated` boolean
        - `unresolvedGaps` object[]
          - `description` string
          - `issueId` string, required
          - `jurisdiction` string, required
          - `status` string
        - `version` 1, required
      - `role` 'assistant' | 'user', required
      - `text` string, required
      - `failed` boolean, required
    - `dashboardUrl` string, required
    - `updatedAt` string, required
    - `visibility` 'personal' | 'organization', required
    - `viewerIsOwner` boolean, required
    - `owner` object, nullable, required
      - `id` string, required
      - `name` string, required

## Other responses

- `400`: The request payload or parameters are invalid.
- `401`: Authentication is missing, invalid, or expired.
- `402`: The organization does not hold enough credits. `details` carries the remaining and required amounts. Enable automatic top-ups or buy credits in the dashboard.
- `403`: The credential is valid but may not perform the operation. `INSUFFICIENT_SCOPE`: the credential was never granted the capability the operation needs. `details.requiredScope` names it, and the `WWW-Authenticate` header carries `Bearer error="insufficient_scope"`. An OAuth client fixes this by requesting the scope; an organization API key cannot gain it. `FORBIDDEN`: the capability is present but the membership behind the credential lacks the role, or the resource belongs to another organization.
- `404`: The requested resource was not found.
- `409`: The request conflicts with the current resource state.
- `413`: The request body exceeds the 1 MB limit.
- `429`: The rate limit was exceeded. API key limits are set by plan tier (Starter 600/min, Pro 1500/min, Enterprise 3000/min). Check the Retry-After header before retrying.
- `500`: An unexpected internal error occurred.
- `503`: The capability is temporarily paused by an operator. Retry later.

## Changes

- **2026-10-31** `a3f4100e14c9`: 2 breaking, 11 info
  - the `data/dashboardUrl` response's property format changed from `uri` to no format for status `202`
  - the `data/updatedAt` response's property format changed from `date-time` to no format for status `202`
  - added the new optional request property `attachmentIds`
  - added `subschema #1, subschema #2` to the request body `anyOf` list
  - …9 more
- **2026-10-23** `e3427b73824e`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/inth/apis/inth-api/changes/v1/agent-chats/:chatId/messages/post.md)

---

[API](https://skmtc.dev/inth/apis/inth-api.md) - [All operations](https://skmtc.dev/inth/apis/inth-api/llms.txt) - [OpenAPI document](https://skmtc.dev/inth/apis/inth-api/revisions/5a1be8d43402?raw)
