---
title: "Create Turn"
method: POST
path: "/api/sessions/{session_id}/turns"
tags: ["turns"]
---

# Create Turn

`POST /api/sessions/{session_id}/turns`

Stream one Turn, opening claim and preparation inside the SSE generator.

## Path parameters

- `session_id` string, uuid, required

## Headers

- `Idempotency-Key` string, required

## Request body

- CreateTurnRequest — Canonical body for POST /api/sessions/{session_id}/turns.
  - `text` string, required
  - `attachment_ids` string[]
  - `skill_selections` SkillSelectionRequest[]
    - `id` string, uuid, required
    - `expected_version` string, required

## Response `200`

AI SDK UI v1 UIMessage SSE stream. It opens immediately with a transient data-status prelude (phase=preparation) that repeats every runtime heartbeat until the Turn is claimed and prepared. Claim or preparation failures no longer change the HTTP status: they project closed error + finish chunks inside the stream, and cancellation projects one abort chunk.

## Other responses

- `422` — Invalid request
- `503` — Turn unavailable while composition installs dependencies

---

[API](https://skmtc.net/qredence/apis/fleet-rlm.md) · [All operations](https://skmtc.net/qredence/apis/fleet-rlm/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/qredence/fleet-rlm/revisions/4fdf9cecc886/schema)
