For AI agents: markdown of this page — /docs-content-en/entities/activities/todos/update.md documentation index — /llms.txt
Update a to-do
PATCH /v1/activity-todos/:id
Changes the deadline, text, responsible user, reminders, or parent of a "To-do" activity. Pass only the fields you change, flat at the JSON root.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
Parameterid (path) |
Typenumber | Requiredyes | DescriptionTo-do ID. List: GET /v1/activities with the providerId=CRM_TODO filter |
Request fields (body)
The body cannot be empty: pass at least one field.
| Field | Type | Required | Description |
|---|---|---|---|
Fielddeadline |
Typestring | Requiredno | DescriptionNew deadline in ISO 8601 format, for example 2026-11-03T15:00:00+00:00 |
Fieldtitle |
Typestring | Requiredno | DescriptionNew title. Returned in the subject field of the response |
Fielddescription |
Typestring | Requiredno | DescriptionNew description |
FieldresponsibleId |
Typenumber | Requiredno | DescriptionID of the new responsible user. List: GET /v1/users |
FieldparentActivityId |
Typenumber | Requiredno | DescriptionID of the activity the to-do is linked to. The parent must belong to the same CRM item. Item activities: GET /v1/activities filtered by ownerTypeId and ownerId |
FieldpingOffsets |
Typenumber[] | Requiredno | DescriptionReminders: integer minutes before the deadline, no less than 0. Replaces the previous set entirely |
The activity's CRM item does not change: ownerTypeId and ownerId in the body are rejected with 400 INVALID_PARAMS, as is any other unknown field. A colorId from the palette is rejected with 422, and one outside the palette with 400 (see "Errors").
Examples
curl — personal key
curl -X PATCH "https://vibecode.bitrix24.com/v1/activity-todos/8379" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Review the contract and invoice",
"pingOffsets": [0, 30]
}'
curl — OAuth application
curl -X PATCH "https://vibecode.bitrix24.com/v1/activity-todos/8379" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Review the contract and invoice",
"pingOffsets": [0, 30]
}'
JavaScript — personal key
const res = await fetch('https://vibecode.bitrix24.com/v1/activity-todos/8379', {
method: 'PATCH',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
title: 'Review the contract and invoice',
pingOffsets: [0, 30],
}),
})
const { data } = await res.json()
console.log(data.subject)
JavaScript — OAuth application
const res = await fetch('https://vibecode.bitrix24.com/v1/activity-todos/8379', {
method: 'PATCH',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
title: 'Review the contract and invoice',
pingOffsets: [0, 30],
}),
})
const { data } = await res.json()
Response fields
The response is the activity read back after the update. Same shape as GET /v1/activities/:id.
| Field | Type | Description |
|---|---|---|
Fieldsuccess |
Typeboolean | Descriptiontrue on success |
Fielddata |
Typeobject | DescriptionThe updated activity, all fields: Activity fields |
Fielddata.id |
Typenumber | DescriptionActivity ID |
Fielddata.subject |
Typestring | DescriptionTitle from the title field |
Fielddata.deadline |
Typestring | DescriptionActivity deadline in UTC |
Fielddata.associatedEntityId |
Typenumber | DescriptionParent activity ID, or 0 without a parent |
Fielddata.updatedAt |
Typestring | DescriptionLast modification time in UTC |
Response example
Main fields are shown. Full list: Activity fields.
{
"success": true,
"data": {
"id": 8379,
"ownerId": 8845,
"ownerTypeId": 2,
"providerId": "CRM_TODO",
"associatedEntityId": 0,
"subject": "Review the contract and invoice",
"updatedAt": "2026-10-15T10:06:02.000Z",
"deadline": "2026-11-03T12:00:00.000Z",
"completed": false,
"status": 1,
"responsibleId": 1317,
"description": "Call the client"
}
}
Error response example
422 — the to-do is already completed:
{
"success": false,
"error": {
"code": "ACTIVITY_TODO_COMPLETED",
"message": "The to-do is completed and cannot be updated"
}
}
Errors
| HTTP | Code | Description |
|---|---|---|
| HTTP400 | CodeINVALID_PARAMS |
Descriptionid is not a positive integer |
| HTTP400 | CodeINVALID_PARAMS |
DescriptionBody validation failed: empty body, responsibleId or parentActivityId is not a positive integer, title or description is not a string, the deadline is not in ISO 8601 format, pingOffsets is not an array of non-negative integers, an unknown field, colorId outside the palette |
| HTTP400 | CodeINVALID_PARAMS |
DescriptionThe parent activity from parentActivityId belongs to a different CRM item |
| HTTP400 | CodeMISSING_REQUIRED_FIELDS |
DescriptionThe request body is not a JSON object |
| HTTP404 | CodeENTITY_NOT_FOUND |
DescriptionThe activity with this id is not a to-do: it has a different provider, for example a call or an open channel |
| HTTP404 | CodeENTITY_NOT_FOUND |
DescriptionThe activity with this id or the parent activity from parentActivityId does not exist. The to-do does not change |
| HTTP422 | CodeACTIVITY_TODO_COMPLETED |
DescriptionThe to-do is completed and cannot be changed |
| HTTP422 | CodeUNSUPPORTED_ACTIVITY_BLOCKS |
DescriptionThe body contains a colorId from the palette. Color is set only on creation |
| HTTP422 | CodeACTIVITY_UPDATE_NOT_APPLIED |
DescriptionAfter the write, the activity read back did not match the request, or fields not passed in the request may not have been preserved. The update may have been applied partially: read the activity via GET /v1/activities/:id and compare it with the expected state before retrying PATCH |
| HTTP502 | CodeBITRIX_ERROR |
DescriptionFailed to read the activity data before or after the write. The update may have been applied: read the activity before retrying PATCH |
| HTTP403 | CodeWRITE_BLOCKED_READONLY_KEY |
DescriptionRead-only key |
| HTTP403 | CodeSCOPE_DENIED |
DescriptionThe key does not have the crm scope |
| HTTP401 | CodeTOKEN_MISSING |
DescriptionThe key has no Bitrix24 connection |
Full list of common API errors: Errors.
Known specifics
Omitted fields are preserved. If the body contains only one of deadline, description, or responsibleId, only that field changes. With any other set of fields, the service reads the current activity and fills in the title, description, deadline, and reminders that the body omits.