[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-entities\u002Fbasket-items\u002Fupdate":3,"docs-tabs-entities\u002Fbasket-items\u002Fupdate":6},{"content":4,"lastmod":5},"\n## Обновить позицию корзины\n\n`PATCH \u002Fv1\u002Fbasket-items\u002F:id`\n\nОбновляет поля существующей позиции корзины. Передавайте только изменяемые поля плоско в корне JSON — без обёртки `fields`.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `id` (path) | number | да | Идентификатор позиции |\n\n## Поля для обновления (тело)\n\n| Параметр | Тип | Описание |\n|----------|-----|---------|\n| `quantity` | number | Количество |\n| `price` | number | Цена за единицу |\n| `basePrice` | number | Базовая цена до скидки |\n| `discountPrice` | number | Размер скидки за единицу |\n| `currency` | string | Валюта |\n| `name` | string | Переопределение названия товара |\n| `vatRate` | number | Ставка НДС в долях единицы |\n| `vatIncluded` | boolean | Включён ли НДС в цену |\n| `customPrice` | boolean | Защита цены от автопересчёта |\n| `weight` | number | Вес в граммах |\n| `measureCode` | number | Код единицы измерения |\n| `xmlId` | string | Внешний идентификатор |\n\nРедактируются все поля позиции, кроме служебных (`id`, `orderId`, `productId`, `productXmlId`, `catalogXmlId`, `dateInsert`, `dateUpdate`). Полный набор доступных полей виден в ответе [`GET \u002Fv1\u002Fbasket-items\u002F:id`](.\u002Fget.md).\n\n> **Частичное обновление.** Передавать `quantity` в каждом запросе не нужно. При отсутствии `quantity` в теле обёртка дочитывает текущее количество позиции и подставляет его — можно изменить только цену или другое поле. Если при таком частичном обновлении позиция не найдена, вернётся `404 ENTITY_NOT_FOUND`.\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X PATCH \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbasket-items\u002F9\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"quantity\": 3,\n    \"discountPrice\": 50\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X PATCH \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbasket-items\u002F9\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"quantity\": 3,\n    \"discountPrice\": 50\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbasket-items\u002F9', {\n  method: 'PATCH',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    quantity: 3,\n    discountPrice: 50,\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\u002Fbasket-items\u002F9', {\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    quantity: 3,\n    discountPrice: 50,\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\": 9,\n    \"orderId\": 33,\n    \"productId\": 119,\n    \"name\": \"Домашние Тапочки Любимый Спорт\",\n    \"price\": 470,\n    \"basePrice\": 470,\n    \"discountPrice\": 50,\n    \"currency\": \"RUB\",\n    \"quantity\": 3,\n    \"vatRate\": 0,\n    \"vatIncluded\": true,\n    \"customPrice\": false,\n    \"canBuy\": true,\n    \"weight\": 0,\n    \"measureCode\": 796,\n    \"measureName\": \"шт\",\n    \"dateUpdate\": \"2026-05-13T11:58:14.000Z\"\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n422 — позиция не найдена:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BITRIX_ERROR\",\n    \"message\": \"basket item is not exists\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 404 | `ENTITY_NOT_FOUND` | Позиция не найдена (частичный PATCH без `quantity` — определяется на предзагрузке) |\n| 422 | `BITRIX_ERROR` | Позиция с таким ID не найдена (PATCH с явным `quantity`) |\n| 400 | `BITRIX_ERROR` | Некорректное значение поля |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `sale` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Поля `id`, `orderId`, `productId`, `productXmlId`, `catalogXmlId`, `dateInsert` доступны только для чтения.** Они проставляются при создании, попытка изменить их игнорируется. Чтобы перенести позицию в другой заказ, удалите её через [`DELETE \u002Fv1\u002Fbasket-items\u002F:id`](.\u002Fdelete.md) и создайте новую через [`POST \u002Fv1\u002Fbasket-items`](.\u002Fcreate.md).\n\n**Защита цены через `customPrice`.** При `customPrice: true` цена позиции не будет пересчитана автоматически при изменении цены товара в каталоге.\n\n## Смотрите также\n\n- [Получить позицию](.\u002Fget.md)\n- [Список позиций](.\u002Flist.md)\n- [Удалить позицию](.\u002Fdelete.md)\n- [Batch](\u002Fdocs\u002Fbatch)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n","2026-07-09",{}]