[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-entities\u002Ftasks\u002Ftime":3,"docs-tabs-entities\u002Ftasks\u002Ftime":6},{"content":4,"lastmod":5},"# Учёт времени задач\n\nЗаписи о потраченном на задачу времени — вложенный ресурс задачи. У каждой записи есть длительность, автор, комментарий и время создания. Базовый путь — `\u002Fv1\u002Ftasks\u002F:taskId\u002Ftime`. Все операции требуют существующей задачи (`:taskId`) на портале.\n\nБитрикс24 API: `task.elapseditem.*`\nСкоуп: `task`\n\n## Операции\n\n- [Добавить запись](.\u002Ftime\u002Fcreate.md) — `POST \u002Fv1\u002Ftasks\u002F:taskId\u002Ftime`\n- [Список записей](.\u002Ftime\u002Flist.md) — `GET \u002Fv1\u002Ftasks\u002F:taskId\u002Ftime`\n- [Получить запись](.\u002Ftime\u002Fget.md) — `GET \u002Fv1\u002Ftasks\u002F:taskId\u002Ftime\u002F:itemId`\n- [Обновить запись](.\u002Ftime\u002Fupdate.md) — `PATCH \u002Fv1\u002Ftasks\u002F:taskId\u002Ftime\u002F:itemId`\n- [Удалить запись](.\u002Ftime\u002Fdelete.md) — `DELETE \u002Fv1\u002Ftasks\u002F:taskId\u002Ftime\u002F:itemId`\n- **Глобальный список (по сотруднику и периоду)** — `GET \u002Fv1\u002Ftask-time?userId=&from=&to=` (см. ниже)\n\n## Глобальный список — `GET \u002Fv1\u002Ftask-time`\n\nВозвращает записи учёта времени **по всему порталу** одним запросом — без необходимости перебирать задачи по очереди. Удобно для сценариев «сколько времени сотрудник X потратил за месяц», когда заранее неизвестен список задач.\n\n### Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `userId` | number | нет | Идентификатор сотрудника. Без параметра — записи всех сотрудников, к которым у владельца ключа есть доступ |\n| `from` | string | нет | Нижняя граница периода (включительно) — по полю `CREATED_DATE`. Принимает ISO 8601 (`2026-05-01T00:00:00+03:00`) и сокращённую дату (`2026-05-01`) |\n| `to` | string | нет | Верхняя граница периода (включительно) — по полю `CREATED_DATE`. Формат — как у `from` |\n| `taskId` | number | нет | Сузить выборку до одной задачи (опциональный фильтр поверх `userId` \u002F `from` \u002F `to`) |\n| `limit` | number | нет | Количество записей на странице (1..500, по умолчанию 50) |\n| `offset` | number | нет | Смещение в выборке (по умолчанию 0). Конвертируется в номер страницы для Битрикс24 |\n\n### Пример\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftask-time?userId=5&from=2026-05-01&to=2026-05-31&limit=200\" \\\n  -H \"X-Api-Key: $VIBE_KEY\"\n```\n\n### Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data` | array | Массив записей учёта времени. Ключи в camelCase (`id`, `userId`, `taskId`, `seconds`, `minutes`, `commentText`, `source`, `createdDate`, `dateStart`, `dateStop`) |\n| `meta.total` | number | Общее число записей в выборке (соответствует фильтру) |\n| `meta.limit` | number | Применённый лимит на странице |\n| `meta.offset` | number | Применённое смещение |\n| `meta.hasMore` | boolean | Есть ли ещё записи за пределами текущей страницы |\n\n### Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": [\n    {\n      \"id\": \"13\",\n      \"userId\": \"5\",\n      \"taskId\": \"100\",\n      \"seconds\": \"1800\",\n      \"minutes\": \"30\",\n      \"commentText\": \"Code review\",\n      \"createdDate\": \"2026-05-20T10:00:00+03:00\",\n      \"dateStart\": \"2026-05-20T11:00:00+03:00\",\n      \"dateStop\": \"2026-05-20T11:30:00+03:00\",\n      \"source\": \"2\"\n    }\n  ],\n  \"meta\": { \"total\": 247, \"limit\": 50, \"offset\": 0, \"hasMore\": true }\n}\n```\n\n### Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_USER_ID` | `userId` не положительное целое число |\n| 400 | `INVALID_TASK_ID` | `taskId` не положительное целое число |\n| 400 | `INVALID_OFFSET` | `offset` не кратен `limit` — постраничная выборка требует значений `0`, `limit`, `2 × limit` и так далее |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `task` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\n## Ключевые поля\n\n| Поле | Описание |\n|------|---------|\n| `id` | Идентификатор записи |\n| `taskId` | ID родительской задачи |\n| `userId` | Автор. Список сотрудников: `GET \u002Fv1\u002Fusers` |\n| `seconds` | Длительность в секундах (основное поле — задаётся при создании) |\n| `minutes` | Длительность в минутах (производное от `seconds`, заполняется системой) |\n| `commentText` | Комментарий к записи (`\"\"`, если комментарий пуст — не `null`) |\n| `source` | Источник: `2` — REST API (записи, созданные через этот эндпоинт) |\n| `createdDate` | Дата создания записи |\n| `dateStart`, `dateStop` | Начало и окончание учтённого интервала. Заполняются автоматически и через текущий API не редактируются |\n\n## Что нужно знать перед работой\n\n1. **Поля ответа — в camelCase.** Записи учёта времени возвращаются в camelCase (`id`, `taskId`, `userId`, `seconds`, `minutes`, `commentText`, `source`, `createdDate`, `dateStart`, `dateStop`) — как и комментарии задач, и остальная часть API. (Ранее документация ошибочно обещала UPPER_SNAKE_CASE.)\n2. **Числовые значения сериализуются строками.** `id`, `taskId`, `userId`, `seconds`, `minutes`, `source` приходят в виде строк (`\"seconds\": \"900\"`) — и в per-task списке\u002Fкарточке, и в глобальном `\u002Fv1\u002Ftask-time`. Для арифметики приводите через `Number(value)`.\n3. **`seconds` — единственная единица измерения при записи.** Параметр `seconds` обязателен; `minutes` система пересчитывает сама.\n4. **Записи удаляются вместе с задачей.** Если родительская задача удалена ([`DELETE \u002Fv1\u002Ftasks\u002F:id`](.\u002Fdelete.md)), её записи учёта времени становятся недоступны — отдельный `DELETE` для каждой не требуется. Попытка обратиться к ним по прежнему ID вернёт `422`.\n5. **`dateStart` и `dateStop` через API не редактируются.** Их значения заполняются Битрикс24 автоматически в момент создания записи. Чтобы зафиксировать конкретный интервал, передавайте суммарное время через `seconds` в `POST` или `PATCH`. NB: Битрикс24 систематически проставляет интервал на ~1 час впереди `createdDate` (автозаполнение на своей стороне) — это поведение B24, обёртка даты не трогает.\n6. **Список может показывать записи, недоступные карточке.** Глобальный\u002Fper-task список (`task.elapseditem.getlist`) и карточка (`task.elapseditem.get`) — разные методы B24 с разными проверками доступа: список иногда возвращает чужие записи, по которым карточка отдаёт `422 ITEM_NOT_FOUND_OR_NOT_ACCESSIBLE`. Это рассогласование доступа на стороне Битрикс24.\n\n## Типичный сценарий\n\n1. Найти или создать задачу: [`GET \u002Fv1\u002Ftasks`](.\u002Flist.md) \u002F [`POST \u002Fv1\u002Ftasks`](.\u002Fcreate.md).\n2. Добавить запись: [`POST \u002Fv1\u002Ftasks\u002F:taskId\u002Ftime`](.\u002Ftime\u002Fcreate.md) с `seconds` и при необходимости `comment` и `userId`.\n3. Посмотреть историю учёта: [`GET \u002Fv1\u002Ftasks\u002F:taskId\u002Ftime`](.\u002Ftime\u002Flist.md).\n4. Скорректировать длительность или комментарий: [`PATCH \u002Fv1\u002Ftasks\u002F:taskId\u002Ftime\u002F:itemId`](.\u002Ftime\u002Fupdate.md).\n5. Удалить ошибочную запись: [`DELETE \u002Fv1\u002Ftasks\u002F:taskId\u002Ftime\u002F:itemId`](.\u002Ftime\u002Fdelete.md).\n\n## Лимиты\n\n| Лимит | Значение |\n|-------|----------|\n| Rate limit | общий для API — см. [Лимиты и оптимизация](\u002Fdocs\u002Foptimization) |\n\n## Смотрите также\n\n- [Задачи](..\u002Ftasks.md) — родительская сущность\n- [Комментарии задач](..\u002Ftask-comments.md) — другой вложенный ресурс задачи\n- [Сотрудники](\u002Fdocs\u002Fentities\u002Fusers) — источник `USER_ID`\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization) — rate limits\n","2026-07-01",{"time\u002Fcreate.md":7,"time\u002Flist.md":8,"time\u002Fget.md":9,"time\u002Fupdate.md":10,"time\u002Fdelete.md":11},"\n## Добавить запись учёта времени\n\n`POST \u002Fv1\u002Ftasks\u002F:taskId\u002Ftime`\n\nСоздаёт новую запись учёта времени для задачи. Обязательное поле — `seconds`; комментарий и автор передаются опционально.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `taskId` (path) | number | да | ID задачи |\n\n## Поля запроса (body)\n\n| Поле | Тип | Обяз. | Описание |\n|------|-----|:-----:|---------|\n| `seconds` | number | ★ | Длительность в секундах |\n| `comment` | string | | Комментарий к записи. Записывается в `COMMENT_TEXT` |\n| `userId` | number | | ID автора. По умолчанию — пользователь API-ключа. Передавайте только существующие ID сотрудников (`GET \u002Fv1\u002Fusers`) — см. «Известные особенности». |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002F289\u002Ftime\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"seconds\": 1800,\n    \"comment\": \"Подготовка черновика\"\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002F289\u002Ftime\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"seconds\": 1800,\n    \"comment\": \"Подготовка черновика\"\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002F289\u002Ftime', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    seconds: 1800,\n    comment: 'Подготовка черновика',\n  }),\n})\n\nconst { success, data } = await res.json()\nconsole.log('ID новой записи:', data.id)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002F289\u002Ftime', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    seconds: 1800,\n    comment: 'Подготовка черновика',\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data.id` | number | Идентификатор созданной записи. Используйте его для `GET` \u002F `PATCH` \u002F `DELETE` |\n\n## Пример ответа\n\nHTTP 201 Created:\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": 161\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n400 — не передан обязательный `seconds`:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"MISSING_PARAMS\",\n    \"message\": \"Required: seconds (number)\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `MISSING_PARAMS` | Не передано поле `seconds` |\n| 422 | `BITRIX_ERROR` | Битрикс24 вернул ошибку (например, родительская задача недоступна) |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `task` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Bitrix24 не проверяет существование `userId`.** Метод `task.elapseditem.add` сохраняет запись с любым значением `userId` — даже несуществующим — и возвращает `201`. Но такую «запись-призрак» затем нельзя ни прочитать, ни обновить, ни удалить через карточные методы: `GET` \u002F `PATCH` \u002F `DELETE \u002Fv1\u002Ftasks\u002F:taskId\u002Ftime\u002F:itemId` вернут `422` (`512\u002FTE\u002FITEM_NOT_FOUND_OR_NOT_ACCESSIBLE`). Она остаётся видна только в списках (`GET \u002Fv1\u002Ftasks\u002F:taskId\u002Ftime`, `GET \u002Fv1\u002Ftask-time`) и засоряет отчёты без возможности очистки через API. Передавайте только реальные ID сотрудников из [`GET \u002Fv1\u002Fusers`](\u002Fdocs\u002Fentities\u002Fusers).\n\n**Ответ — только `id`, без остальных полей.** В отличие от создания задачи или комментария, метод возвращает только идентификатор. Чтобы получить полную запись с автогенерированными `MINUTES`, `SOURCE`, `CREATED_DATE`, `DATE_START`, `DATE_STOP` — сделайте [`GET \u002Fv1\u002Ftasks\u002F:taskId\u002Ftime\u002F:itemId`](.\u002Fget.md).\n\n## Смотрите также\n\n- [Получить запись](.\u002Fget.md) — прочитать только что созданную запись со всеми полями\n- [Список записей](.\u002Flist.md) — все записи задачи\n- [Обновить запись](.\u002Fupdate.md) — изменить длительность или комментарий\n- [Удалить запись](.\u002Fdelete.md) — снять запись\n- [Задачи](\u002Fdocs\u002Fentities\u002Ftasks) — родительская сущность\n","\n## Список записей учёта времени\n\n`GET \u002Fv1\u002Ftasks\u002F:taskId\u002Ftime`\n\nВозвращает все записи учёта времени конкретной задачи, отсортированные по `id` (сначала новые).\n\n## Параметры\n\n| Параметр | Тип | Обяз. | По умолч. | Описание |\n|----------|-----|:-----:|-----------|---------|\n| `taskId` (path) | number | да | — | ID задачи |\n| `limit` (query) | number | | `50` | Размер страницы |\n| `offset` (query) | number | | `0` | Пропустить N записей |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002F289\u002Ftime\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002F289\u002Ftime\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002F289\u002Ftime', {\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\n})\n\nconst { success, data, meta } = await res.json()\nconst totalSeconds = data.reduce((sum, r) => sum + Number(r.seconds), 0)\nconsole.log(`Всего по задаче: ${totalSeconds \u002F 60} мин`)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002F289\u002Ftime', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { success, data, meta } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data` | array | Массив записей учёта времени |\n| `data[].id` | string | Идентификатор записи |\n| `data[].taskId` | string | ID родительской задачи |\n| `data[].userId` | string | Автор. Профиль: `GET \u002Fv1\u002Fusers\u002F:userId` |\n| `data[].seconds` | string | Длительность в секундах |\n| `data[].minutes` | string | Длительность в минутах (производное от `seconds`) |\n| `data[].commentText` | string | Комментарий к записи |\n| `data[].source` | string | Источник: `2` — REST API |\n| `data[].createdDate` | datetime | Когда запись была создана |\n| `data[].dateStart` | datetime | Начало учтённого интервала (заполняется автоматически) |\n| `data[].dateStop` | datetime | Окончание учтённого интервала (заполняется автоматически) |\n| `meta.total` | number | Общее число записей учёта времени по задаче |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": [\n    {\n      \"id\": \"163\",\n      \"taskId\": \"289\",\n      \"userId\": \"1\",\n      \"commentText\": \"Подготовка черновика\",\n      \"seconds\": \"1800\",\n      \"minutes\": \"30\",\n      \"source\": \"2\",\n      \"createdDate\": \"2026-05-13T16:15:43+03:00\",\n      \"dateStart\": \"2026-05-13T17:15:43+03:00\",\n      \"dateStop\": \"2026-05-13T17:15:43+03:00\"\n    },\n    {\n      \"id\": \"161\",\n      \"taskId\": \"289\",\n      \"userId\": \"1\",\n      \"commentText\": \"\",\n      \"seconds\": \"600\",\n      \"minutes\": \"10\",\n      \"source\": \"2\",\n      \"createdDate\": \"2026-05-13T16:15:41+03:00\",\n      \"dateStart\": \"2026-05-13T17:15:41+03:00\",\n      \"dateStop\": \"2026-05-13T17:15:41+03:00\"\n    }\n  ],\n  \"meta\": {\n    \"total\": 2\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n403 — нет скоупа:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"SCOPE_DENIED\",\n    \"message\": \"This endpoint requires 'task' scope\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `task` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n| 422 | `BITRIX_ERROR` | Битрикс24 вернул ошибку при чтении — например, родительская задача отсутствует или удалена |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Сортировка по убыванию `id`.** Сначала возвращаются последние добавленные записи. `limit` и `offset` работают поверх этой сортировки.\n\n## Смотрите также\n\n- [Получить запись](.\u002Fget.md) — одна запись по `id`\n- [Добавить запись](.\u002Fcreate.md) — создание новой записи\n- [Обновить запись](.\u002Fupdate.md) — изменить длительность или комментарий\n- [Удалить запись](.\u002Fdelete.md) — снять запись\n- [Задачи](\u002Fdocs\u002Fentities\u002Ftasks) — родительская сущность\n","\n## Получить запись учёта времени\n\n`GET \u002Fv1\u002Ftasks\u002F:taskId\u002Ftime\u002F:itemId`\n\nВозвращает одну запись учёта времени по её идентификатору.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `taskId` (path) | number | да | ID задачи |\n| `itemId` (path) | number | да | ID записи учёта времени (из [`GET \u002Fv1\u002Ftasks\u002F:taskId\u002Ftime`](.\u002Flist.md) или ответа [`POST \u002Fv1\u002Ftasks\u002F:taskId\u002Ftime`](.\u002Fcreate.md)) |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002F289\u002Ftime\u002F161\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002F289\u002Ftime\u002F161\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002F289\u002Ftime\u002F161', {\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\n})\n\nconst { success, data } = await res.json()\nconsole.log(`Минут потрачено: ${data.minutes}`)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002F289\u002Ftime\u002F161', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data.id` | string | Идентификатор записи |\n| `data.taskId` | string | ID родительской задачи |\n| `data.userId` | string | Автор. Профиль: `GET \u002Fv1\u002Fusers\u002F:userId` |\n| `data.seconds` | string | Длительность в секундах |\n| `data.minutes` | string | Длительность в минутах (производное от `seconds`) |\n| `data.commentText` | string | Комментарий к записи |\n| `data.source` | string | Источник: `2` — REST API |\n| `data.createdDate` | datetime | Когда запись была создана |\n| `data.dateStart` | datetime | Начало учтённого интервала |\n| `data.dateStop` | datetime | Окончание учтённого интервала |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"161\",\n    \"taskId\": \"289\",\n    \"userId\": \"1\",\n    \"commentText\": \"Подготовка черновика\",\n    \"seconds\": \"900\",\n    \"minutes\": \"15\",\n    \"source\": \"2\",\n    \"createdDate\": \"2026-05-13T16:15:41+03:00\",\n    \"dateStart\": \"2026-05-13T17:15:41+03:00\",\n    \"dateStop\": \"2026-05-13T17:15:41+03:00\"\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n422 — запись не найдена или недоступна:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BITRIX_ERROR\",\n    \"message\": \"TASKS_ERROR_EXCEPTION_#512; Check listitem not found or not accessible; 512\u002FTE\u002FITEM_NOT_FOUND_OR_NOT_ACCESSIBLE\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 422 | `BITRIX_ERROR` | Запись с таким `itemId` не найдена или родительская задача недоступна |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `task` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Смотрите также\n\n- [Список записей](.\u002Flist.md) — найти `itemId` нужной записи\n- [Обновить запись](.\u002Fupdate.md) — изменить длительность или комментарий\n- [Удалить запись](.\u002Fdelete.md) — снять запись\n- [Задачи](\u002Fdocs\u002Fentities\u002Ftasks) — родительская сущность\n","\n## Обновить запись учёта времени\n\n`PATCH \u002Fv1\u002Ftasks\u002F:taskId\u002Ftime\u002F:itemId`\n\nИзменяет существующую запись учёта времени. Передавайте только изменяемые поля.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `taskId` (path) | number | да | ID задачи |\n| `itemId` (path) | number | да | ID записи учёта времени |\n\n## Поля запроса (body)\n\n| Поле | Тип | Обяз. | Описание |\n|------|-----|:-----:|---------|\n| `seconds` | number | | Новая длительность в секундах. После обновления `MINUTES` пересчитывается автоматически |\n| `comment` | string | | Новый комментарий к записи |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X PATCH \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002F289\u002Ftime\u002F161\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"seconds\": 900,\n    \"comment\": \"Уточнённая оценка\"\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X PATCH \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002F289\u002Ftime\u002F161\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"seconds\": 900,\n    \"comment\": \"Уточнённая оценка\"\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002F289\u002Ftime\u002F161', {\n  method: 'PATCH',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    seconds: 900,\n    comment: 'Уточнённая оценка',\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002F289\u002Ftime\u002F161', {\n  method: 'PATCH',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    seconds: 900,\n    comment: 'Уточнённая оценка',\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` при успешном обновлении |\n| `data.id` | number | Идентификатор обновлённой записи |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": 161\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n422 — запись не найдена или недоступна:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BITRIX_ERROR\",\n    \"message\": \"TASKS_ERROR_EXCEPTION_#512; Check listitem not found or not accessible; 512\u002FTE\u002FITEM_NOT_FOUND_OR_NOT_ACCESSIBLE\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `READONLY_FIELD` | Передан `userId` — автора записи изменить нельзя (см. «Известные особенности») |\n| 422 | `BITRIX_ERROR` | Запись с таким `itemId` не найдена или родительская задача недоступна |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `task` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Автора записи (`userId`) изменить нельзя.** Метод Bitrix24 `task.elapseditem.update` принимает только `seconds`, `comment` и дату; любое другое поле, включая `userId`, он отвергает целиком (`256\u002FTE\u002FWRONG_ARGUMENTS`), отбрасывая заодно переданные в том же запросе `seconds`\u002F`comment`. Поэтому `userId` в `PATCH` отклоняется заранее с `400 READONLY_FIELD`. Автор фиксируется при создании записи. Чтобы «переназначить» время, удалите запись и создайте новую с нужным `userId`.\n\n**Ответ — только `id`, без остальных полей.** Чтобы прочитать обновлённую запись со всеми полями, сделайте [`GET \u002Fv1\u002Ftasks\u002F:taskId\u002Ftime\u002F:itemId`](.\u002Fget.md).\n\n## Смотрите также\n\n- [Получить запись](.\u002Fget.md) — прочитать запись после обновления\n- [Список записей](.\u002Flist.md) — все записи задачи\n- [Добавить запись](.\u002Fcreate.md) — создать новую\n- [Удалить запись](.\u002Fdelete.md) — снять запись\n- [Задачи](\u002Fdocs\u002Fentities\u002Ftasks) — родительская сущность\n","\n## Удалить запись учёта времени\n\n`DELETE \u002Fv1\u002Ftasks\u002F:taskId\u002Ftime\u002F:itemId`\n\nУдаляет запись учёта времени. Восстановить её через API нельзя — создавайте новую при необходимости.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `taskId` (path) | number | да | ID задачи |\n| `itemId` (path) | number | да | ID записи учёта времени |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X DELETE \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002F289\u002Ftime\u002F161\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X DELETE \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002F289\u002Ftime\u002F161\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002F289\u002Ftime\u002F161', {\n  method: 'DELETE',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\n})\n\nif (res.status === 204) {\n  console.log('Запись удалена')\n}\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002F289\u002Ftime\u002F161', {\n  method: 'DELETE',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nif (res.status === 204) {\n  console.log('Удалено')\n}\n```\n\n## Ответ\n\nПри успешном удалении возвращается HTTP-статус `204 No Content` с пустым телом — признак успеха проверяется по статусу.\n\n## Пример ответа\n\n```\nHTTP\u002F1.1 204 No Content\n```\n\n## Пример ответа при ошибке\n\n422 — запись не найдена или недоступна:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BITRIX_ERROR\",\n    \"message\": \"TASKS_ERROR_EXCEPTION_#512; Check listitem not found or not accessible; 512\u002FTE\u002FITEM_NOT_FOUND_OR_NOT_ACCESSIBLE\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 422 | `BITRIX_ERROR` | Запись с таким `itemId` не найдена (в том числе если она или родительская задача уже удалены) |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `task` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Смотрите также\n\n- [Список записей](.\u002Flist.md) — найти запись перед удалением\n- [Получить запись](.\u002Fget.md) — проверить состояние перед удалением\n- [Обновить запись](.\u002Fupdate.md) — альтернатива удалению: исправить ошибочное значение\n- [Задачи](\u002Fdocs\u002Fentities\u002Ftasks) — родительская сущность\n"]