# `POST /modelconversation/{id}/message` Protected. Requires a valid session cookie (`credentials: 'include'`). Post a user message Appends a message with role `user` to the conversation. Refused with 409 unless the conversation state is `idle`. ## Path parameters | Param | Required | Type | Description | |-------|----------|------|-------------| | `id` | yes | integer | Conversation ID | ## Body (JSON) | Field | Required | Type | Description | |-------|----------|------|-------------| | `message` | no | string | User message text or fallback content | | `role` | no | string | Message role ('user' or 'tool') | | `tool_call_id` | no | string | Target tool call ID when responding to a tool like ask_user | | `content` | no | | Tool response content payload | | `answer` | no | | Shorthand answer for ask_user response | ```json { "message": "…", "role": "user", "tool_call_id": "…", "content": "…", "answer": "…" } ``` ## Signals On success, emits SSE signal: `modelconversation-` (see [`GET /events`](../events.md)). ## Response `201` Created message ```json { "message": { "id": 1, "conversation_id": 1, "created_at": "…", "role": "system", "message": "…" } } ``` ## Errors | Status | Description | |--------|-------------| | 400 | Invalid ID, empty message or no company selected — `{"error":"…"}` | | 401 | Unauthorized — `{"error":"…"}` | | 403 | Not authorized — `{"error":"…"}` | | 404 | Conversation not found — `{"error":"…"}` | | 409 | Conversation is not idle — `{"error":"…"}` | --- _Generated from `@openapi` JSDoc. Do not edit by hand — run `npm run docs:api`._