---
search:
  tags:
    - Topics
    - PATCH
seo:
  description: >-
    Update a single topic. Supports changing priority, lifecycle state,
    archiving… Reference for the PATCH /topics/{topicId} endpoint in the Modem
    API.
sidebar:
  label: Update topic
  badge: PATCH
title: Update topic
type: openapi-operation
---
Update a single topic. Supports changing priority, lifecycle state, archiving (archived=true), and unarchiving (archived=false). At least one field must be provided. issueType and keywords are derived by the topic pipeline and cannot be set; sending either returns 400. A topic archived in the v1 to v2 migration returns 404 with data.reason archived_in_v1_to_v2_migration.

`PATCH /topics/{topicId}`

**Request body** (`application/json`, required)

- `archived` (boolean) — Set to true to archive the topic, false to unarchive it.
- `archivedReason` (string) — Optional reason for archiving. Only used when archived=true.
- `issueType` (string | null) — Not supported: the topic pipeline derives the issue type. Sending this field returns 400.
- `keywords` (string[]) — Not supported: the topic pipeline derives the keywords. Sending this field returns 400.
- `lifecycleState` (string) — Update the topic lifecycle state. Valid values: open, in\_progress, completed, dismissed. The unknown state is AI-assessed and cannot be set directly.
- `priority` (string) — Update the topic priority. Valid values: very\_low, low, default, high, very\_high.

Request body example:

```json
{
  "archived": true,
  "archivedReason": "string",
  "issueType": "bug_report",
  "keywords": [
    "string"
  ],
  "lifecycleState": "completed",
  "priority": "default"
}
```

**Responses**

- `200` — OK
- `400` — Invalid request (validation failed).
- `401` — Missing or invalid API key.
- `403` — The API key does not have access to this resource.
- `404` — The requested resource was not found.
- `409` — The request conflicts with an existing resource or idempotency operation.
- `429` — Rate limit exceeded.
- `500` — Internal server error.

Response example, 200:

```json
{
  "archivedAt": "2019-08-24T14:15:22Z",
  "archivedByUserId": "string",
  "archivedReason": "string",
  "createdAt": "2019-08-24T14:15:22Z",
  "eventCount": 0,
  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  "issueType": "bug_report",
  "keywords": [
    "string"
  ],
  "lifecycleState": "completed",
  "lifecycleStateConfidence": 0,
  "priority": "default",
  "priorityReasoning": "string",
  "summary": "string",
  "timeRangeEnd": null,
  "timeRangeStart": null,
  "title": "string",
  "updatedAt": "2019-08-24T14:15:22Z"
}
```
