Для AI-агентов: markdown этой страницы — /docs-content/entities/tasks/update.md индекс документации — /llms.txt
Обновить задачу
PATCH /v1/tasks/:id
Обновляет поля существующей задачи. Передавайте только изменяемые поля. Полный список — Поля задачи.
Параметры
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
id (path) |
number | да | ID задачи |
Поля запроса (body)
Передавайте только изменяемые поля — поведение PATCH, остальные значения не затрагиваются.
| Поле | Тип | Описание |
|---|---|---|
title |
string | Название |
description |
string | Описание задачи (поддерживает BB-код) |
responsibleId |
number | Новый ответственный. Список сотрудников: GET /v1/users |
createdBy |
number | Новый постановщик. Применяется в пределах прав вызывающего пользователя. Только существующий сотрудник — см. предупреждение под таблицей. Список сотрудников: GET /v1/users |
status |
number | Статус задачи. Полный список значений: GET /v1/tasks/fields → fields.status.enum |
priority |
number | Приоритет: 0 — низкий, 1 — обычный, 2 — высокий |
deadline |
datetime | Крайний срок (ISO 8601) |
startDatePlan |
datetime | Плановая дата начала |
endDatePlan |
datetime | Плановая дата окончания |
timeEstimate |
number | Оценка трудозатрат в секундах |
groupId |
number | Рабочая группа. Список: GET /v1/workgroups |
parentId |
number | Родительская задача. Список: GET /v1/tasks |
accomplices |
number[] | Соисполнители. Список сотрудников: GET /v1/users |
auditors |
number[] | Наблюдатели. Список сотрудников: GET /v1/users |
tags |
string[] | Метки задачи |
ufTaskWebdavFiles |
string[] | Файлы задачи. Массив строк вида n<id>, где id — идентификатор файла из ответа POST /v1/files/upload. Запись заменяет весь список вложений, пустой массив снимает все вложения. Очистка пустым массивом работает на POST /v1/tasks и PATCH /v1/tasks/:id; в батч-запросе (POST /v1/batch, POST /v1/tasks/batch) пустой массив на провод не уходит и вложения остаются на месте, поэтому очистку отправляйте одиночным запросом. Полное правило для полей-файлов — Поля задачи |
changedBy |
number | Служебное поле: кто последним изменил задачу. Принимается на записи — см. раздел под таблицей. Список сотрудников: GET /v1/users |
closedBy |
number | Служебное поле: кто закрыл задачу. Принимается на записи — см. раздел под таблицей. Список сотрудников: GET /v1/users |
statusChangedBy |
number | Служебное поле: кто последним сменил статус. Принимается на записи — см. раздел под таблицей. Список сотрудников: GET /v1/users |
createdDate |
datetime | Служебное поле: дата создания задачи, ISO 8601. Принимается на записи — см. раздел под таблицей |
changedDate |
datetime | Служебное поле: дата последнего изменения, ISO 8601. Переданное значение сохраняется вместо текущего времени — см. раздел под таблицей |
closedDate |
datetime | Служебное поле: дата закрытия, ISO 8601. Принимается на записи даже у незакрытой задачи — см. раздел под таблицей |
Поля id, dateStart, activityDate, realStatus — read-only, в body не передаются.
Служебные поля задачи можно задавать
createdBy (постановщик), changedBy, closedBy, statusChangedBy, createdDate, changedDate, closedDate принимаются и при создании, и при обновлении: Битрикс24 сохраняет переданные значения, а Вайбкод — обёртка над ним и не запрещает того, что разрешает платформа. Принимаются оба написания — и createdBy, и CREATED_BY. Передавайте одно из двух, а не оба сразу: при обоих в одном теле применится то, которое встретится позже, без предупреждения.
Значение применяется в пределах прав вызывающего пользователя. Если Битрикс24 отказывает в правке задачи, отказ приходит как есть — 422 с его собственным текстом, без подмены на нашу ошибку и без ложного успеха.
Что видно в журнале задачи. Смену постановщика Битрикс24 пишет в журнал изменений задачи, и там остаётся настоящий вызывающий пользователь, а не тот, кого передали в createdBy. Для остальных шести полей отдельной записи в журнале не предусмотрено: по значению в карточке нельзя определить, кто его выставил.
Дата без часового пояса. У createdDate, changedDate и closedDate значение вида 2019-05-15T13:47:00 в написании createdDate получает смещение вашего пояса из заголовка X-Vibe-Timezone, а в написании CREATED_DATE уходит как есть и читается в поясе владельца ключа. Передавайте дату со смещением — 2019-05-15T13:47:00+03:00 — и оба написания дадут один и тот же момент.
Ограничить подмену служебных полей может только модель прав Битрикс24 — это отдельная доработка на стороне платформы, а не нашей обёртки.
Передавайте только существующего сотрудника. Битрикс24 не проверяет идентификатор пользователя на существование ни в
createdBy, ни вchangedBy,closedBy,statusChangedBy— он запишет любое число. Задача с несуществующим постановщиком перестаёт управляться через API: Битрикс24 отказывает и в дальнейшем обновлении, и в удалении (Действие над задачей не разрешено), причём и через обёртку, и напрямую, даже ключу администратора. Такой исход проверен наcreatedBy. У трёх остальных полей идентификатор не проверяется так же, поэтому передавайте существующего сотрудника и в них. Список сотрудников:GET /v1/users.
Часто обновляемые поля
| Поле | Когда используется |
|---|---|
status |
Закрытие (5), возврат в работу (3), отказ (7). Расшифровка: GET /v1/tasks/fields → fields.status.enum |
responsibleId |
Передача задачи другому сотруднику. Источник: GET /v1/users |
deadline |
Перенос срока (ISO 8601 со смещением часового пояса портала) |
Примеры
curl — личный ключ
curl -X PATCH "https://vibecode.bitrix24.tech/v1/tasks/3871" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"status": 5,
"priority": 2
}'
curl — OAuth-приложение
curl -X PATCH "https://vibecode.bitrix24.tech/v1/tasks/3871" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"status": 5,
"priority": 2
}'
JavaScript — личный ключ
const res = await fetch('https://vibecode.bitrix24.tech/v1/tasks/3871', {
method: 'PATCH',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
status: 5,
priority: 2,
}),
})
const { success, data } = await res.json()
JavaScript — OAuth-приложение
const res = await fetch('https://vibecode.bitrix24.tech/v1/tasks/3871', {
method: 'PATCH',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
status: 5,
priority: 2,
}),
})
const { success, data } = await res.json()
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
success |
boolean | Всегда true при успехе |
data |
object | Обновлённый объект задачи со всеми полями — см. Поля задачи |
Пример ответа
{
"success": true,
"data": {
"id": 3871,
"title": "Подготовить отчёт за квартал",
"status": 5,
"priority": 2,
"responsibleId": 1,
"createdBy": 1,
"createdDate": "2026-05-12T08:46:12.000Z",
"changedDate": "2026-05-12T10:02:48.000Z",
"closedDate": "2026-05-12T10:02:48.000Z",
"deadline": "2026-05-19T15:00:00.000Z",
"accomplices": [],
"auditors": []
}
}
Пример ответа при ошибке
400 — попытка изменить поле, доступное только на чтение:
{
"success": false,
"error": {
"code": "READONLY_FIELD",
"message": "Field 'activityDate' is read-only and cannot be set"
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| 422 | BITRIX_ERROR |
Битрикс24 отклонил обновление — например, задача с таким ID недоступна или не существует, либо переданное значение отклонено порталом |
| 404 | ENTITY_NOT_FOUND |
Связанная сущность не найдена — например, responsibleId указывает на несуществующего сотрудника |
| 400 | READONLY_FIELD |
Попытка обновить поле, доступное только на чтение (id, dateStart, activityDate, realStatus) |
| 400 | INVALID_DISK_ATTACHMENT_VALUE |
Значение поля-файла передано не массивом строк вида n<id> — числом, строкой без префикса или одиночной строкой вместо массива |
| 403 | SCOPE_DENIED |
API-ключ не имеет скоупа tasks |
| 401 | TOKEN_MISSING |
API-ключ не имеет настроенных токенов |
Полный список общих ошибок API — Ошибки.
Известные особенности
Закрытие задачи. Чтобы пометить задачу выполненной, отправьте status: 5. После этого Битрикс24 сам заполняет closedDate — при переводе в статус 5 (завершена) или 6 (отложена). Передавать closedDate вручную тоже можно — см. раздел о служебных полях выше. Если поле не передано, платформа проставит его сама.