---
title: "Post Pluto message"
method: POST
path: "/copilot/conversations/{id}/messages"
tags: ["copilot"]
---

# Post Pluto message

`POST /copilot/conversations/{id}/messages`

Posts a user message to a thread and returns the assistant turn (with breadcrumbs and any prepared prefill action). Depending on engine mode, a routing model may classify the redacted message into a closed intent set; every assistant reply is assembled from server-owned templates, and the assistant never executes anything.

## Path parameters

- `id` string, required

## Request body

- CopilotPostMessageInput
  - `text` string, required

## Response `200`

OK

- CopilotPostMessageOutput
  - `assistant_message` CopilotMessageView
    - `breadcrumbs` CopilotBreadcrumbView[], nullable
      - `duration_ms` integer
      - `label` string
      - `start_offset_ms` integer
      - `status` 'pending' | 'active' | 'done'
    - `content` string
    - `conversation_id` string
    - `created_ts` string, date-time
    - `disclosure` string
    - `id` string
    - `intent` string
    - `prepared_action` CopilotPreparedActionView
      - `amount` MoneyfmtMoneyAmountView
        - `float` number, double, required
        - `formatted` MoneyfmtFormattedMoneyAmountView, required
          - `compact` string, required
          - `currency_sign` string, required
          - `currency_sign_position` string, required
          - `full` string, required
        - `precise` string, required
        - `symbol` string, required
        - `zero` boolean, required
      - `amount_usd` string
      - `symbol` string
      - `type` string
    - `role` string
    - `status` 'pending' | 'running' | 'completed' | 'failed'
    - `updated_ts` string, date-time
  - `user_message` CopilotMessageView
    - `breadcrumbs` CopilotBreadcrumbView[], nullable
      - `duration_ms` integer
      - `label` string
      - `start_offset_ms` integer
      - `status` 'pending' | 'active' | 'done'
    - `content` string
    - `conversation_id` string
    - `created_ts` string, date-time
    - `disclosure` string
    - `id` string
    - `intent` string
    - `prepared_action` CopilotPreparedActionView
      - `amount` MoneyfmtMoneyAmountView
        - `float` number, double, required
        - `formatted` MoneyfmtFormattedMoneyAmountView, required
          - `compact` string, required
          - `currency_sign` string, required
          - `currency_sign_position` string, required
          - `full` string, required
        - `precise` string, required
        - `symbol` string, required
        - `zero` boolean, required
      - `amount_usd` string
      - `symbol` string
      - `type` string
    - `role` string
    - `status` 'pending' | 'running' | 'completed' | 'failed'
    - `updated_ts` string, date-time

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `default` — Error response.

---

[API](https://skmtc.net/stablesea/apis/stable-sea-backend.md) · [All operations](https://skmtc.net/stablesea/apis/stable-sea-backend/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/stablesea/stable-sea-backend/versions/3feea260296c/schema)
