---
title: "Update assistant thread"
method: PATCH
path: "/v1/assistant/threads/{threadId}"
tags: ["assistant"]
---

# Update assistant thread

`PATCH /v1/assistant/threads/{threadId}`

## Request

- Base URL: `https://sandbox.api.infinite.dev`
- URL: `https://sandbox.api.infinite.dev/v1/assistant/threads/{threadId}`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer
- TypeScript: <https://skmtc.dev/infinite/apis/infinite-api/docs/v1/assistant/threads/:threadId/patch.ts> (a function with typed inputs; its response is checked against the schema)

## Path parameters

- `threadId` string, required

## Request body

- UpdateAssistantThreadDto
  - `title` string
  - `pinnedContext` AssistantPinnedContextDto
    - `type` 'customer' | 'case' | 'transfer' | 'org' | 'account' | 'external_account' | 'fixed_route' | 'invoice', required
    - `id` string, required
    - `label` string, required
    - `customerId` string: Optional for transfer pins — customer scope is derived from the transfer on read. On write, omit it or supply a value matching the transfer source customer; mismatches are rejected.
  - `status` 'active' | 'archived'
  - `dismissCustomerPinSuggestion` string: Dismiss the customer pin suggestion for this thread (customer id).

## Response `200`

- AssistantThreadResponseDto
  - `id` string, required
  - `app` 'console' | 'admin' | 'compliance', required
  - `env` string, required
  - `organizationId` string, required
  - `userId` string, required
  - `title` string, required
  - `status` 'active' | 'archived', required
  - `pinnedContext` AssistantPinnedContextDto
    - `type` 'customer' | 'case' | 'transfer' | 'org' | 'account' | 'external_account' | 'fixed_route' | 'invoice', required
    - `id` string, required
    - `label` string, required
    - `customerId` string: Optional for transfer pins — customer scope is derived from the transfer on read. On write, omit it or supply a value matching the transfer source customer; mismatches are rejected.
  - `mcpSessionIds` object, required
  - `visibility` string, required
  - `lastMessageAt` string, date-time, nullable
  - `retentionExpiresAt` string, date-time, nullable
  - `createdAt` string, date-time, required
  - `updatedAt` string, date-time, required
  - `activeRunStatus` 'queued' | 'running' | 'awaiting_confirmation' | 'completed' | 'failed' | 'cancelled', nullable
  - `activeRunId` string, nullable
  - `latestRunStatus` 'queued' | 'running' | 'awaiting_confirmation' | 'completed' | 'failed' | 'cancelled', nullable
  - `latestRunId` string, nullable
  - `unread` boolean

## Other responses

- `401`: Unauthorized - Invalid or missing JWT token

## Changes

- **2026-10-29** `523e45dcb524`: 2 info
  - added the optional property `latestRunId` to the response with the `200` status
  - added the optional property `latestRunStatus` to the response with the `200` status
- **2026-10-26** `2b8fae37af3b`: 1 info
  - added the new optional request property `dismissCustomerPinSuggestion`
- **2026-10-22** `d266ba0b079e`: 1 info
  - added the optional property `activeRunId` to the response with the `200` status
- **2026-10-17** `1516ea13e880`: 2 info
  - added the new optional request property `pinnedContext/allOf[#/components/schemas/AssistantPinnedContextDto]/customerId`
  - added the optional property `pinnedContext/allOf[#/components/schemas/AssistantPinnedContextDto]/customerId` to the response with the `200` status
- **2026-10-16** `f48e031634f4`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/infinite/apis/infinite-api/changes/v1/assistant/threads/:threadId/patch.md)

---

[API](https://skmtc.dev/infinite/apis/infinite-api.md) - [All operations](https://skmtc.dev/infinite/apis/infinite-api/llms.txt) - [OpenAPI document](https://skmtc.dev/infinite/apis/infinite-api/revisions/90065d3e6974?raw)
