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

Terminal
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

Terminal
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

javascript
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

javascript
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.

JSON
{
  "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:

JSON
{
  "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.

See also