[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-entities\u002Fproduct-sections\u002Fsearch":3,"docs-tabs-entities\u002Fproduct-sections\u002Fsearch":6},{"content":4,"lastmod":5},"\n## Поиск разделов\n\n`POST \u002Fv1\u002Fproduct-sections\u002Fsearch`\n\nПоиск разделов товаров с фильтрацией и авто-пагинацией. Аналогичен `GET \u002Fv1\u002Fproduct-sections` с фильтрами, но через POST — удобнее для сложных запросов с большим количеством условий.\n\n## Поля запроса (body)\n\n| Параметр | Тип | По умолч. | Описание |\n|----------|-----|-----------|---------|\n| `filter` | object | — | Только точное равенство и `$in` (IN-множество) по полям `id`, `name`, `xmlId`, `code`, `catalogId`, `sectionId`. Операторы (`>`, `\u003C`, `!`, `%`, `$ne`, `$contains`, `$nin`) и фильтрация по `sort` не поддерживаются — вернётся `400 UNSUPPORTED_FILTER`.\u003Cbr>[Синтаксис фильтрации](\u002Fdocs\u002Ffiltering). Пример: `{ \"filter\": { \"catalogId\": 25 } }` |\n| `limit` | number | `50` | Количество записей (до 5000) |\n| `select` | string[] | — | Выборка полей: `[\"id\", \"name\", \"catalogId\"]` |\n| `order` | object | — | Сортировка по полю: `{ \"sort\": \"asc\" }` |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fproduct-sections\u002Fsearch\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"filter\": { \"catalogId\": 25 },\n    \"limit\": 10,\n    \"select\": [\"id\", \"name\", \"catalogId\", \"code\"]\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fproduct-sections\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\": { \"catalogId\": 25 },\n    \"limit\": 10,\n    \"select\": [\"id\", \"name\", \"catalogId\", \"code\"]\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fproduct-sections\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: { catalogId: 25 },\n    limit: 10,\n    select: ['id', 'name', 'catalogId', 'code'],\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\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: { catalogId: 25 },\n    limit: 10,\n    select: ['id', 'name', 'catalogId', 'code'],\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 | Идентификатор каталога |\n| `data[].sectionId` | number | Идентификатор родительского раздела. У корневого раздела — `null` |\n| `data[].code` | string | Символьный код раздела |\n| `data[].xmlId` | string | Внешний идентификатор |\n| `meta.total` | number | Общее количество записей, соответствующих фильтру |\n| `meta.hasMore` | boolean | Есть ли ещё записи за пределами `limit` |\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\": \"razdel-dlya-filtra\",\n      \"xmlId\": null\n    }\n  ],\n  \"meta\": {\n    \"total\": 36,\n    \"hasMore\": true\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n400 — оператор или неподдерживаемое поле в фильтре:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"UNSUPPORTED_FILTER\",\n    \"message\": \"UNSUPPORTED_FILTER: operators are not supported on 'product-sections' (near 'name'). Its Bitrix24 method (crm.productsection.list) filters by exact match only — operators are silently ignored by Bitrix24. Use exact match (field: value) or $in (field: {$in: [...]}) on: id, name, xmlId, code, catalogId, sectionId.\"\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` | API-ключ не имеет скоупа `crm` |\n| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Авто-пагинация.** При `limit > 50` запрос разбивается на несколько обращений к серверу. Максимум — 5000 записей за вызов. Если под фильтр попадает больше, в `meta.hasMore` придёт `true`.\n\n**Только точное равенство в фильтре.** Метод фильтрует точным равенством (и `$in`) по `id`, `name`, `xmlId`, `code`, `catalogId`, `sectionId`. Операторы, `$ne`\u002F`$contains`\u002F`$nin` и фильтрация по `sort` дают `400 UNSUPPORTED_FILTER`. Сортировка (`order`) по `sort` и другим полям работает.\n\n## Смотрите также\n\n- [Список разделов](\u002Fdocs\u002Fentities\u002Fproduct-sections\u002Flist)\n- [Получить раздел](\u002Fdocs\u002Fentities\u002Fproduct-sections\u002Fget)\n- [Поля раздела](\u002Fdocs\u002Fentities\u002Fproduct-sections\u002Ffields)\n- [Синтаксис фильтрации](\u002Fdocs\u002Ffiltering)\n- [Batch](\u002Fdocs\u002Fbatch)\n","2026-07-13",{}]