[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-entities\u002Fcategories":3,"docs-tabs-entities\u002Fcategories":6},{"content":4,"lastmod":5},"# Воронки\n\nУниверсальное управление воронками CRM для любого типа сущности: сделок, смарт-процессов и других. Каждая воронка содержит свой набор стадий. В отличие от [воронок сделок](\u002Fdocs\u002Fentities\u002Fdeal-categories), этот эндпоинт работает для всех типов CRM через единый путь.\n\nБитрикс24 API: `crm.category.*`\nСкоуп: `crm`\n\nПуть содержит динамический параметр `:entityTypeId` — ID типа CRM-сущности. Для сделок это `2`, для счетов — `31`, для смарт-процессов — значение из `GET \u002Fv1\u002Fsmart-processes`. Основная воронка сделок доступна здесь по id `0`.\n\n## Операции\n\n- [Создать воронку](.\u002Fcategories\u002Fcreate.md) — `POST \u002Fv1\u002Fcategories\u002F:entityTypeId`\n- [Список воронок](.\u002Fcategories\u002Flist.md) — `GET \u002Fv1\u002Fcategories\u002F:entityTypeId`\n- [Получить воронку](.\u002Fcategories\u002Fget.md) — `GET \u002Fv1\u002Fcategories\u002F:entityTypeId\u002F:id`\n- [Обновить воронку](.\u002Fcategories\u002Fupdate.md) — `PATCH \u002Fv1\u002Fcategories\u002F:entityTypeId\u002F:id`\n- [Удалить воронку](.\u002Fcategories\u002Fdelete.md) — `DELETE \u002Fv1\u002Fcategories\u002F:entityTypeId\u002F:id`\n- [Поля воронки](.\u002Fcategories\u002Ffields.md) — `GET \u002Fv1\u002Fcategories\u002F:entityTypeId\u002Ffields`\n\n## Ключевые поля\n\n| Поле | Описание |\n|------|---------|\n| `id` | ID воронки. Для сделок основная воронка имеет id `0` |\n| `entityTypeId` | ID типа CRM-сущности, повторяет параметр пути |\n| `name` | Название воронки. Обязательно при создании |\n| `sort` | Порядок сортировки |\n| `isDefault` | Признак основной воронки типа |\n\nПолный список полей — [`GET \u002Fv1\u002Fcategories\u002F:entityTypeId\u002Ffields`](.\u002Fcategories\u002Ffields.md). Стадии воронки берутся отдельно: `GET \u002Fv1\u002Fstatuses?filter[entityId]=DEAL_STAGE_{id}`.\n\n## Что нужно знать перед работой\n\n1. Воронка задаёт свой набор стадий: они запрашиваются отдельно через `GET \u002Fv1\u002Fstatuses`. Сама воронка хранит только название и сортировку.\n2. Для создания достаточно одного поля `name`. Без него ответ — `422` с сообщением `Field 'NAME' is required.`\n3. Поддерживаются сделки `2`, счета `31` и смарт-процессы. Предложения `7` воронок не имеют — запрос вернёт `422` с сообщением о неподдерживаемой сущности. Резервные id `2` и `31` здесь рабочие, в отличие от `\u002Fv1\u002Fitems`.\n4. **Поля `code` и `isDefault` — только чтение.** Передача любого из них в теле при создании или обновлении возвращает `400` с кодом `READONLY_FIELD`, сообщение называет конкретное поле. Записываются `name` и `sort`. Основная воронка типа назначается в интерфейсе Битрикс24.\n5. `GET \u002Fv1\u002Fcategories\u002F:entityTypeId` возвращает полный список воронок типа без фильтрации: параметры `filter`, `select` и `order` принимаются без ошибки, но игнорируются.\n\n## Типичный сценарий\n\n1. Определить тип CRM-сущности: для сделок `entityTypeId` равен `2`, для смарт-процесса — значение из [`GET \u002Fv1\u002Fsmart-processes`](\u002Fdocs\u002Fentities\u002Fsmart-processes\u002Flist).\n2. Посмотреть существующие воронки типа: [`GET \u002Fv1\u002Fcategories\u002F2`](.\u002Fcategories\u002Flist.md).\n3. Создать новую или обновить существующую: [`POST \u002Fv1\u002Fcategories\u002F2`](.\u002Fcategories\u002Fcreate.md) \u002F [`PATCH \u002Fv1\u002Fcategories\u002F2\u002F:id`](.\u002Fcategories\u002Fupdate.md).\n4. Запросить стадии нужной воронки: `GET \u002Fv1\u002Fstatuses?filter[entityId]=DEAL_STAGE_{id}`.\n\n## Лимиты\n\n| Лимит | Значение |\n|-------|----------|\n| Фильтрация и пагинация | не поддерживаются — список типа возвращается целиком |\n| Batch-запросы | до 50 операций в [`POST \u002Fv1\u002Fbatch`](\u002Fdocs\u002Fbatch) |\n| Rate limit | общий для Vibe API — см. [Лимиты и оптимизация](\u002Fdocs\u002Foptimization) |\n\n## Смотрите также\n\n- [Воронки сделок](\u002Fdocs\u002Fentities\u002Fdeal-categories)\n- [Стадии и статусы](\u002Fdocs\u002Fentities\u002Fstatuses)\n- [Типы смарт-процессов](\u002Fdocs\u002Fentities\u002Fsmart-processes)\n- [Справочник сущностей](\u002Fdocs\u002Fentities-index)\n","2026-07-14",{"categories\u002Fcreate.md":7,"categories\u002Flist.md":8,"categories\u002Fget.md":9,"categories\u002Fupdate.md":10,"categories\u002Fdelete.md":11,"categories\u002Ffields.md":12},"\n## Создать воронку\n\n`POST \u002Fv1\u002Fcategories\u002F:entityTypeId`\n\nСоздаёт новую воронку для указанного типа CRM-сущности. Поля передаются плоско в корне JSON — без обёртки `fields`.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `entityTypeId` (path) | number | да | ID типа CRM-сущности. Для сделок `2`, для счетов `31`, для смарт-процесса — значение из [GET \u002Fv1\u002Fsmart-processes](\u002Fdocs\u002Fentities\u002Fsmart-processes\u002Flist) |\n\n## Поля запроса (body)\n\n| Поле | Битрикс24 | Тип | Обяз. | Описание |\n|------|-----------|-----|:-----:|---------|\n| `name` | `name` | string | да | Название воронки |\n| `sort` | `sort` | number | нет | Порядок сортировки среди воронок типа |\n\n## Примеры\n\nВ примерах `entityTypeId = 2` (сделки) — замените на нужный тип.\n\n### curl — личный ключ\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcategories\u002F2\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"name\": \"Воронка партнёров\",\n    \"sort\": 500\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcategories\u002F2\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"name\": \"Воронка партнёров\",\n    \"sort\": 500\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcategories\u002F2', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    name: 'Воронка партнёров',\n    sort: 500,\n  }),\n})\n\nconst { success, data } = await res.json()\nconsole.log('ID воронки:', data.id)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcategories\u002F2', {\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    name: 'Воронка партнёров',\n    sort: 500,\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\nВозвращается полный объект созданной воронки с присвоенным `id`.\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `id` | number | Идентификатор созданной воронки |\n| `entityTypeId` | number | ID типа CRM-сущности, повторяет параметр пути |\n| `name` | string | Название воронки |\n| `sort` | number | Порядок сортировки |\n| `isDefault` | boolean | Признак основной воронки типа |\n| `originId` | string | Внешний идентификатор источника, пустая строка при отсутствии |\n| `originatorId` | string | Идентификатор внешней системы, пустая строка при отсутствии |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": 15,\n    \"name\": \"Воронка партнёров\",\n    \"sort\": 500,\n    \"entityTypeId\": 2,\n    \"isDefault\": false,\n    \"originId\": \"\",\n    \"originatorId\": \"\"\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n422 — не передано обязательное поле `name`:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BITRIX_ERROR\",\n    \"message\": \"Field 'NAME' is required.\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `READONLY_FIELD` | Передано поле только для чтения — `code` или `isDefault`. Сообщение называет конкретное поле |\n| 422 | `BITRIX_ERROR` | Не передано обязательное поле `name` — сообщение `Field 'NAME' is required.` |\n| 404 | `ENTITY_NOT_FOUND` | `entityTypeId` не соответствует существующему типу — сообщение `Смарт-процесс не найден` |\n| 422 | `BITRIX_ERROR` | Тип сущности не поддерживает воронки, например предложения `7` — сообщение `Сущность CRM Предложение не поддерживается` |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `crm` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Поля `code` и `isDefault` — только чтение.** Передача `code` или `isDefault` в теле запроса возвращает `400 READONLY_FIELD` — уберите эти поля из запроса. Основная воронка типа назначается в интерфейсе Битрикс24.\n\n## Смотрите также\n\n- [Список воронок](\u002Fdocs\u002Fentities\u002Fcategories\u002Flist)\n- [Обновить воронку](\u002Fdocs\u002Fentities\u002Fcategories\u002Fupdate)\n- [Удалить воронку](\u002Fdocs\u002Fentities\u002Fcategories\u002Fdelete)\n- [Типы смарт-процессов](\u002Fdocs\u002Fentities\u002Fsmart-processes)\n- [Batch](\u002Fdocs\u002Fbatch)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n","\n## Список воронок\n\n`GET \u002Fv1\u002Fcategories\u002F:entityTypeId`\n\nВозвращает все воронки указанного типа CRM-сущности. Параметры `filter`, `select` и `order` принимаются без ошибки, но не влияют на результат — в ответ всегда приходит полный набор воронок типа.\n\n## Параметры\n\n| Параметр | Тип | Описание |\n|----------|-----|---------|\n| `entityTypeId` (path) | number | ID типа CRM-сущности. Сделки — `2`, счета — `31`, смарт-процессы — из `GET \u002Fv1\u002Fsmart-processes` |\n\n## Примеры\n\nВ примерах `entityTypeId = 2` (сделки) — замените на нужный тип.\n\n### curl — личный ключ\n\n```bash\ncurl -X GET https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcategories\u002F2 \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X GET https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcategories\u002F2 \\\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\u002Fcategories\u002F2', {\n  headers: { 'X-Api-Key': 'YOUR_API_KEY' },\n})\n\nconst { success, data } = await res.json()\nconsole.log(`Воронок: ${data.length}`)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcategories\u002F2', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data` | array | Массив воронок типа |\n| `data[].id` | number | ID воронки. Для сделок основная воронка имеет id `0` |\n| `data[].name` | string | Название воронки |\n| `data[].sort` | number | Порядок сортировки |\n| `data[].entityTypeId` | number | ID типа CRM-сущности, повторяет параметр пути |\n| `data[].isDefault` | boolean | Признак основной воронки типа |\n| `data[].originId` | string | Внешний идентификатор. Пустая строка у воронок без внешней привязки |\n| `data[].originatorId` | string | Источник внешней привязки. Пустая строка у воронок без неё |\n| `meta.total` | number | Количество воронок в ответе |\n| `meta.hasMore` | boolean | Всегда `false` — список возвращается целиком |\n\nДля основной воронки сделок (id `0`) поля `originId` и `originatorId` в ответе отсутствуют.\n\nСтадии воронки запрашиваются отдельно: `GET \u002Fv1\u002Fstatuses?filter[entityId]=DEAL_STAGE_{id}`.\n\n## Пример ответа\n\nОтвет всегда содержит `meta`. У дополнительных воронок сделок есть `originId` и `originatorId`, у основной воронки (id `0`) их нет:\n\n```json\n{\n  \"success\": true,\n  \"data\": [\n    { \"id\": 1, \"name\": \"Newest\", \"sort\": 100, \"entityTypeId\": 2, \"isDefault\": false, \"originId\": \"\", \"originatorId\": \"\" },\n    { \"id\": 11, \"name\": \"English\", \"sort\": 200, \"entityTypeId\": 2, \"isDefault\": false, \"originId\": \"\", \"originatorId\": \"\" },\n    { \"id\": 0, \"name\": \"Общая\", \"sort\": 300, \"entityTypeId\": 2, \"isDefault\": true }\n  ],\n  \"meta\": { \"total\": 3, \"hasMore\": false }\n}\n```\n\nУ воронок смарт-процесса набор полей короче:\n\n```json\n{\n  \"success\": true,\n  \"data\": [\n    { \"id\": 3, \"name\": \"Общее\", \"sort\": 500, \"entityTypeId\": 174, \"isDefault\": true },\n    { \"id\": 23, \"name\": \"Доп воронка\", \"sort\": 510, \"entityTypeId\": 174, \"isDefault\": false }\n  ],\n  \"meta\": { \"total\": 2, \"hasMore\": false }\n}\n```\n\n## Пример ответа при ошибке\n\n404 — тип не найден:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"ENTITY_NOT_FOUND\",\n    \"message\": \"Смарт-процесс не найден\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 404 | `ENTITY_NOT_FOUND` | `entityTypeId` не соответствует существующему типу CRM |\n| 422 | `BITRIX_ERROR` | Тип CRM не поддерживает воронки. Предложения `7` воронок не имеют |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `crm` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Смотрите также\n\n- [Получить воронку](\u002Fdocs\u002Fentities\u002Fcategories\u002Fget)\n- [Создать воронку](\u002Fdocs\u002Fentities\u002Fcategories\u002Fcreate)\n- [Поля воронки](\u002Fdocs\u002Fentities\u002Fcategories\u002Ffields)\n- [Типы смарт-процессов](\u002Fdocs\u002Fentities\u002Fsmart-processes)\n- [Стадии и статусы](\u002Fdocs\u002Fentities\u002Fstatuses)\n- [Entity API](\u002Fdocs\u002Fentity-api)\n","\n## Получить воронку\n\n`GET \u002Fv1\u002Fcategories\u002F:entityTypeId\u002F:id`\n\nВозвращает одну воронку по ID в рамках указанного типа CRM-сущности.\n\n## Параметры\n\n| Параметр | Тип | Описание |\n|----------|-----|---------|\n| `entityTypeId` (path) | number | ID типа CRM-сущности. Сделки — `2`, счета — `31`, смарт-процессы — из `GET \u002Fv1\u002Fsmart-processes` |\n| `id` (path) | number | ID воронки. Список: `GET \u002Fv1\u002Fcategories\u002F:entityTypeId` |\n\n## Примеры\n\nВ примерах `entityTypeId = 2`, `id = 1` — замените на ваши значения.\n\n### curl — личный ключ\n\n```bash\ncurl -X GET https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcategories\u002F2\u002F1 \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X GET https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcategories\u002F2\u002F1 \\\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\u002Fcategories\u002F2\u002F1', {\n  headers: { 'X-Api-Key': 'YOUR_API_KEY' },\n})\n\nconst { success, data } = await res.json()\nconsole.log('Воронка:', data.name)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcategories\u002F2\u002F1', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data.id` | number | ID воронки. Для сделок основная воронка имеет id `0` |\n| `data.name` | string | Название воронки |\n| `data.sort` | number | Порядок сортировки |\n| `data.entityTypeId` | number | ID типа CRM-сущности, повторяет параметр пути |\n| `data.isDefault` | boolean | Признак основной воронки типа |\n| `data.originId` | string | Внешний идентификатор. Пустая строка у воронок без внешней привязки |\n| `data.originatorId` | string | Источник внешней привязки. Пустая строка у воронок без неё |\n\nДля основной воронки сделок (id `0`) поля `originId` и `originatorId` в ответе отсутствуют.\n\nСтадии воронки запрашиваются отдельно: `GET \u002Fv1\u002Fstatuses?filter[entityId]=DEAL_STAGE_{id}`.\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": 1,\n    \"name\": \"Newest\",\n    \"sort\": 100,\n    \"entityTypeId\": 2,\n    \"isDefault\": false,\n    \"originId\": \"\",\n    \"originatorId\": \"\"\n  }\n}\n```\n\nОсновная воронка сделок (id `0`) приходит без `originId` и `originatorId`:\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": 0,\n    \"name\": \"Общая\",\n    \"sort\": 300,\n    \"entityTypeId\": 2,\n    \"isDefault\": true\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n404 — воронка не найдена:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"ENTITY_NOT_FOUND\",\n    \"message\": \"Элемент не найден\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 404 | `ENTITY_NOT_FOUND` | Воронки с указанным `id` нет в этом типе |\n| 404 | `ENTITY_NOT_FOUND` | `entityTypeId` не соответствует существующему типу CRM |\n| 422 | `BITRIX_ERROR` | Тип CRM не поддерживает воронки. Предложения `7` воронок не имеют |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `crm` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Смотрите также\n\n- [Список воронок](\u002Fdocs\u002Fentities\u002Fcategories\u002Flist)\n- [Обновить воронку](\u002Fdocs\u002Fentities\u002Fcategories\u002Fupdate)\n- [Поля воронки](\u002Fdocs\u002Fentities\u002Fcategories\u002Ffields)\n- [Типы смарт-процессов](\u002Fdocs\u002Fentities\u002Fsmart-processes)\n- [Стадии и статусы](\u002Fdocs\u002Fentities\u002Fstatuses)\n- [Entity API](\u002Fdocs\u002Fentity-api)\n","\n## Обновить воронку\n\n`PATCH \u002Fv1\u002Fcategories\u002F:entityTypeId\u002F:id`\n\nОбновляет поля существующей воронки указанного типа CRM-сущности. Передавайте только изменяемые поля плоско в корне JSON — без обёртки `fields`.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `entityTypeId` (path) | number | да | ID типа CRM-сущности. Для сделок `2`, для счетов `31`, для смарт-процесса — значение из [GET \u002Fv1\u002Fsmart-processes](\u002Fdocs\u002Fentities\u002Fsmart-processes\u002Flist) |\n| `id` (path) | number | да | Идентификатор воронки |\n\n## Поля для обновления (body)\n\n| Поле | Битрикс24 | Тип | Описание |\n|------|-----------|-----|---------|\n| `name` | `name` | string | Название воронки |\n| `sort` | `sort` | number | Порядок сортировки среди воронок типа |\n\n## Примеры\n\nВ примерах `entityTypeId = 2` (сделки), `id = 15` — замените на ваши значения.\n\n### curl — личный ключ\n\n```bash\ncurl -X PATCH \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcategories\u002F2\u002F15\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"name\": \"Воронка партнёров — обновлено\",\n    \"sort\": 700\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X PATCH \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcategories\u002F2\u002F15\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"name\": \"Воронка партнёров — обновлено\",\n    \"sort\": 700\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcategories\u002F2\u002F15', {\n  method: 'PATCH',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    name: 'Воронка партнёров — обновлено',\n    sort: 700,\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcategories\u002F2\u002F15', {\n  method: 'PATCH',\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    name: 'Воронка партнёров — обновлено',\n    sort: 700,\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\nВозвращается полный объект воронки с применёнными изменениями.\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `id` | number | Идентификатор воронки |\n| `entityTypeId` | number | ID типа CRM-сущности, повторяет параметр пути |\n| `name` | string | Название воронки |\n| `sort` | number | Порядок сортировки |\n| `isDefault` | boolean | Признак основной воронки типа |\n| `originId` | string | Внешний идентификатор источника, пустая строка при отсутствии |\n| `originatorId` | string | Идентификатор внешней системы, пустая строка при отсутствии |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": 15,\n    \"name\": \"Воронка партнёров — обновлено\",\n    \"sort\": 700,\n    \"entityTypeId\": 2,\n    \"isDefault\": false,\n    \"originId\": \"\",\n    \"originatorId\": \"\"\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n404 — воронка с указанным `id` не найдена:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"ENTITY_NOT_FOUND\",\n    \"message\": \"Элемент не найден\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `READONLY_FIELD` | Передано поле только для чтения — `code` или `isDefault`. Сообщение называет конкретное поле |\n| 404 | `ENTITY_NOT_FOUND` | Воронка с указанным `id` не найдена — сообщение `Элемент не найден` |\n| 404 | `ENTITY_NOT_FOUND` | `entityTypeId` не соответствует существующему типу — сообщение `Смарт-процесс не найден` |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `crm` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Поля `code` и `isDefault` — только чтение.** Передача `code` или `isDefault` в теле запроса возвращает `400 READONLY_FIELD` — уберите эти поля из запроса. Основная воронка типа назначается в интерфейсе Битрикс24.\n\n## Смотрите также\n\n- [Получить воронку](\u002Fdocs\u002Fentities\u002Fcategories\u002Fget)\n- [Список воронок](\u002Fdocs\u002Fentities\u002Fcategories\u002Flist)\n- [Создать воронку](\u002Fdocs\u002Fentities\u002Fcategories\u002Fcreate)\n- [Удалить воронку](\u002Fdocs\u002Fentities\u002Fcategories\u002Fdelete)\n- [Batch](\u002Fdocs\u002Fbatch)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n","\n## Удалить воронку\n\n`DELETE \u002Fv1\u002Fcategories\u002F:entityTypeId\u002F:id`\n\nУдаляет воронку указанного типа CRM-сущности по идентификатору. Восстановить удалённую воронку через API нельзя — создавайте новую при необходимости.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `entityTypeId` (path) | number | да | ID типа CRM-сущности. Для сделок `2`, для счетов `31`, для смарт-процесса — значение из [GET \u002Fv1\u002Fsmart-processes](\u002Fdocs\u002Fentities\u002Fsmart-processes\u002Flist) |\n| `id` (path) | number | да | Идентификатор воронки |\n\n## Примеры\n\nВ примерах `entityTypeId = 2` (сделки), `id = 15` — замените на ваши значения.\n\n### curl — личный ключ\n\n```bash\ncurl -X DELETE \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcategories\u002F2\u002F15\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X DELETE \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcategories\u002F2\u002F15\" \\\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\u002Fcategories\u002F2\u002F15', {\n  method: 'DELETE',\n  headers: { 'X-Api-Key': 'YOUR_API_KEY' },\n})\n\nif (res.status === 204) {\n  console.log('Воронка удалена')\n}\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcategories\u002F2\u002F15', {\n  method: 'DELETE',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nif (res.status === 204) {\n  console.log('Удалено')\n}\n```\n\n## Ответ\n\nПри успешном удалении возвращается HTTP-статус `204 No Content` с пустым телом — признак успеха проверяется по статусу.\n\n## Пример ответа\n\n```\nHTTP\u002F1.1 204 No Content\n```\n\n## Пример ответа при ошибке\n\n404 — воронка с указанным `id` не найдена:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"ENTITY_NOT_FOUND\",\n    \"message\": \"Элемент не найден\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 404 | `ENTITY_NOT_FOUND` | Воронка с указанным `id` не найдена — сообщение `Элемент не найден` |\n| 404 | `ENTITY_NOT_FOUND` | `entityTypeId` не соответствует существующему типу — сообщение `Смарт-процесс не найден` |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `crm` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Смотрите также\n\n- [Список воронок](\u002Fdocs\u002Fentities\u002Fcategories\u002Flist)\n- [Получить воронку](\u002Fdocs\u002Fentities\u002Fcategories\u002Fget)\n- [Создать воронку](\u002Fdocs\u002Fentities\u002Fcategories\u002Fcreate)\n- [Batch](\u002Fdocs\u002Fbatch)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n","\n## Поля воронки\n\n`GET \u002Fv1\u002Fcategories\u002F:entityTypeId\u002Ffields`\n\nВозвращает схему полей воронки для указанного типа CRM-сущности: имена, типы и признак «только чтение».\n\n## Параметры\n\n| Параметр | Тип | Описание |\n|----------|-----|---------|\n| `entityTypeId` (path) | number | ID типа CRM-сущности. Сделки — `2`, счета — `31`, смарт-процессы — из `GET \u002Fv1\u002Fsmart-processes` |\n\n## Примеры\n\nВ примерах `entityTypeId = 2` (сделки) — замените на нужный тип.\n\n### curl — личный ключ\n\n```bash\ncurl -X GET https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcategories\u002F2\u002Ffields \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X GET https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcategories\u002F2\u002Ffields \\\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\u002Fcategories\u002F2\u002Ffields', {\n  headers: { 'X-Api-Key': 'YOUR_API_KEY' },\n})\n\nconst { success, data } = await res.json()\nconsole.log('Полей:', Object.keys(data.fields).length)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fcategories\u002F2\u002Ffields', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Битрикс24 | Тип | RO | Описание |\n|------|-----------|-----|:---:|---------|\n| `id` | id | number | RO | ID воронки. Для сделок основная воронка имеет id `0` |\n| `entityTypeId` | entityTypeId | number | RO | ID типа CRM-сущности, повторяет параметр пути |\n| `name` | name | string | | Название воронки. Обязательно при создании |\n| `sort` | sort | number | | Порядок сортировки |\n| `isDefault` | isDefault | boolean | RO | Признак основной воронки. Только чтение — запись отклоняется с `400 READONLY_FIELD` |\n| `code` | code | string | RO | Символьный код. Только чтение — запись отклоняется с `400 READONLY_FIELD`. В ответах `list`, `get` и `search` не возвращается |\n| `createdDate` | createdDate | datetime | RO | Дата создания. Не возвращается в ответах `list`, `get` |\n| `originId` | ORIGIN_ID | string | | Внешний идентификатор |\n| `originatorId` | ORIGINATOR_ID | string | | Источник внешней привязки |\n\nПоле `batch` перечисляет операции, доступные через [Batch-запросы](\u002Fdocs\u002Fbatch): `create`, `update`, `delete`.\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"fields\": {\n      \"id\": { \"type\": \"number\", \"readonly\": true },\n      \"entityTypeId\": { \"type\": \"number\", \"readonly\": true },\n      \"name\": { \"type\": \"string\", \"readonly\": false },\n      \"sort\": { \"type\": \"number\", \"readonly\": false },\n      \"isDefault\": { \"type\": \"boolean\", \"readonly\": true },\n      \"code\": { \"type\": \"string\", \"readonly\": true },\n      \"createdDate\": { \"type\": \"datetime\", \"readonly\": true },\n      \"originId\": { \"type\": \"string\", \"readonly\": false, \"label\": \"ORIGIN_ID\" },\n      \"originatorId\": { \"type\": \"string\", \"readonly\": false, \"label\": \"ORIGINATOR_ID\" }\n    },\n    \"batch\": [\"create\", \"update\", \"delete\"]\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n404 — тип не найден:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"ENTITY_NOT_FOUND\",\n    \"message\": \"Смарт-процесс не найден\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 404 | `ENTITY_NOT_FOUND` | `entityTypeId` не соответствует существующему типу CRM |\n| 422 | `BITRIX_ERROR` | Тип CRM не поддерживает воронки. Предложения `7` воронок не имеют |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `crm` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Смотрите также\n\n- [Список воронок](\u002Fdocs\u002Fentities\u002Fcategories\u002Flist)\n- [Создать воронку](\u002Fdocs\u002Fentities\u002Fcategories\u002Fcreate)\n- [Получить воронку](\u002Fdocs\u002Fentities\u002Fcategories\u002Fget)\n- [Типы смарт-процессов](\u002Fdocs\u002Fentities\u002Fsmart-processes)\n- [Entity API](\u002Fdocs\u002Fentity-api)\n"]