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

# Create empty thread

`POST /v1/threads`

Create a new empty thread. Note: initialMessages is not supported yet; create the thread first, then add messages via runs/message endpoints.

## Request body

- CreateThreadRequest
  - `userKey` string — Identifier for a user in your system. Required if no bearer token is provided.
  - `metadata` object — Additional metadata to attach to the thread
  - `initialMessages` InitialMessage[] — Initial messages to seed the thread with
    - `role` 'user' | 'system' | 'assistant', required — Message role - 'user', 'system', or 'assistant' for initial messages
    - `content` union[], required — Content blocks (text or resource)
      - union
        - TextContent
          - `type` 'text', required — Content block type identifier
          - `text` string, required — The text content
        - ResourceContent
          - `type` 'resource', required — Content block type identifier
          - `resource` Resource, required
            - `uri` string — URI identifying the resource (e.g., file://, https://, s3://)
            - `name` string — Human-readable name for the resource
            - `description` string — Optional description of the resource
            - `mimeType` string — MIME type of the resource
            - `text` string — Inline text content (alternative to uri)
            - `blob` string — Base64-encoded blob data (alternative to uri or text)
            - `annotations` ResourceAnnotations
              - …
    - `metadata` object — Additional metadata to attach to the message

## Response `201`

Created thread

- CreateThreadResponse
  - `id` string, required — Unique identifier for this thread
  - `name` string — Thread name (auto-generated or user-set)
  - `userKey` string — Optional user key for thread organization
  - `runStatus` 'idle' | 'waiting' | 'streaming', required — Current run status: idle (no run), waiting (run started, awaiting content), streaming (receiving content)
  - `currentRunId` string — ID of the currently active run (when not idle)
  - `statusMessage` string — Human-readable status message (e.g., 'Fetching weather data...')
  - `lastRunCancelled` boolean — Whether the last run was cancelled
  - `lastRunError` RunError
    - `code` string — Error code
    - `message` string, required — Error message
  - `pendingToolCallIds` string[] — Tool call IDs awaiting client-side results. If non-empty, next run must provide tool_result content with previousRunId set.
  - `lastCompletedRunId` string — ID of the last completed run. Required as previousRunId when continuing after tool calls.
  - `metadata` object — Additional metadata
  - `createdAt` string, required — When the thread was created (ISO 8601)
  - `updatedAt` string, required — When the thread was last updated (ISO 8601)

---

[API](https://skmtc.net/tambo-ai/apis/tambo-api.md) · [All operations](https://skmtc.net/tambo-ai/apis/tambo-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/tambo-ai/tambo-api/revisions/312691b28f1c/schema)
