[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-entities\u002Fcalendar-sections\u002Flist":3,"docs-tabs-entities\u002Fcalendar-sections\u002Flist":6},{"content":4,"lastmod":5},"## Список секций\n\n`GET \u002Fv1\u002Fcalendar-sections`\n\nВозвращает все секции календаря для пары `type` + `ownerId`. У одного сотрудника может быть несколько секций — например, «Работа», «Личное», «Командные встречи».\n\n## Параметры\n\n| Параметр | Тип | Обяз. | По умолч. | Описание |\n|----------|-----|:-----:|-----------|---------|\n| `type` (query) | string | да | — | Тип календаря: `user` — личный, `group` — групповой, `company_calendar` — календарь компании, `location` — переговорная |\n| `ownerId` (query) | number | да | — | Идентификатор владельца календаря. Для сотрудника — `GET \u002Fv1\u002Fusers`, для рабочей группы — её id, для `type=location` — `0` |\n| `limit` (query) | number | нет | `50` | Количество записей, до 5000. При `limit > 50` включается автопагинация |\n| `offset` (query) | number | нет | `0` | Принимается, но не влияет на выборку — список возвращает все секции пары `type` + `ownerId` |\n\nФильтрация через `filter[...]` не поддерживается. Любой ключ `filter[name]=...` возвращает `400 UNSUPPORTED_FILTER` ещё до обращения к Битрикс24.\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-sections?type=user&ownerId=1\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-sections?type=user&ownerId=1\" \\\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({ type: 'user', ownerId: '1' })\nconst res = await fetch(`https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-sections?${params}`, {\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\n})\n\nconst { success, data, meta } = await res.json()\nconsole.log(`Найдено ${meta.total} секций`)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst params = new URLSearchParams({ type: 'user', ownerId: '1' })\nconst res = await fetch(`https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcalendar-sections?${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 | Массив секций |\n| `meta.total` | number | Общее количество секций в выборке |\n| `meta.hasMore` | boolean | Есть ли ещё записи за пределами `limit` |\n\nПоля одной секции в массиве `data`:\n\n| Поле | Тип | RO | Описание |\n|------|-----|:--:|---------|\n| `id` | number | да | Идентификатор секции |\n| `name` | string | нет | Название |\n| `description` | string | нет | Описание |\n| `type` | string | нет | Тип календаря: `user`, `group`, `company_calendar`, `location` |\n| `ownerId` | number | нет | Идентификатор владельца календаря |\n| `color` | string | нет | Цвет секции в формате `#RRGGBB` |\n| `textColor` | string | нет | Цвет текста в формате `#RRGGBB` |\n| `export` | object | нет | Параметры экспорта в формате iCal: `{ \"ALLOW\": boolean, \"SET\": \"all\" \\| \"3_9\" \\| \"6_12\" }`. Ключи внутри объекта — в верхнем регистре, формат сохраняется на запись и чтение без преобразований |\n| `access` | object | да | Карта прав доступа: ключ — идентификатор права доступа, значение — числовой идентификатор разрешения |\n| `perm` | object | да | Карта разрешений текущего сотрудника: `view_time`, `view_title`, `view_full`, `add`, `edit`, `edit_section`, `access` |\n| `isCollab` | boolean | да | Принадлежность к коллабе |\n| `createdBy` | number | да | Идентификатор создателя секции |\n| `dateCreate` | datetime | да | Дата создания |\n| `updatedAt` | datetime | да | Дата последнего изменения |\n\n«RO» — поле доступно только на чтение, передавать в `POST` \u002F `PATCH` нельзя, иначе Вайбкод вернёт `400 READONLY_FIELD`.\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": [\n    {\n      \"id\": 42,\n      \"name\": \"Работа\",\n      \"description\": \"Основной рабочий календарь\",\n      \"type\": \"user\",\n      \"ownerId\": 1,\n      \"color\": \"#9cbeee\",\n      \"textColor\": \"#283000\",\n      \"export\": {\n        \"ALLOW\": true,\n        \"SET\": \"3_9\"\n      },\n      \"access\": {\n        \"U1\": \"calendar_owner\",\n        \"G2\": 13\n      },\n      \"perm\": {\n        \"view_time\": true,\n        \"view_title\": true,\n        \"view_full\": true,\n        \"add\": true,\n        \"edit\": true,\n        \"edit_section\": true,\n        \"access\": true\n      },\n      \"isCollab\": false,\n      \"createdBy\": 1,\n      \"dateCreate\": \"2026-05-15T09:34:33+03:00\",\n      \"updatedAt\": \"2026-05-15T09:34:33+03:00\"\n    }\n  ],\n  \"meta\": {\n    \"total\": 1,\n    \"hasMore\": false\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n400 — не переданы обязательные `type` или `ownerId`:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"MISSING_REQUIRED_PARAMS\",\n    \"message\": \"GET \u002Fv1\u002Fcalendar-sections requires query parameters: type, ownerId. Example: GET \u002Fv1\u002Fcalendar-sections?type=...&ownerId=...\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `MISSING_REQUIRED_PARAMS` | Не переданы `type` или `ownerId` |\n| 400 | `UNSUPPORTED_FILTER` | Передан ключ `filter[...]` — фильтрация не поддерживается. Допустимы только `type`, `ownerId`, `limit`, `offset` |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `calendar` |\n| 401 | `TOKEN_MISSING` | У API-ключа нет настроенных токенов |\n| 502 | `BITRIX_UNAVAILABLE` | Битрикс24 временно недоступен — повторите запрос позже |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**`limit` обрезает выдачу на стороне API Вайбкод, `offset` не действует.** Список всегда возвращает все секции указанной пары `type` + `ownerId`. `limit` обрезает полученный массив до N записей, а `offset` принимается, но игнорируется — пропустить записи через него нельзя.\n\n**Поле `export` сохраняет регистр Битрикс24.** Ключи внутри `export` остаются `ALLOW` и `SET` в верхнем регистре — не преобразуются к camelCase. То же при отправке через [`POST \u002Fv1\u002Fcalendar-sections`](.\u002Fcreate.md): передавайте именно `{ \"ALLOW\": true, \"SET\": \"3_9\" }`.\n\n**Получить секцию по одному `id` через API нельзя.** Эндпоинт `GET \u002Fv1\u002Fcalendar-sections\u002F:id` не поддерживается. Чтобы найти одну секцию по `id` — получите список и отфильтруйте на стороне клиента: `data.find(s => s.id === 42)`.\n\n## Смотрите также\n\n- [Создать секцию](.\u002Fcreate.md)\n- [Обновить секцию](.\u002Fupdate.md)\n- [Удалить секцию](.\u002Fdelete.md)\n- [Пакет операций](.\u002Fbatch.md)\n- [События календаря](\u002Fdocs\u002Fentities\u002Fcalendar-events)\n","2026-07-23",{}]