---
title: "Create thread"
method: POST
path: "/api/v1/threads"
tags: ["threads"]
---

# Create thread

`POST /api/v1/threads`

## Request body

- CreateThreadRequest
  - `requestId` string, required
  - `projectId` string, required
  - `title` string
  - `message` string, required
  - `model` ModelSelection
    - `modelId` string, required
    - `reasoningMode` 'none' | 'instant' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max'
    - `modes` object
      - `fast` boolean
      - `pro` boolean
  - `machineSize` 'small' | 'medium' | 'large' | 'ultra' | 'hyper' | 'bigguy'
  - `authorId` string

## Response `200`

Thread

- ThreadEncoded
  - `id` string, required
  - `projectId` string, nullable, required
  - `authorId` string, nullable, required
  - `title` string, nullable, required
  - `titleCustom` boolean, required
  - `status` 'active' | 'waiting' | 'pending_user' | 'error' | 'ready_for_review' | 'idle' | 'archived', required
  - `archived` boolean, required
  - `lastModelId` string, nullable, required
  - `usage` UsageTotalsEncoded, required
    - `llmCredits` union, required
      - number
      - 'Infinity' | '-Infinity' | 'NaN'
    - `imageCredits` union, required
      - number
      - 'Infinity' | '-Infinity' | 'NaN'
    - `vmCredits` union, required
      - number
      - 'Infinity' | '-Infinity' | 'NaN'
    - `totalCredits` union, required
      - number
      - 'Infinity' | '-Infinity' | 'NaN'
  - `createdAt` string, required
  - `updatedAt` string, required
  - `lastActivityAt` string, nullable, required

## Other responses

- `400` — capy/InvalidRequest
- `401` — capy/Unauthorized
- `402` — capy/PaidFeatureUnavailable
- `404` — capy/ProjectNotFound

## Changes

- **2026-08-28** `e9babb6783f3` — 1 info
  - added the new `instant` enum value to the request property `model/reasoningMode`
- **2026-08-27** `828dc560c8e0` — 1 warning, 1 info
  - added the new `byok` enum value to the `feature` response property for the response status `402`
  - removed the non-success response with the status `503`
- **2026-08-27** `6cd1e287d2c5` — 4 info
  - response property `usage/imageCredits/anyOf[subschema #1]/` list-of-types was narrowed by removing types `string` from media type `application/json` of response `200`
  - response property `usage/llmCredits/anyOf[subschema #1]/` list-of-types was narrowed by removing types `string` from media type `application/json` of response `200`
  - response property `usage/totalCredits/anyOf[subschema #1]/` list-of-types was narrowed by removing types `string` from media type `application/json` of response `200`
  - response property `usage/vmCredits/anyOf[subschema #1]/` list-of-types was narrowed by removing types `string` from media type `application/json` of response `200`
- **2026-08-19** `530d92ec3e63` — 3 info
  - added the new optional request property `authorId`
  - added the non-success response with the status `400`
  - added the required property `authorId` to the response with the `200` status
- **2026-08-15** `3a998a0e7870` — 1 info
  - added the required property `usage/imageCredits` to the response with the `200` status

[Full history](https://skmtc.dev/capy/apis/capy-api/changes/api/v1/threads/post.md)

---

[API](https://skmtc.dev/capy/apis/capy-api.md) · [All operations](https://skmtc.dev/capy/apis/capy-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/capy/capy-api/revisions/e9babb6783f3/schema)
