[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-entities\u002Ftasks\u002Fsearch":3,"docs-tabs-entities\u002Ftasks\u002Fsearch":6},{"content":4,"lastmod":5},"\n## Поиск задач\n\n`POST \u002Fv1\u002Ftasks\u002Fsearch`\n\nПоиск задач с фильтрами и сортировкой. Аналог `GET \u002Fv1\u002Ftasks`, но параметры передаются в теле запроса — подходит для длинных и сложных фильтров. Дополнительно поддерживает автоматическое разбиение запроса по временны́м окнам для выборок свыше 5000 записей.\n\n## Поля запроса (body)\n\n| Параметр | Тип | По умолч. | Описание |\n|----------|-----|-----------|---------|\n| `filter` | object | — | Фильтрация по полям `GET \u002Fv1\u002Ftasks\u002Ffields`.\u003Cbr>[Синтаксис фильтрации](\u002Fdocs\u002Ffiltering). Пример: `{\"status\": 2, \"responsibleId\": 1}` |\n| `select` | string[] | — | Выборка полей: `[\"id\", \"title\", \"status\", \"responsibleId\"]` |\n| `order` | object | `id desc` | Сортировка: `{ \"createdDate\": \"desc\" }` |\n| `limit` | number | `50` | Количество записей (до 5000) |\n| `offset` | number | `0` | Пропустить N записей |\n| `autoWindow` | boolean | `false` | Разбить запрос по временны́м окнам — обход лимита Битрикс24 в 5000 записей на один вызов |\n| `windowFrom` | datetime | — | Начало диапазона для разбиения по временны́м окнам (ISO 8601) |\n| `windowTo` | datetime | — | Конец диапазона для разбиения по временны́м окнам (ISO 8601) |\n\n> ⚠ **`status` vs `realStatus`.** `filter.status` в Bitrix24 — виртуальный (мета-)фильтр (`−1` просрочена, `−2` не просмотрена, `−3` почти просрочена), а не число из поля `status` ответа: `{\"filter\": {\"status\": 2}}` не вернёт задачи со статусом `2`. Для фильтра\u002Fсортировки по фактическому статусу используйте `realStatus`: `{\"filter\": {\"realStatus\": 2}}`, `{\"sort\": {\"realStatus\": \"asc\"}}`.\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002Fsearch\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"filter\": { \"status\": 2, \"responsibleId\": 1 },\n    \"select\": [\"id\", \"title\", \"status\", \"deadline\"],\n    \"order\": { \"id\": \"desc\" },\n    \"limit\": 50\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002Fsearch\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"filter\": { \"status\": 2, \"responsibleId\": 1 },\n    \"select\": [\"id\", \"title\", \"status\", \"deadline\"],\n    \"order\": { \"id\": \"desc\" },\n    \"limit\": 50\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002Fsearch', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    filter: { status: 2, responsibleId: 1 },\n    select: ['id', 'title', 'status', 'deadline'],\n    order: { id: 'desc' },\n    limit: 50,\n  }),\n})\n\nconst { success, data, meta } = await res.json()\nconsole.log(`Найдено ${data.length} из ${meta.total} задач`)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002Fsearch', {\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    filter: { status: 2, responsibleId: 1 },\n    select: ['id', 'title', 'status', 'deadline'],\n    order: { id: 'desc' },\n    limit: 50,\n  }),\n})\n\nconst { success, data, meta } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data` | array | Массив задач (все поля — см. [Поля задачи](.\u002Ffields.md)) |\n| `meta.total` | number | Общее количество записей, соответствующих фильтру |\n| `meta.hasMore` | boolean | Есть ли ещё записи за пределами `limit` |\n| `meta.durationMs` | number | Длительность выполнения запроса в миллисекундах |\n| `meta.autoWindowed` | boolean | `true`, если запрос был разбит по временны́м окнам |\n| `meta.windowCount` | number | Количество окон (только при `autoWindowed: true`) |\n| `meta.batchWaves` | number | Сколько волн параллельных запросов потребовалось (только при `autoWindowed: true`) |\n\nURL карточки любой задачи из массива `data` строится из её `id` и ID сотрудника:\n\n```\nhttps:\u002F\u002F\u003Cportal>.bitrix24.ru\u002Fcompany\u002Fpersonal\u002Fuser\u002F\u003CresponsibleId>\u002Ftasks\u002Ftask\u002Fview\u002F\u003Cid>\u002F\n```\n\n`\u003CresponsibleId>` — ID ответственного (поле `responsibleId` каждого элемента): задача откроется в его личном кабинете. Сегмент `user\u002F\u003C...>` задаёт, в чьём кабинете отображается страница задач — подставьте ID нужного сотрудника, например текущего. `\u003Cportal>` — домен портала. Доступ ограничен правами сотрудника в Битрикс24.\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": [\n    {\n      \"id\": \"289\",\n      \"title\": \"Подготовить отчёт за квартал\",\n      \"status\": \"2\",\n      \"deadline\": \"2026-05-19T18:00:00+03:00\"\n    },\n    {\n      \"id\": \"311\",\n      \"title\": \"Свериться с бухгалтерией\",\n      \"status\": \"2\",\n      \"deadline\": \"2026-05-15T17:00:00+03:00\"\n    }\n  ],\n  \"meta\": {\n    \"total\": 182,\n    \"hasMore\": true,\n    \"durationMs\": 1226\n  }\n}\n```\n\nС `autoWindow: true` дополнительно появятся `autoWindowed`, `windowCount`, `batchWaves`:\n\n```json\n{\n  \"success\": true,\n  \"data\": [ \u002F* ... *\u002F ],\n  \"meta\": {\n    \"total\": 50,\n    \"hasMore\": false,\n    \"autoWindowed\": true,\n    \"windowCount\": 157,\n    \"batchWaves\": 4,\n    \"durationMs\": 4357\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 'tasks' scope\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `tasks` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n| — | `WINDOWED_SEARCH_FAILED` | Ретайрнут: при полном отказе окон возвращается реальный код Битрикс24 — `UNKNOWN_FILTER_FIELD` \u002F `BITRIX_ACCESS_DENIED` \u002F `RATE_LIMITED` \u002F `BITRIX_UNAVAILABLE` |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Когда выбирать search вместо list.** `GET \u002Fv1\u002Ftasks` подходит для коротких фильтров в URL. `POST \u002Fv1\u002Ftasks\u002Fsearch` применяется, когда условий много — вложенные объекты, массивы, диапазоны дат: параметры в теле читаются и собираются проще, чем длинная query-строка.\n\n**Разбиение по временны́м окнам.** Если задач больше 5000, передайте `autoWindow: true` вместе с диапазоном `windowFrom`\u002F`windowTo`. Запрос автоматически разбивается на окна, выполняется параллельными волнами, и в `meta` приходит число окон (`windowCount`) и волн (`batchWaves`). Этим обходится лимит Битрикс24 в 5000 записей на один вызов.\n\n**Числовые значения как строки.** Поля-идентификаторы и числовые перечисления (`id`, `status`, `priority`, `responsibleId`, `createdBy`, `groupId`) приходят строками. Для арифметики и сравнений приводите через `Number(value)`.\n\n## Смотрите также\n\n- [Список задач](.\u002Flist.md) — GET-вариант с query-параметрами\n- [Поля задачи](.\u002Ffields.md) — какие поля принимает `filter` и `select`\n- [Агрегация задач](.\u002Faggregate.md) — подсчёт и группировка\n- [Синтаксис фильтрации](\u002Fdocs\u002Ffiltering)\n- [Batch-запросы](\u002Fdocs\u002Fbatch) — объединение нескольких запросов\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization) — rate limits\n","2026-07-07",{}]