[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-task-history":3,"docs-tabs-task-history":6},{"content":4,"lastmod":5},"# История изменений задачи\n\n`GET \u002Fv1\u002Ftasks\u002F:taskId\u002Fhistory`\n\nВозвращает историю изменений одной задачи целиком за один вызов — переходы по колонкам канбана, перемещения между спринтом и бэклогом, смены статуса, ответственного, срока и другие события. Применяется для восстановления фактического пути задачи по доске с реальными датами переходов.\n\nБитрикс24 API: `tasks.task.history.list`\nСкоуп: `task`\n\n## Параметры\n\n| Параметр | Тип | Обяз. | По умолч. | Описание |\n|----------|-----|:-----:|-----------|----------|\n| `taskId` (path) | number | да | — | Идентификатор задачи. Источник: `GET \u002Fv1\u002Ftasks` |\n| `field` (query) | string | нет | — | Фильтр по типу события. Одно значение — `?field=STAGE`, несколько — через запятую `?field=STAGE,MOVE_TO_SPRINT`. Переход по колонкам канбана — значение `STAGE`. Другие значения: `MOVE_TO_SPRINT`, `MOVE_TO_BACKLOG`, `STATUS`, `RESPONSIBLE_ID`, `DEADLINE`, `NEW`, `COMMENT`, `TAGS` и другие |\n| `order` (query) | string | нет | `asc` | Порядок по дате: `asc` — от старых к новым, `desc` — от новых к старым |\n\nБез параметра `field` метод возвращает события всех типов. Метод отдаёт всю историю задачи за один вызов — постраничного обхода нет, `meta.hasMore` всегда `false`.\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002F61\u002Fhistory?field=STAGE&order=asc\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002F61\u002Fhistory?field=STAGE&order=asc\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst params = new URLSearchParams({ field: 'STAGE', order: 'asc' })\nconst res = await fetch(`https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002F61\u002Fhistory?${params}`, {\n  headers: { 'X-Api-Key': 'YOUR_API_KEY' },\n})\n\nconst { success, data, meta } = await res.json()\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst params = new URLSearchParams({ field: 'STAGE', order: 'asc' })\nconst res = await fetch(`https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002F61\u002Fhistory?${params}`, {\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 | Массив событий, порядок задаётся параметром `order` |\n| `data[].id` | number | Идентификатор записи журнала. Стабилен, подходит для проверки события на повтор |\n| `data[].createdDate` | string | Момент события в часовом поясе пользователя (ISO 8601) |\n| `data[].field` | string | Тип события: `STAGE`, `MOVE_TO_SPRINT`, `STATUS` и другие |\n| `data[].value` | object | Прежнее и новое значение поля |\n| `data[].value.from` | string \\| null | Прежнее значение. Для `STAGE` — название колонки. Пустая строка или `null`, когда прежнего значения нет |\n| `data[].value.to` | string \\| null | Новое значение. Для `STAGE` — название колонки. `null` для событий без значения, например `NEW` |\n| `data[].user` | object | Автор изменения |\n| `data[].user.id` | number | Идентификатор автора. Источник: `GET \u002Fv1\u002Fusers` |\n| `meta.total` | number | Количество записей в ответе |\n| `meta.hasMore` | boolean | Всегда `false` — ответ содержит всю историю задачи |\n\n## Пример ответа\n\nЗадача 61, фильтр по колонкам канбана `field=STAGE`:\n\n```json\n{\n  \"success\": true,\n  \"data\": [\n    {\n      \"id\": 378,\n      \"createdDate\": \"2026-06-11T14:14:14+02:00\",\n      \"field\": \"STAGE\",\n      \"value\": { \"from\": \"\", \"to\": \"Беклог\" },\n      \"user\": { \"id\": 1 }\n    },\n    {\n      \"id\": 413,\n      \"createdDate\": \"2026-06-17T00:35:43+02:00\",\n      \"field\": \"STAGE\",\n      \"value\": { \"from\": \"Работа со спецификациями\", \"to\": \"Ревью кода\" },\n      \"user\": { \"id\": 1 }\n    }\n  ],\n  \"meta\": {\n    \"total\": 22,\n    \"hasMore\": false\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n400 — `taskId` не является положительным числом:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"INVALID_PARAMS\",\n    \"message\": \"taskId must be a positive integer\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|----------|\n| 400 | `INVALID_PARAMS` | `taskId` меньше единицы или не число |\n| 403 | `SCOPE_DENIED` | Ключу не хватает скоупа `task` |\n| 401 | `TOKEN_MISSING` | У ключа не настроены токены доступа |\n| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Значение `value` для `STAGE` — название колонки.** Поля `value.from` и `value.to` для события `STAGE` содержат название колонки канбана на момент перехода, а не её идентификатор. Значение `value.from` пустое при первом попадании задачи на доску.\n\n## Смотрите также\n\n- [Стадии канбана задач](\u002Fdocs\u002Ftask-stages)\n- [Задачи](\u002Fdocs\u002Fentities\u002Ftasks)\n- [Справочник сущностей](\u002Fdocs\u002Fentity-api)\n- [Ошибки](\u002Fdocs\u002Ferrors)\n","2026-07-15",{}]