---
title: "Send a message"
method: POST
path: "/v1/sessions/{session_id}/messages"
tags: ["External API"]
---

# Send a message

`POST /v1/sessions/{session_id}/messages`

Send a follow-up message to an idle session.

## Path parameters

- `session_id` string, uuid, required

## Request body

- CreateFollowUpRequest — Send a follow-up message to an existing session. The session must be in the `idle` state. Sending a follow-up transitions it to `follow_up_running` until the assistant finishes processing.
  - `input` string, required — The follow-up question or instruction. Traversal uses the full conversation history as context when responding.
  - `thinking_mode` 'auto' | 'deep' | 'fast' — Investigation depth exposed on the public V1 API. A deliberately narrower contract than the internal ``ThinkingMode``: the ``lightning`` tier is reserved for the MCP surface and is not offered here, so unsupported values are rejected at request-parse time rather than at runtime. Values mirror ``ThinkingMode`` so the mapping stays in lockstep.

## Response `202`

Successful Response

- CreateMessageResponse — Response returned when a follow-up message is sent to a session. Extends `SessionResponse` with the IDs of the newly created message pair. The session transitions to `follow_up_running` while the assistant processes the follow-up, and returns to `idle` once complete.
  - `id` string, required — Unique identifier for the session.
  - `status` string, required — Current lifecycle state of the session. One of: `running` (investigation in progress), `idle` (investigation complete, ready for follow-ups), `follow_up_running` (processing a follow-up message), `cancelled`, or `failed`.
  - `title` string, nullable — Human-readable session title. Set via the `title` field on creation, or auto-generated by Traversal.
  - `input` string, required — The original incident description or question that initiated this session.
  - `created_at` string, date-time, required — Timestamp when the session was created, in UTC.
  - `updated_at` string, date-time, nullable — Timestamp when the session was last updated, in UTC. Null if the session has not been updated since creation.
  - `messages` MessageResponse[], nullable — Ordered list of messages in the session's conversation history. Only populated when retrieving a single session via `GET /v1/sessions/{session_id}`.
    - `id` string, required — Unique identifier for this message.
    - `role` 'user' | 'assistant', required — The role of a message author.
    - `markdown_content` string, required — The message content, formatted as Markdown. Assistant messages may contain structured analysis with headings, lists, and code blocks.
    - `confidence` 'High' | 'Medium' | 'Low', nullable — Overall confidence in the assistant's analysis. Present for RCA assistant messages when available.
    - `confidence_explanation` string, nullable — Explanation of the assistant's confidence level. Present for RCA assistant messages when available.
    - `created_at` string, date-time, required — Timestamp when the message was created, in UTC.
  - `user_message_id` string, required — Unique identifier for the user message that was recorded.
  - `assistant_message_id` string, required — Unique identifier for the assistant message that will contain the response. Use this ID to poll for the completed response via `GET /v1/sessions/{session_id}`.

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/traversal/apis/fastapi.md) · [All operations](https://skmtc.net/traversal/apis/fastapi/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/traversal/fastapi/revisions/2134ebffd1ef/schema)
