[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-entities\u002Forder-statuses":3,"docs-tabs-entities\u002Forder-statuses":6},{"content":4,"lastmod":5},"# Статусы заказов\n\nУправление статусами заказов и доставки интернет-магазина: создание, получение, обновление, удаление, поиск, агрегация. Статусы — это справочник, на который ссылается поле [`orders.statusId`](.\u002Forders\u002Ffields.md). У каждого статуса есть тип: `O` — статус заказа, `D` — статус доставки.\n\nБитрикс24 API: `sale.status.*`\nСкоуп: `sale`\n\n## Операции\n\n- [Создать статус](.\u002Forder-statuses\u002Fcreate.md) — `POST \u002Fv1\u002Forder-statuses`\n- [Список статусов](.\u002Forder-statuses\u002Flist.md) — `GET \u002Fv1\u002Forder-statuses`\n- [Получить статус](.\u002Forder-statuses\u002Fget.md) — `GET \u002Fv1\u002Forder-statuses\u002F:id`\n- [Обновить статус](.\u002Forder-statuses\u002Fupdate.md) — `PATCH \u002Fv1\u002Forder-statuses\u002F:id`\n- [Удалить статус](.\u002Forder-statuses\u002Fdelete.md) — `DELETE \u002Fv1\u002Forder-statuses\u002F:id`\n- [Поиск статусов](.\u002Forder-statuses\u002Fsearch.md) — `POST \u002Fv1\u002Forder-statuses\u002Fsearch`\n- [Поля статуса](.\u002Forder-statuses\u002Ffields.md) — `GET \u002Fv1\u002Forder-statuses\u002Ffields`\n- [Агрегация статусов](.\u002Forder-statuses\u002Faggregate.md) — `POST \u002Fv1\u002Forder-statuses\u002Faggregate`\n\n## Ключевые поля\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `id` | string | Символьный код статуса (1-2 символа: `N`, `IP`, `DT`). **Задаётся пользователем при создании**, не генерируется автоматически |\n| `type` | string | Тип статуса: `O` — статус заказа, `D` — статус доставки |\n| `sort` | number \\| null | Порядок сортировки в списках. При создании без `sort` поле остаётся `null` — значение по умолчанию не подставляется |\n| `notify` | boolean | Отправлять ли уведомление клиенту при переходе заказа в этот статус. При создании без `notify` поле остаётся `false` — значение по умолчанию не подставляется |\n| `color` | string \\| null | HEX-код цвета для отображения, например `#FFA500`, либо `null`. При создании без `color` поле остаётся `null` — значение по умолчанию не подставляется |\n| `xmlId` | string \\| null | Внешний идентификатор. При создании без явного значения генерируется автоматически вида `bx_\u003Chash>`. У части системных статусов — `null` |\n\nПолный список полей — [`GET \u002Fv1\u002Forder-statuses\u002Ffields`](.\u002Forder-statuses\u002Ffields.md).\n\nОтдельного поля с локализованным названием статуса через этот API нет — для идентификации служат символьный код `id` и тип `type`.\n\n## Что нужно знать перед работой\n\n1. **`id` задаётся пользователем.** При создании передавайте короткий символьный код (1-2 символа): например, `N` («новый»), `IP` («в работе»), `DT` («доставлен»). Идентификатор должен быть уникальным независимо от типа — нельзя создать два статуса с одинаковым `id`, даже если один из них для заказа, а второй для доставки.\n2. **Тело запроса плоское.** При создании и обновлении передавайте поля прямо в корне JSON: `{\"id\": \"DT\", \"type\": \"O\", ...}`. Обёртка `fields` не нужна.\n3. **Набор статусов по умолчанию.** На новом портале есть стандартные статусы: `N` («Принят, ожидается оплата»), `P` («Оплачен»), `F` («Выполнен»), `D` («Отказ»), `DN` («Доставляется») и другие. Их можно изменять и удалять тем же API, но заказы со ссылками на старый `id` после удаления статуса не находятся в выборках по `statusId`.\n\n## Связанные сущности\n\n| Сущность | Эндпоинт | Назначение |\n|----------|----------|-----------|\n| Заказы | [`GET \u002Fv1\u002Forders?filter[statusId]=:id`](.\u002Forders\u002Flist.md) | Заказы, находящиеся в этом статусе — поле `orders.statusId` ссылается сюда. |\n\n## Типичный сценарий\n\nСоздание нового статуса заказа и его использование:\n\n1. Получить существующие статусы: [`GET \u002Fv1\u002Forder-statuses?filter[type]=O`](.\u002Forder-statuses\u002Flist.md) — убедиться, что новый код `id` не занят.\n2. Создать статус: [`POST \u002Fv1\u002Forder-statuses`](.\u002Forder-statuses\u002Fcreate.md) с `id`, `type: \"O\"`, `sort`, `notify`, `color`.\n3. Использовать в заказах: [`PATCH \u002Fv1\u002Forders\u002F:id`](.\u002Forders\u002Fupdate.md) с `statusId: \"новый_id\"`.\n\n## Лимиты\n\n| Лимит | Значение |\n|-------|----------|\n| Максимум записей на запрос | 5000 (`limit ≤ 5000`) |\n| Автоматическая пагинация | включается при `limit > 50` |\n| Длина `id` | максимум 2 символа (символьный код статуса) |\n| Batch-запросы | до 50 операций в [`POST \u002Fv1\u002Fbatch`](\u002Fdocs\u002Fbatch) |\n| Частота запросов | общая для API Вайбкод — см. [Лимиты и оптимизация](\u002Fdocs\u002Foptimization) |\n\n## Смотрите также\n\n- [Заказы](.\u002Forders.md)\n- [Entity API](\u002Fdocs\u002Fentity-api)\n- [Синтаксис фильтрации](\u002Fdocs\u002Ffiltering)\n- [Batch](\u002Fdocs\u002Fbatch)\n- [Справочник сущностей](\u002Fdocs\u002Fentities-index)\n","2026-06-29",{"order-statuses\u002Fcreate.md":7,"order-statuses\u002Flist.md":8,"order-statuses\u002Fget.md":9,"order-statuses\u002Fupdate.md":10,"order-statuses\u002Fdelete.md":11,"order-statuses\u002Fsearch.md":12,"order-statuses\u002Ffields.md":13,"order-statuses\u002Faggregate.md":14},"\n## Создать статус заказа\n\n`POST \u002Fv1\u002Forder-statuses`\n\nСоздаёт новый статус для заказа или доставки. Символьный код `id` задаёт пользователь — он используется как ссылка в [`orders.statusId`](..\u002Forders\u002Ffields.md).\n\n## Поля запроса (тело)\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `id` | string | да | Символьный код статуса (1-2 символа). Например: `N`, `IP`, `DT`. Должен быть уникальным независимо от типа |\n| `type` | string | да | Тип статуса: `O` — статус заказа, `D` — статус доставки |\n| `sort` | number | нет | Порядок сортировки в списках. Если не передан, сохраняется как `null` |\n| `notify` | boolean | нет | Отправлять ли уведомление клиенту при переходе в этот статус. Если не передан, сохраняется как `false` |\n| `color` | string | нет | HEX-код цвета для отображения, например `#FFA500`. Если не передан, сохраняется как `null` |\n| `xmlId` | string | нет | Внешний идентификатор. Если не передан, генерируется автоматически вида `bx_\u003Chash>` |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Forder-statuses\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"id\": \"ZZ\",\n    \"type\": \"O\"\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Forder-statuses\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"id\": \"ZZ\",\n    \"type\": \"O\"\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Forder-statuses', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    id: 'ZZ',\n    type: 'O',\n  }),\n})\n\nconst { success, data } = await res.json()\nconsole.log('Статус создан:', data.id)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Forder-statuses', {\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    id: 'ZZ',\n    type: 'O',\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\nВозвращается полный объект созданного статуса. Переданные поля сохраняются как есть, опущенные необязательные поля остаются `null` или `false`.\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `id` | string | Символьный код, переданный в запросе |\n| `type` | string | Тип статуса |\n| `sort` | number \\| null | Порядок сортировки. `null`, если не передан |\n| `notify` | boolean | Уведомление клиента. `false`, если не передан |\n| `color` | string \\| null | HEX-код цвета. `null`, если не передан |\n| `xmlId` | string \\| null | Внешний идентификатор. Сгенерирован автоматически, если не передан |\n\n## Пример ответа\n\nМинимальное создание — переданы только `id` и `type`:\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"ZZ\",\n    \"type\": \"O\",\n    \"sort\": null,\n    \"color\": null,\n    \"notify\": false,\n    \"xmlId\": \"bx_6a3e47867ed3b\"\n  }\n}\n```\n\nНеобязательные поля `sort`, `color` и `notify` без значения остаются `null` и `false` — значения по умолчанию не подставляются. Поле `xmlId` сгенерировано автоматически. Передайте эти поля в теле запроса, чтобы задать их.\n\n## Пример ответа при ошибке\n\n422 — не переданы обязательные поля:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BITRIX_ERROR\",\n    \"message\": \"Required fields: id, type\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | `error.code` | Маркер в `error.message` | Описание |\n|------|--------------|--------------------------|---------|\n| 422 | `BITRIX_ERROR` | `Required fields: id, type` | Не переданы обязательные поля `id` или `type` |\n| 400 | `BITRIX_ERROR` | `Duplicate entry` | Статус с таким `id` уже существует — `id` должен быть уникальным независимо от типа |\n| 400 | `BITRIX_ERROR` | — | Длина `id` превышает 2 символа |\n| 400 | `BITRIX_ERROR` | — | Передано пустое значение `id` |\n| 403 | `SCOPE_DENIED` | — | API-ключ не имеет скоупа `sale` |\n| 401 | `TOKEN_MISSING` | — | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Уникальность `id` глобальная.** Создать статус заказа и статус доставки с одинаковым `id` нельзя — код уникален независимо от типа. Перед созданием проверьте, что код не занят, через [`GET \u002Fv1\u002Forder-statuses`](.\u002Flist.md).\n\n## Смотрите также\n\n- [Список статусов](.\u002Flist.md)\n- [Получить статус](.\u002Fget.md)\n- [Обновить статус](.\u002Fupdate.md)\n- [Поля статуса](.\u002Ffields.md)\n- [Обновить заказ](..\u002Forders\u002Fupdate.md)\n- [Batch](\u002Fdocs\u002Fbatch)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n","\n## Список статусов заказов\n\n`GET \u002Fv1\u002Forder-statuses`\n\nВозвращает список статусов заказов и доставки с поддержкой фильтрации.\n\n## Параметры\n\n| Параметр | Тип | По умолч. | Описание |\n|----------|-----|-----------|---------|\n| `limit` | number | `50` | Количество записей (до 5000) |\n| `select` | string | — | Выборка полей: `?select=id,type,sort,color` |\n| `order` | object | — | Сортировка: `?order[sort]=asc` |\n| `filter` | object | — | Фильтрация по полям статуса.\u003Cbr>[Синтаксис фильтрации](\u002Fdocs\u002Ffiltering). Пример: `?filter[type]=O` |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Forder-statuses?limit=3&order[sort]=asc\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Forder-statuses?limit=3&order[sort]=asc\" \\\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\u002Forder-statuses?limit=3&order[sort]=asc', {\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\u002Forder-statuses?limit=3&order[sort]=asc', {\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` | string | Символьный код статуса |\n| `data[].type` | string | Тип статуса: `O` — заказа, `D` — доставки |\n| `data[].sort` | number \\| null | Порядок сортировки |\n| `data[].notify` | boolean | Отправлять ли уведомление клиенту |\n| `data[].color` | string \\| null | HEX-код цвета или `null` |\n| `data[].xmlId` | string \\| null | Внешний идентификатор или `null` |\n| `meta.total` | number | Общее количество записей, соответствующих фильтру |\n| `meta.hasMore` | boolean | Есть ли ещё записи за пределами `limit` |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": [\n    { \"id\": \"D\", \"type\": \"O\", \"sort\": 140, \"notify\": true, \"color\": \"#FFBEBD\", \"xmlId\": null },\n    { \"id\": \"DF\", \"type\": \"D\", \"sort\": 400, \"notify\": true, \"color\": null, \"xmlId\": null },\n    { \"id\": \"DD\", \"type\": \"D\", \"sort\": 500, \"notify\": true, \"color\": null, \"xmlId\": null }\n  ],\n  \"meta\": {\n    \"total\": 9,\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 'sale' scope\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `UNKNOWN_FILTER_FIELD` | Фильтр по полю, которого нет в схеме статуса |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `sale` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Разделение по типу.** По умолчанию ответ включает статусы обоих типов — заказа и доставки. Чтобы получить только статусы заказа, добавьте `filter[type]=O`. Для доставки — `filter[type]=D`.\n\n## Смотрите также\n\n- [Поиск статусов](.\u002Fsearch.md)\n- [Получить статус](.\u002Fget.md)\n- [Создать статус](.\u002Fcreate.md)\n- [Поля статуса](.\u002Ffields.md)\n- [Заказы в этом статусе](..\u002Forders\u002Flist.md)\n- [Синтаксис фильтрации](\u002Fdocs\u002Ffiltering)\n- [Entity API](\u002Fdocs\u002Fentity-api)\n- [Batch](\u002Fdocs\u002Fbatch)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n","\n## Получить статус заказа\n\n`GET \u002Fv1\u002Forder-statuses\u002F:id`\n\nВозвращает один статус заказа или доставки по символьному коду.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `id` (path) | string | да | Символьный код статуса (например, `N`, `IP`, `DT`) |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Forder-statuses\u002FD\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Forder-statuses\u002FD\" \\\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\u002Forder-statuses\u002FD', {\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\n})\n\nconst { success, data } = await res.json()\nconsole.log('Статус:', data.id, '— тип:', data.type)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Forder-statuses\u002FD', {\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| `id` | string | Символьный код статуса |\n| `type` | string | Тип статуса: `O` — заказа, `D` — доставки |\n| `sort` | number \\| null | Порядок сортировки |\n| `notify` | boolean | Отправлять ли уведомление клиенту |\n| `color` | string \\| null | HEX-код цвета или `null` |\n| `xmlId` | string \\| null | Внешний идентификатор или `null` |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"D\",\n    \"type\": \"O\",\n    \"sort\": 140,\n    \"notify\": true,\n    \"color\": \"#FFBEBD\",\n    \"xmlId\": null\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n422 — статус не найден:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BITRIX_ERROR\",\n    \"message\": \"status is not exists\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 422 | `BITRIX_ERROR` | Статус с таким `id` не найден |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `sale` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Смотрите также\n\n- [Обновить статус](.\u002Fupdate.md)\n- [Удалить статус](.\u002Fdelete.md)\n- [Список статусов](.\u002Flist.md)\n- [Поля статуса](.\u002Ffields.md)\n- [Заказы в этом статусе](..\u002Forders\u002Flist.md)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n","\n## Обновить статус заказа\n\n`PATCH \u002Fv1\u002Forder-statuses\u002F:id`\n\nОбновляет параметры существующего статуса. Передавайте только изменяемые поля плоско в корне JSON — без обёртки `fields`.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `id` (path) | string | да | Символьный код статуса |\n\n## Поля для обновления (тело)\n\n| Параметр | Тип | Описание |\n|----------|-----|---------|\n| `sort` | number | Порядок сортировки |\n| `notify` | boolean | Отправлять ли уведомление клиенту |\n| `color` | string | HEX-код цвета (`#FFA500`) |\n| `xmlId` | string | Внешний идентификатор |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X PATCH \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Forder-statuses\u002FT\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"sort\": 35,\n    \"color\": \"#2ECC71\"\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X PATCH \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Forder-statuses\u002FT\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"sort\": 35,\n    \"color\": \"#2ECC71\"\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Forder-statuses\u002FT', {\n  method: 'PATCH',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    sort: 35,\n    color: '#2ECC71',\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\u002Forder-statuses\u002FT', {\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    sort: 35,\n    color: '#2ECC71',\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `data` | object | Обновлённый объект статуса со всеми полями |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"T\",\n    \"type\": \"O\",\n    \"sort\": 35,\n    \"notify\": true,\n    \"color\": \"#2ECC71\",\n    \"xmlId\": null\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n422 — статус не найден:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BITRIX_ERROR\",\n    \"message\": \"status is not exists\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 422 | `BITRIX_ERROR` | Статус с таким `id` не найден |\n| 400 | `BITRIX_ERROR` | Некорректное значение поля |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `sale` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Поле `type` подтягивается автоматически.** Вайбкод перед обновлением статуса получает текущее значение `type` через `GET \u002Fv1\u002Forder-statuses\u002F:id` и автоматически добавляет его в запрос, если оно не передано. Это позволяет обновлять одно поле через `PATCH`, не указывая тип каждый раз.\n\n**Поле `id` не редактируется.** Изменить символьный код статуса нельзя — `PATCH` принимает остальные поля, но не сам `id`. Чтобы переименовать статус, удалите старый и создайте новый с нужным `id`. Внимание: заказы со ссылкой на старый `id` останутся с этой ссылкой и продолжат работать.\n\n## Смотрите также\n\n- [Получить статус](.\u002Fget.md)\n- [Список статусов](.\u002Flist.md)\n- [Удалить статус](.\u002Fdelete.md)\n- [Поля статуса](.\u002Ffields.md)\n- [Batch](\u002Fdocs\u002Fbatch)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n","\n## Удалить статус заказа\n\n`DELETE \u002Fv1\u002Forder-statuses\u002F:id`\n\nУдаляет статус заказа или доставки по символьному коду. Восстановить удалённый статус через API нельзя — создавайте новый при необходимости.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `id` (path) | string | да | Символьный код статуса |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X DELETE \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Forder-statuses\u002FDT\" \\\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\u002Forder-statuses\u002FDT\" \\\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\u002Forder-statuses\u002FDT', {\n  method: 'DELETE',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\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\u002Forder-statuses\u002FDT', {\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```http\nHTTP\u002F1.1 204 No Content\n```\n\n## Пример ответа при ошибке\n\n422 — статус не найден:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BITRIX_ERROR\",\n    \"message\": \"status is not exists\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 422 | `BITRIX_ERROR` | Статус с таким `id` не найден или уже удалён |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `sale` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Заказы со ссылкой на удалённый статус продолжают работать.** При удалении статуса заказы с этим `statusId` не меняются — поле `orders.statusId` сохраняет старое значение. В интерфейсе портала такой заказ будет показан с пустым названием статуса. Для миграции — перед удалением статуса выполните [`PATCH \u002Fv1\u002Forders\u002F:id`](..\u002Forders\u002Fupdate.md) для всех затронутых заказов.\n\n**Стандартные статусы удаляются тем же запросом.** Статусы по умолчанию (`N`, `P`, `F`, `D` и другие) для Битрикс24 не системные — удалить их можно тем же `DELETE \u002Fv1\u002Forder-statuses\u002F:id`, что и пользовательские. Перед удалением убедитесь, что они не используются в существующих заказах.\n\n## Смотрите также\n\n- [Список статусов](.\u002Flist.md)\n- [Получить статус](.\u002Fget.md)\n- [Список заказов в статусе](..\u002Forders\u002Flist.md)\n- [Обновить заказ](..\u002Forders\u002Fupdate.md)\n- [Batch](\u002Fdocs\u002Fbatch)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n","\n## Поиск статусов заказов\n\n`POST \u002Fv1\u002Forder-statuses\u002Fsearch`\n\nПоиск статусов с фильтрацией. Аналогичен [`GET \u002Fv1\u002Forder-statuses`](.\u002Flist.md), но условия фильтрации передаются в теле запроса — это позволяет задать несколько условий сразу.\n\n## Поля запроса (тело)\n\n| Параметр | Тип | По умолч. | Описание |\n|----------|-----|-----------|---------|\n| `filter` | object | — | Фильтрация по полям статуса.\u003Cbr>[Синтаксис фильтрации](\u002Fdocs\u002Ffiltering) |\n| `limit` | number | `50` | Количество записей (до 5000) |\n| `select` | string[] | — | Выборка полей: `[\"id\", \"type\", \"sort\", \"color\"]` |\n| `order` | object | — | Сортировка: `{ \"sort\": \"asc\" }` |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Forder-statuses\u002Fsearch\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"filter\": { \"type\": \"O\", \"notify\": true },\n    \"select\": [\"id\", \"type\", \"sort\", \"color\"]\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Forder-statuses\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\": { \"type\": \"O\", \"notify\": true },\n    \"select\": [\"id\", \"type\", \"sort\", \"color\"]\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Forder-statuses\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: { type: 'O', notify: true },\n    select: ['id', 'type', 'sort', 'color'],\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\u002Forder-statuses\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: { type: 'O', notify: true },\n    select: ['id', 'type', 'sort', 'color'],\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## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": [\n    { \"id\": \"T\", \"type\": \"O\", \"sort\": 30, \"color\": \"#ACE9FB\" },\n    { \"id\": \"N\", \"type\": \"O\", \"sort\": 100, \"color\": \"#ACE9FB\" },\n    { \"id\": \"S\", \"type\": \"O\", \"sort\": 110, \"color\": \"#ACE9FB\" },\n    { \"id\": \"P\", \"type\": \"O\", \"sort\": 130, \"color\": \"#ACE9FB\" },\n    { \"id\": \"D\", \"type\": \"O\", \"sort\": 140, \"color\": \"#FFBEBD\" },\n    { \"id\": \"F\", \"type\": \"O\", \"sort\": 200, \"color\": \"#DBF199\" }\n  ],\n  \"meta\": {\n    \"total\": 6,\n    \"hasMore\": false\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n400 — фильтр по несуществующему полю:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"UNKNOWN_FILTER_FIELD\",\n    \"message\": \"Unknown filter field 'foo' for entity 'order-statuses'. Available: id, type, sort, notify, color, xmlId\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `UNKNOWN_FILTER_FIELD` | Фильтр по полю, которого нет в схеме статуса |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `sale` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**`select` ограничивает поля в ответе.** Если передан `select`, в каждом элементе `data[]` будут только перечисленные поля. Без `select` возвращаются все поля статуса.\n\n## Смотрите также\n\n- [Список статусов](.\u002Flist.md)\n- [Получить статус](.\u002Fget.md)\n- [Поля статуса](.\u002Ffields.md)\n- [Заказы в этом статусе](..\u002Forders\u002Flist.md)\n- [Синтаксис фильтрации](\u002Fdocs\u002Ffiltering)\n- [Batch](\u002Fdocs\u002Fbatch)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n","\n## Поля статуса заказа\n\n`GET \u002Fv1\u002Forder-statuses\u002Ffields`\n\nВозвращает статическую карту полей статуса: тип каждого поля, флаг только-для-чтения, список агрегируемых полей и доступные batch-операции. Динамически загружаемого описания или отображаемого названия полей здесь нет — это фиксированная схема типов.\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Forder-statuses\u002Ffields\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Forder-statuses\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\u002Forder-statuses\u002Ffields', {\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\n})\n\nconst { data } = await res.json()\nconsole.log('Поля статуса:', Object.keys(data.fields))\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Forder-statuses\u002Ffields', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `id` | string | Символьный код статуса. Задаётся пользователем при создании |\n| `type` | string | Тип статуса: `O` — заказа, `D` — доставки |\n| `sort` | number \\| null | Порядок сортировки. В выборках бывает `null` |\n| `notify` | boolean | Отправлять ли уведомление клиенту |\n| `color` | string \\| null | HEX-код цвета. В выборках бывает `null` |\n| `xmlId` | string \\| null | Внешний идентификатор. В выборках бывает `null` |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"fields\": {\n      \"id\": { \"type\": \"string\", \"readonly\": false },\n      \"type\": { \"type\": \"string\", \"readonly\": false },\n      \"sort\": { \"type\": \"number\", \"readonly\": false },\n      \"notify\": { \"type\": \"boolean\", \"readonly\": false },\n      \"color\": { \"type\": \"string\", \"readonly\": false },\n      \"xmlId\": { \"type\": \"string\", \"readonly\": false }\n    },\n    \"aggregatable\": [\"type\", \"notify\"],\n    \"batch\": [\"create\", \"update\", \"delete\"]\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 'sale' scope\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `sale` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Смотрите также\n\n- [Список статусов](.\u002Flist.md)\n- [Создать статус](.\u002Fcreate.md)\n- [Агрегация статусов](.\u002Faggregate.md)\n- [Статусы заказов](..\u002Forder-statuses.md)\n- [Entity API](\u002Fdocs\u002Fentity-api)\n","\n## Агрегация статусов заказов\n\n`POST \u002Fv1\u002Forder-statuses\u002Faggregate`\n\nПодсчёт количества статусов с группировкой по `type` или `notify`. У сущности нет числовых полей, поэтому числовые функции (`sum`, `avg`) не применяются — основной сценарий — `count` с фильтром или группировкой.\n\n## Стандартные поля\n\nВсе поля статуса категориальные — подходят только для `groupBy` и `filter`:\n\n| Поле | Назначение |\n|------|------------|\n| `type` | Группировка по типу: `O` (заказа) или `D` (доставки) |\n| `notify` | Группировка по тому, отправляется ли уведомление |\n\nПолный список агрегируемых полей перечислен в таблице выше.\n\n## Поля запроса (тело)\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `aggregate` | array | нет | Массив агрегаций. Для статусов основной вариант — `count` (без других функций, числовых полей нет). Формат подсчёта — `{ \"field\": \"*\", \"function\": \"count\" }`. Без параметра — `count` записей с учётом фильтра |\n| `filter` | object | нет | Фильтрация — те же поля, что в [`GET \u002Fv1\u002Forder-statuses`](.\u002Flist.md). [Синтаксис фильтрации](\u002Fdocs\u002Ffiltering) |\n| `groupBy` | string \\| string[] | нет | Поле или массив полей для группировки (максимум 5) |\n| `groupOrderBy` | array | нет | Сортировка групп: `[{ \"field\": \"count\", \"direction\": \"desc\" }]` |\n| `groupLimit` | number | нет | Ограничение количества возвращаемых групп (1-1000) |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Forder-statuses\u002Faggregate\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"groupBy\": \"type\"\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Forder-statuses\u002Faggregate\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"groupBy\": \"type\"\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Forder-statuses\u002Faggregate', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    groupBy: 'type',\n  }),\n})\n\nconst { success, data } = await res.json()\nconsole.log('Распределение статусов:', data.groups)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Forder-statuses\u002Faggregate', {\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    groupBy: 'type',\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n## Другие сценарии\n\nПодсчёт записей — `count` с полем `\"*\"`, самый быстрый запрос без выгрузки записей. Без массива `aggregate` результат тот же:\n\n```json\n{ \"aggregate\": [{ \"field\": \"*\", \"function\": \"count\" }] }\n```\n\nСколько статусов с включённым уведомлением:\n\n```json\n{\n  \"filter\": { \"notify\": true }\n}\n```\n\nГруппировка по обоим осям сразу:\n\n```json\n{\n  \"groupBy\": [\"type\", \"notify\"]\n}\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data.count` | number | Общее количество статусов, соответствующих фильтру |\n| `data.aggregates` | object | Результаты агрегаций — для статусов остаётся пустым (нет числовых полей в `aggregatable`) |\n| `data.groups` | array | Группы (только при `groupBy`) |\n| `data.meta.totalRecords` | number | Общее количество записей |\n| `data.meta.recordsProcessed` | number | Количество обработанных записей |\n| `data.meta.truncated` | boolean | `true`, если записей больше 5000 |\n| `data.meta.groupTotal` | number | Количество групп до `groupLimit` |\n| `data.meta.groupsTruncated` | boolean | Был ли список групп обрезан `groupLimit` |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"count\": 9,\n    \"aggregates\": {},\n    \"groups\": [\n      { \"type\": \"O\", \"count\": 6, \"aggregates\": {} },\n      { \"type\": \"D\", \"count\": 3, \"aggregates\": {} }\n    ],\n    \"meta\": {\n      \"totalRecords\": 9,\n      \"recordsProcessed\": 9,\n      \"truncated\": false,\n      \"groupTotal\": 2,\n      \"groupsTruncated\": false\n    }\n  }\n}\n```\n\nБез `groupBy` поле `data.groups` в ответе отсутствует.\n\n## Пример ответа при ошибке\n\n400 — неизвестное поле в `groupBy`:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"INVALID_PARAMS\",\n    \"message\": \"groupBy field 'foo' is not aggregatable on this entity. Available: type, notify.\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_PARAMS` | Неизвестная функция или несуществующее поле — сообщение содержит список допустимых полей |\n| 400 | `INVALID_PARAMS` | Передано больше 5 полей в `groupBy` |\n| 400 | `INVALID_PARAMS` | Зарезервированные ключевые слова в `groupBy`: `count`, `aggregates`, `meta`, `groups` |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `sale` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Только `count` имеет смысл.** Поскольку в схеме статуса нет числовых полей в `aggregatable`, функции `sum` \u002F `avg` \u002F `min` \u002F `max` всегда возвращают пустой `aggregates`. Для подсчёта статусов используйте `count` (без `aggregate`) с фильтром или группировкой.\n\n**Малый объём данных.** На порталах число статусов измеряется десятками, поэтому `meta.truncated` (срабатывает только при > 5000 записей) для этой сущности не активируется.\n\n## Смотрите также\n\n- [Список статусов](.\u002Flist.md)\n- [Поиск статусов](.\u002Fsearch.md)\n- [Поля статуса](.\u002Ffields.md)\n- [Синтаксис фильтрации](\u002Fdocs\u002Ffiltering)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n"]