---
title: "Append Message"
method: POST
path: "/accounts/{account_id}/chat/threads/{thread_id}/messages"
tags: ["chat"]
---

# Append Message

`POST /accounts/{account_id}/chat/threads/{thread_id}/messages`

## Request

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

Talk appends what was said and decided OUT LOUD — spoken turns,
resolved decisions, the call receipt — into the same thread as the
typed turns, so a conversation survives the panel closing. `content`
is the plain sentence the model reads as conversation; `meta` is how
the thread renders the row (kind: spoken | decision | receipt). Typed
turns are persisted by the model call itself, never through here.

Trust: a spoken row is the caller's word, like an imported transcript.
A receipt row is materialised server-side and an applied decision is
refused outright (see _materialise and app.chat_attach) — the browser
cannot claim a change it did not make, relabel one, or attach one twice.

## Path parameters

- `thread_id` string, uuid, required
- `account_id` string, uuid, required

## Request body

- AppendMessage
  - `role` string, required
  - `content` string, required
  - `meta` object, nullable

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/meetadmiral/apis/admiral-api.md) · [All operations](https://skmtc.dev/meetadmiral/apis/admiral-api/llms.txt) · [OpenAPI document](https://skmtc.dev/meetadmiral/apis/admiral-api/revisions/3cf1ee58ce50?raw)
