[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-entities\u002Fproduct-sections\u002Flist":3,"docs-tabs-entities\u002Fproduct-sections\u002Flist":6},{"content":4,"lastmod":5},"\n## Список разделов\n\n`GET \u002Fv1\u002Fproduct-sections`\n\nВозвращает разделы каталога товаров с поддержкой фильтрации и авто-пагинации. Это те же разделы, что доступны через [`GET \u002Fv1\u002Fcatalog-sections`](\u002Fdocs\u002Fentities\u002Fcatalog-sections) — с тем же `id`.\n\n## Параметры\n\n| Параметр | Тип | По умолч. | Описание |\n|----------|-----|-----------|---------|\n| `limit` | number | `50` | Количество записей до 5000. При `limit > 50` Вайбкод автоматически запрашивает несколько страниц у Битрикс24 |\n| `offset` | number | `0` | Смещение от начала выборки |\n| `select` | string | — | Выборка полей: `?select=id,name,sectionId` |\n| `filter` | object | — | Только точное равенство и `$in` (IN-множество) по полям `id`, `name`, `xmlId`, `code`, `catalogId`, `sectionId`. Операторы (`>`, `>=`, `\u003C`, `\u003C=`, `!`, `%`, `$ne`, `$contains`, `$nin`) и фильтрация по `sort` не поддерживаются — вернётся `400 UNSUPPORTED_FILTER`.\u003Cbr>[Синтаксис фильтрации](\u002Fdocs\u002Ffiltering). Пример: `?filter[catalogId]=25` |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fproduct-sections?filter[catalogId]=25&limit=10\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fproduct-sections?filter[catalogId]=25&limit=10\" \\\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\u002Fproduct-sections?filter[catalogId]=25&limit=10', {\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 res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fproduct-sections?filter[catalogId]=25&limit=10', {\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` | number | Идентификатор раздела |\n| `data[].name` | string | Название раздела |\n| `data[].catalogId` | number | ID каталога, к которому относится раздел |\n| `data[].sectionId` | number | ID родительского раздела. У раздела верхнего уровня — `null` |\n| `data[].code` | string | Символьный код раздела |\n| `data[].xmlId` | string | Внешний идентификатор |\n| `meta.total` | number | Общее количество записей, соответствующих фильтру |\n| `meta.hasMore` | boolean | Есть ли ещё записи за пределами `limit` |\n\nПоле `sort` в список не входит и по нему нельзя фильтровать (в сортировке `order`\u002F`sort` — можно). Полный набор полей раздела — [`GET \u002Fv1\u002Fproduct-sections\u002Ffields`](.\u002Ffields.md).\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": [\n    {\n      \"id\": 31,\n      \"catalogId\": 25,\n      \"sectionId\": null,\n      \"name\": \"Одежда\",\n      \"code\": \"clothes\",\n      \"xmlId\": \"666\"\n    },\n    {\n      \"id\": 45,\n      \"catalogId\": 25,\n      \"sectionId\": null,\n      \"name\": \"Зимняя коллекция\",\n      \"code\": \"winter\",\n      \"xmlId\": null\n    }\n  ],\n  \"meta\": {\n    \"total\": 36,\n    \"hasMore\": true\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 'crm' scope\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `UNSUPPORTED_FILTER` | Оператор или неподдерживаемое поле в фильтре. Фильтруйте точным равенством или `$in` по `id`, `name`, `xmlId`, `code`, `catalogId`, `sectionId` |\n| 400 | `INVALID_FILTER` | Ошибка в синтаксисе фильтра |\n| 403 | `SCOPE_DENIED` | Ключу не хватает скоупа `crm` |\n| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Только точное равенство.** Фильтр применяется точным равенством (и `$in`-множеством) по `id`, `name`, `xmlId`, `code`, `catalogId`, `sectionId`. Операторы (`>`, `\u003C`, `!`, `%`), `$ne`\u002F`$contains`\u002F`$nin` и фильтрация по `sort` дают `400 UNSUPPORTED_FILTER` — так вы сразу видите, что фильтр не применился, а не получаете весь список без фильтра.\n\n**Разделы одного родителя.** Чтобы получить вложенные разделы внутри конкретного раздела, фильтруйте точным равенством по `filter[sectionId]` с идентификатором родителя.\n\n**Без фильтра возвращаются разделы всех каталогов портала.** Чтобы ограничить выборку одним каталогом, передавайте `filter[catalogId]`. Список каталогов — `GET \u002Fv1\u002Fcatalogs`.\n\n## Смотрите также\n\n- [Получить раздел](\u002Fdocs\u002Fentities\u002Fproduct-sections\u002Fget)\n- [Создать раздел](\u002Fdocs\u002Fentities\u002Fproduct-sections\u002Fcreate)\n- [Поиск разделов](\u002Fdocs\u002Fentities\u002Fproduct-sections\u002Fsearch)\n- [Поля раздела](\u002Fdocs\u002Fentities\u002Fproduct-sections\u002Ffields)\n- [Разделы каталога](\u002Fdocs\u002Fentities\u002Fcatalog-sections)\n- [Синтаксис фильтрации](\u002Fdocs\u002Ffiltering)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n","2026-07-13",{}]