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 — нет данных ИКПУ. При недоступности сервиса проверки возвращается соответствующая ошибка из перечня; товары не сохраняются.