## Update a checklist item

`PATCH /v1/tasks/:taskId/checklist/:itemId`

Partial update of a checklist item — pass only the fields you want to change. At least one field is required.

## Parameters

| Parameter | Type | Req. | Description |
|----------|-----|:-----:|---------|
| `taskId` (path) | integer | yes | Task ID |
| `itemId` (path) | integer | yes | Checklist item ID |

## Request fields (body)

| Field | Type | Req. | Description |
|------|-----|:-----:|---------|
| `title` | string | no | Item text |
| `sortIndex` | integer | no | Sort index |
| `isComplete` | boolean / `Y`,`N` | no | Completion status |
| `isImportant` | boolean / `Y`,`N` | no | Importance flag |
| `parentId` | integer | no | Parent item ID |
| `members` | object | no | Item members: `{ "<userId>": { "type": "A" \| "U" } }`. **Replaces the current list entirely** — see "Known specifics" |

At least one of the fields above is required — an empty body returns `400`.

## Examples

### curl — personal key

```bash
curl -X PATCH "https://vibecode.bitrix24.com/v1/tasks/3943/checklist/213" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "title": "Collect and check documents", "isImportant": true }'
```

### curl — OAuth application

```bash
curl -X PATCH "https://vibecode.bitrix24.com/v1/tasks/3943/checklist/213" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "title": "Collect and check documents", "isImportant": true }'
```

### JavaScript — personal key

```javascript
const res = await fetch("https://vibecode.bitrix24.com/v1/tasks/3943/checklist/213", {
  method: "PATCH",
  headers: {
    "X-Api-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ title: "Collect and check documents", isImportant: true }),
});
const { data } = await res.json();
```

### JavaScript — OAuth application

```javascript
const res = await fetch("https://vibecode.bitrix24.com/v1/tasks/3943/checklist/213", {
  method: "PATCH",
  headers: {
    "X-Api-Key": "YOUR_APP_KEY",
    "Authorization": "Bearer USER_SESSION_TOKEN",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ title: "Collect and check documents", isImportant: true }),
});
const { data } = await res.json();
```

## Response fields

| Field | Type | Description |
|------|-----|---------|
| `success` | boolean | Always `true` on success |
| `data.id` | number | ID of the updated item |

## Response example

```json
{ "success": true, "data": { "id": 213 } }
```

## Error response example

`400` — an empty request body:

```json
{
  "success": false,
  "error": { "code": "INVALID_PARAMS", "message": "No updatable fields provided" }
}
```

## Errors

| HTTP | Code | Description |
|------|-----|---------|
| 400 | `INVALID_PARAMS` | Empty body, `taskId`/`itemId` is not a positive integer, an unknown `members` shape, or a field type violation |
| 422 | `BITRIX_ERROR` | The item with the given `itemId` does not exist or is not accessible to the key — Bitrix24 threw an exception |
| 403 | `SCOPE_DENIED` | The API key lacks the `task` scope |
| 403 | `WRITE_BLOCKED_READONLY_KEY` | The key is in "read-only" mode — switch it to read+write in [/keys](/keys) |
| 401 | `TOKEN_MISSING` | The API key has no configured tokens |

Full list of common API errors — [Errors](/docs/errors).

## Known specifics

- **A nonexistent `taskId` returns `200`.** When no task with that identifier exists, the response is successful and echoes the given `itemId`, but nothing is updated. A `422` is returned only for a missing item inside an existing task. To check the task, call ["Get a task"](../get.md).
- **`members` is replaced entirely.** When the `members` field is updated, Bitrix24 **completely** overwrites the item's member list. To keep the current members, pass them together with the new ones in the same request.

## See also

- [Get an item](./get.md)
- [List items](./list.md)
- [Mark complete](./complete.md)
- [Tasks](/docs/entities/tasks)
