[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-catalog-extended":3,"docs-tabs-catalog-extended":6},{"content":4,"lastmod":5},"# Каталог и склад\n\nУправляйте каталогом товаров, ценами и складскими остатками через Entity API. Разделы каталога, ценовые предложения, склады — всё через стандартные CRUD-операции.\n\n## Обзор\n\nCatalog API расширяет базовые entity-обёртки для торгового каталога Битрикс24:\n\n- **Разделы каталога** (`\u002Fv1\u002Fcatalog-sections\u002F*`) — категории и подкатегории товаров\n- **Цены** (`\u002Fv1\u002Fcatalog-prices\u002F*`) — ценовые предложения (прайс-листы)\n- **Склады** (`\u002Fv1\u002Fwarehouses\u002F*`) — управление складами и остатками\n\n**Требуемые скоупы:** `catalog`, `crm`\n\n**Базовый URL:** `https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1`\n\n**Авторизация:** заголовок `X-Api-Key` с вашим API-ключом.\n\n## Быстрый старт\n\n### Создайте раздел каталога\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcatalog-sections \\\n  -H \"X-Api-Key: $VIBE_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"fields\": {\n      \"iblockId\": 14,\n      \"name\": \"Электроника\",\n      \"iblockSectionId\": null\n    }\n  }'\n```\n\nОтвет:\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"section\": {\n      \"id\": 42\n    }\n  }\n}\n```\n\n## Разделы каталога\n\nEntity: `catalog-sections` — разделы (категории) торгового каталога.\n\n### POST \u002Fv1\u002Fcatalog-sections\n\nСоздаёт новый раздел каталога.\n\n**Параметры тела запроса (в `fields`):**\n\n| Параметр | Тип | Обязательный | Описание |\n|----------|-----|:---:|---------|\n| `iblockId` | number | да | ID инфоблока каталога |\n| `name` | string | да | Название раздела |\n| `iblockSectionId` | number | нет | ID родительского раздела (`null` — корневой) |\n| `xmlId` | string | нет | Внешний ID для синхронизации |\n| `description` | string | нет | Описание раздела |\n| `sort` | number | нет | Порядок сортировки |\n\n**JavaScript:**\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcatalog-sections', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': VIBE_KEY,\n    'Content-Type': 'application\u002Fjson'\n  },\n  body: JSON.stringify({\n    fields: {\n      iblockId: 14,\n      name: 'Смартфоны',\n      iblockSectionId: 42,  \u002F\u002F дочерний раздел \"Электроники\"\n      sort: 100\n    }\n  })\n})\n\nconst { data } = await res.json()\nconsole.log('Section ID:', data.section.id)\n```\n\n### GET \u002Fv1\u002Fcatalog-sections\n\nВозвращает список разделов каталога с фильтрацией.\n\n```bash\ncurl -H \"X-Api-Key: $VIBE_KEY\" \\\n  \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcatalog-sections?filter[iblockId]=14\"\n```\n\n### GET \u002Fv1\u002Fcatalog-sections\u002F:id\n\nПолучает раздел по ID.\n\n```bash\ncurl -H \"X-Api-Key: $VIBE_KEY\" \\\n  https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcatalog-sections\u002F42\n```\n\n### PATCH \u002Fv1\u002Fcatalog-sections\u002F:id\n\nОбновляет раздел каталога.\n\n```bash\ncurl -X PATCH https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcatalog-sections\u002F42 \\\n  -H \"X-Api-Key: $VIBE_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"fields\": {\n      \"name\": \"Электроника и гаджеты\",\n      \"sort\": 50\n    }\n  }'\n```\n\n### DELETE \u002Fv1\u002Fcatalog-sections\u002F:id\n\nУдаляет раздел каталога.\n\n```bash\ncurl -X DELETE -H \"X-Api-Key: $VIBE_KEY\" \\\n  https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcatalog-sections\u002F42\n```\n\n## Цены\n\nEntity: `catalog-prices` — ценовые предложения для товаров.\n\n### POST \u002Fv1\u002Fcatalog-prices\n\nСоздаёт новое ценовое предложение для товара.\n\n**Параметры тела запроса (в `fields`):**\n\n| Параметр | Тип | Обязательный | Описание |\n|----------|-----|:---:|---------|\n| `catalogGroupId` | number | да | ID типа цены |\n| `productId` | number | да | ID товара |\n| `price` | number | да | Цена |\n| `currency` | string | да | Валюта (`RUB`, `USD`, `EUR`) |\n| `quantityFrom` | number | нет | Количество «от» для оптовой цены |\n| `quantityTo` | number | нет | Количество «до» |\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcatalog-prices \\\n  -H \"X-Api-Key: $VIBE_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"fields\": {\n      \"catalogGroupId\": 1,\n      \"productId\": 200,\n      \"price\": 49990,\n      \"currency\": \"RUB\"\n    }\n  }'\n```\n\n**JavaScript — оптовые цены:**\n\n```javascript\n\u002F\u002F Розничная цена\nawait fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcatalog-prices', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': VIBE_KEY,\n    'Content-Type': 'application\u002Fjson'\n  },\n  body: JSON.stringify({\n    fields: {\n      catalogGroupId: 1,  \u002F\u002F розничная\n      productId: 200,\n      price: 49990,\n      currency: 'RUB'\n    }\n  })\n})\n\n\u002F\u002F Оптовая цена (от 10 штук)\nawait fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcatalog-prices', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': VIBE_KEY,\n    'Content-Type': 'application\u002Fjson'\n  },\n  body: JSON.stringify({\n    fields: {\n      catalogGroupId: 2,  \u002F\u002F оптовая\n      productId: 200,\n      price: 39990,\n      currency: 'RUB',\n      quantityFrom: 10\n    }\n  })\n})\n```\n\n### GET \u002Fv1\u002Fcatalog-prices\n\nСписок цен с фильтрацией по товару.\n\n```bash\ncurl -H \"X-Api-Key: $VIBE_KEY\" \\\n  \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcatalog-prices?filter[productId]=200\"\n```\n\n### GET \u002Fv1\u002Fcatalog-prices\u002F:id\n\nПолучает цену по ID.\n\n```bash\ncurl -H \"X-Api-Key: $VIBE_KEY\" \\\n  https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcatalog-prices\u002F15\n```\n\n### PATCH \u002Fv1\u002Fcatalog-prices\u002F:id\n\nОбновляет цену.\n\n```bash\ncurl -X PATCH https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcatalog-prices\u002F15 \\\n  -H \"X-Api-Key: $VIBE_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"fields\": { \"price\": 44990 }\n  }'\n```\n\n### DELETE \u002Fv1\u002Fcatalog-prices\u002F:id\n\nУдаляет ценовое предложение.\n\n```bash\ncurl -X DELETE -H \"X-Api-Key: $VIBE_KEY\" \\\n  https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcatalog-prices\u002F15\n```\n\n## Склады\n\nСклады и складские остатки вынесены в отдельный раздел — **[Склады](\u002Fdocs\u002Fentities\u002Fwarehouses)** — с отдельной страницей на каждую операцию и проверенными примерами.\n\n## Полный пример: Синхронизация каталога из 1С\n\n```javascript\nconst VIBE_KEY = process.env.VIBE_KEY\nconst BASE = 'https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1'\n\nasync function api(method, path, body = null) {\n  const opts = {\n    method,\n    headers: { 'X-Api-Key': VIBE_KEY }\n  }\n  if (body) {\n    opts.headers['Content-Type'] = 'application\u002Fjson'\n    opts.body = JSON.stringify(body)\n  }\n  const res = await fetch(`${BASE}${path}`, opts)\n  return res.json()\n}\n\n\u002F\u002F Данные из 1С\nconst categories = [\n  { name: 'Электроника', xmlId: '1c_cat_001', children: [\n    { name: 'Смартфоны', xmlId: '1c_cat_002' },\n    { name: 'Ноутбуки', xmlId: '1c_cat_003' }\n  ]},\n  { name: 'Аксессуары', xmlId: '1c_cat_010' }\n]\n\nconst IBLOCK_ID = 14\n\n\u002F\u002F 1. Создаём корневые разделы\nfor (const cat of categories) {\n  const { data } = await api('POST', '\u002Fcatalog-sections', {\n    fields: {\n      iblockId: IBLOCK_ID,\n      name: cat.name,\n      xmlId: cat.xmlId\n    }\n  })\n  const parentId = data.section.id\n  console.log(`Раздел \"${cat.name}\" создан, ID: ${parentId}`)\n\n  \u002F\u002F 2. Создаём дочерние разделы\n  if (cat.children) {\n    for (const child of cat.children) {\n      const { data: childData } = await api('POST', '\u002Fcatalog-sections', {\n        fields: {\n          iblockId: IBLOCK_ID,\n          name: child.name,\n          xmlId: child.xmlId,\n          iblockSectionId: parentId\n        }\n      })\n      console.log(`  Подраздел \"${child.name}\" создан, ID: ${childData.section.id}`)\n    }\n  }\n}\n\n\u002F\u002F 3. Устанавливаем цены на товары\nconst products = [\n  { id: 200, retail: 49990, wholesale: 39990 },\n  { id: 201, retail: 79990, wholesale: 64990 }\n]\n\nfor (const product of products) {\n  \u002F\u002F Розничная цена\n  await api('POST', '\u002Fcatalog-prices', {\n    fields: {\n      catalogGroupId: 1,\n      productId: product.id,\n      price: product.retail,\n      currency: 'RUB'\n    }\n  })\n\n  \u002F\u002F Оптовая цена\n  await api('POST', '\u002Fcatalog-prices', {\n    fields: {\n      catalogGroupId: 2,\n      productId: product.id,\n      price: product.wholesale,\n      currency: 'RUB',\n      quantityFrom: 10\n    }\n  })\n\n  console.log(`Цены для товара ${product.id}: розн. ${product.retail}, опт. ${product.wholesale}`)\n}\n\nconsole.log('Синхронизация завершена')\n```\n\n## Справочник эндпоинтов\n\n| Метод | Путь | Bitrix24 метод | Описание |\n|-------|------|---------------|---------|\n| POST | \u002Fv1\u002Fcatalog-sections | catalog.section.add | Создать раздел |\n| GET | \u002Fv1\u002Fcatalog-sections | catalog.section.list | Список разделов |\n| GET | \u002Fv1\u002Fcatalog-sections\u002F:id | catalog.section.get | Получить раздел |\n| PATCH | \u002Fv1\u002Fcatalog-sections\u002F:id | catalog.section.update | Обновить раздел |\n| DELETE | \u002Fv1\u002Fcatalog-sections\u002F:id | catalog.section.delete | Удалить раздел |\n| POST | \u002Fv1\u002Fcatalog-prices | catalog.price.add | Создать цену |\n| GET | \u002Fv1\u002Fcatalog-prices | catalog.price.list | Список цен |\n| GET | \u002Fv1\u002Fcatalog-prices\u002F:id | catalog.price.get | Получить цену |\n| PATCH | \u002Fv1\u002Fcatalog-prices\u002F:id | catalog.price.update | Обновить цену |\n| DELETE | \u002Fv1\u002Fcatalog-prices\u002F:id | catalog.price.delete | Удалить цену |\n\n## Коды ошибок\n\n| Код | HTTP | Описание |\n|-----|------|---------|\n| `SCOPE_DENIED` | 403 | API-ключ не имеет скоупа `catalog` |\n| `TOKEN_MISSING` | 401 | Ключ не имеет настроенных токенов |\n| `SECTION_NOT_FOUND` | 404 | Раздел каталога не найден |\n| `PRODUCT_NOT_FOUND` | 404 | Товар не найден |\n| `BITRIX_UNAVAILABLE` | 502 | Битрикс24 недоступен |\n| `BITRIX_ERROR` | 422 | Ошибка Bitrix24 REST API |\n","2026-06-29",{}]