Item.Upsert
Добавляет или полностью обновляет товары общего каталога кассы; возвращает локальные ID для работы с корзиной. Товар доступен всем интеграциям этой кассы.
Для авторизации передайте Bearer-токен интеграции в HTTP-заголовке. Подробнее — авторизация API.
Входные параметры
| Название | Тип данных | Обязательность | Описание |
|---|---|---|---|
| items | array | Обязательный | От 1 до 150 товаров; одинаковые external_id в одном запросе запрещены |
| items[].item_id | int64 | Без external_id | Локальный ID существующего товара, больше 0; позволяет обновить любой товар кассы |
| items[].external_id | string | Без item_id | Общий для всей кассы ключ, от 1 до 100 символов; пробелы по краям удаляются |
| items[].name | string | Обязательный | Наименование от 1 до 60 символов |
| items[].barcode | string | Необязательный | Штрихкод до 21 символа; по умолчанию пустой |
| items[].icps | string | Обязательный | ИКПУ: ровно 17 цифр |
| items[].price | int64 | Обязательный | Цена единицы в тийинах, не меньше 0 |
| items[].vat_value | int64 | Обязательный | Ставка НДС × 100, должна существовать в справочнике кассы |
| items[].unit_kkm_code | int64 | Необязательный | Код существующей единицы измерения, по умолчанию 1 |
| items[].package_code | string | Необязательный | Код упаковки данного ИКПУ; без значения выбирается первая доступная упаковка |
| items[].owner_type | int32 | Обязательный | 0 — купля-продажа; 1 — производство; 2 — услуги |
Передайте item_id, external_id либо оба поля. Без item_id новый external_id создаёт товар, а существующий обновляет тот же товар независимо от токена интеграции. По item_id обновляется существующий товар, включая созданный вручную; неизвестный ID возвращает 701001. Если указаны оба идентификатора, они должны соответствовать одному товару; новый внешний ключ можно назначить товару, у которого его ещё нет. Уже назначенный ключ не заменяется другим: для обновления передайте только item_id.
Старый external_id, который связан с несколькими товарами, без item_id возвращает 701003. Передайте оба поля, чтобы явно выбрать товар для общего ключа. Остальные товары сохраняются и доступны по своим item_id. Одинаковый ИКПУ не объединяет товары. Один товар нельзя обновить дважды в одном пакете, даже через разные идентификаторы. Все обязательные реквизиты товара передаются заново: это не частичное обновление. Удалённый товар при обновлении восстанавливается.
ИКПУ, упаковка, допустимая ставка НДС и период её действия проверяются так же, как при проверке чека. Переданное наименование сохраняется без замены названием из справочника ИКПУ; удаляются только пробелы по краям. Штрихкод может быть уточнён данными справочника; ставка 600 применяется принудительно, если её требует справочник. Признаки маркировки и ограничения оплаты определяются по ИКПУ. Маркировка конкретной единицы товара при создании справочника не требуется. При ошибке ни один товар из запроса не сохраняется.
ИКПУ и штрихкод в примере фиктивные: используйте действительные данные товара.
Пример запроса
Authorization: Bearer <integration-token>
Content-Type: application/json;charset=utf-8
{
"jsonrpc": "2.0",
"method": "Item.Upsert",
"params": {
"items": [
{
"external_id": "SKU-001",
"name": "Тестовый товар",
"barcode": "4780000000000",
"icps": "00000000000000000",
"price": 10000,
"vat_value": 0,
"owner_type": 0
}
]
},
"id": 1
}
Обновление существующего товара по локальному ID (все обязательные реквизиты передаются заново):
{
"jsonrpc": "2.0",
"method": "Item.Upsert",
"params": {
"items": [
{
"item_id": 101,
"name": "Тестовый товар 250 г",
"barcode": "4780000000000",
"icps": "00000000000000000",
"price": 12000,
"vat_value": 0,
"owner_type": 0
}
]
},
"id": 2
}
Выходные параметры
| Название | Тип данных | Описание |
|---|---|---|
| items | array | Список товаров |
| items[].external_id | string | Общий внешний ключ; пустой, если товар обновлён только по item_id и ключ не задан |
| items[].item_id | int64 | Локальный ID товара для Cart.Add |
| items[].created | boolean | Признак создания нового товара |
| items[].name | string | Наименование товара |
| items[].barcode | string | Штрихкод; пустой при отсутствии |
| items[].price | int64 | Цена единицы в тийинах |
| items[].vat_value | int64 | Ставка НДС в сотых долях процента; -1 — без НДС |
| items[].icps | string | Код ИКПУ |
| items[].package_code | string или null | Код упаковки; null при отсутствии |
result.items содержит по одному результату на товар в исходном порядке: external_id, item_id, created (создан новый товар), фактические name, barcode, price, vat_value, icps, package_code (null при отсутствии упаковок).
Пример ответа
{
"jsonrpc": "2.0",
"result": {
"items": [
{
"external_id": "SKU-001",
"item_id": 101,
"created": true,
"name": "Тестовый товар",
"barcode": "4780000000000",
"price": 10000,
"vat_value": 0,
"icps": "00000000000000000",
"package_code": null
}
]
},
"ok": true,
"id": 1
}
Ошибки: общие ошибки авторизации и формата; 701001 — товар с указанным item_id не найден; 701003 — поля товара, конфликт идентификаторов, неизвестная ставка/единица или неподходящая упаковка; 705511 — нет данных ИКПУ. При недоступности сервиса проверки возвращается соответствующая ошибка из перечня; товары не сохраняются.