Cart.Add
Создаёт отдельную сохранённую корзину с переданными позициями.
Для авторизации передайте Bearer-токен интеграции в HTTP-заголовке. Подробнее — авторизация API.
Входные параметры
| Название | Тип данных | Обязательность | Описание |
|---|---|---|---|
| external_id | string | Обязательный | Ключ создания корзины, от 1 до 100 символов, уникален в пределах интеграции |
| items | array | Обязательный | От 1 до 150 позиций; суммарно в корзине не больше 150 |
| items[].item_id | int64 | Обязательный | Локальный ID любого доступного товара кассы из Item.Get или Item.Upsert |
| items[].price | int64 | Необязательный | Цена единицы в тийинах, не меньше 0; без поля берётся цена из справочника |
| items[].quantity | int64 | Обязательный | Количество ×1000, больше 0; 1000 означает одну единицу |
| items[].discount | int64 | Необязательный | Скидка на позицию в тийинах, по умолчанию 0; не больше суммы позиции |
| items[].label | string | Необязательный | Маркировка единицы; при передаче проверяется её формат и соответствие штрихкоду |
Реквизиты берутся из ранее сохранённого товара. Переданная price действует только для этой позиции корзины и не меняет справочник. Сумма позиции: price × quantity / 1000, округлённая до целого тийина по правилу округления половин от нуля, минус discount. Скидка передаётся на всю позицию, а не на единицу. Данные сохраняются на момент добавления; последующие изменения справочника не пересчитывают позиции. Позиции добавляются отдельными строками.
Новый external_id создаёт новую корзину. Входной cart_id не поддерживается: дополнять существующую корзину этим методом нельзя. Повтор с тем же ключом и теми же параметрами возвращает актуальное состояние прежней корзины без дублирования, в том числе после отмены или оформления. Изменённые параметры с тем же ключом дают 703100. Сохраняйте исходные значения и порядок позиций для повтора. Весь запрос атомарен. ID созданной корзины возвращается в поле cart_id ответа.
Маркировку можно дополнить на этапе будущего оформления. Если label передан, количество позиции равно 1000 и одинаковую маркировку нельзя добавить дважды. Финальные проверки продажи, оплаты и фискализации при сохранении корзины не выполняются.
Пример запроса
Authorization: Bearer <integration-token>
Content-Type: application/json;charset=utf-8
{
"jsonrpc": "2.0",
"method": "Cart.Add",
"params": {
"external_id": "ADD-001",
"items": [
{
"item_id": 101,
"quantity": 1000,
"price": 11000,
"discount": 1000
}
]
},
"id": 2
}
Выходные параметры
| Название | Тип данных | Описание |
|---|---|---|
| cart_id | string | Локальный ID корзины из Cart.Add |
| status | string | Состояние корзины: open, process, finished или canceled |
| receipt_id | string или null | ID завершённого чека; до завершения null |
| created_at | string | Время создания, местное время кассы, YYYY-MM-DD HH:mm:ss |
| updated_at | string | Время обновления, местное время кассы, YYYY-MM-DD HH:mm:ss |
| total | int64 | Сумма корзины после скидок в тийинах |
| items | array | Позиции корзины |
| items[].item_id | int64 | Локальный ID товара для Cart.Add |
| items[].name | string | Наименование товара |
| items[].barcode | string | Штрихкод; пустой при отсутствии |
| items[].icps | string | Код ИКПУ |
| items[].price | int64 | Цена единицы в тийинах |
| items[].quantity | int64 | Количество в тысячных долях единицы; 1000 — одна единица |
| items[].discount | int64 | Скидка на всю позицию в тийинах |
| items[].amount | int64 | Сумма после скидки в тийинах |
| items[].vat_value | int64 | Ставка НДС в сотых долях процента; -1 — без НДС |
| items[].package_code | string или null | Код упаковки; null при отсутствии |
| items[].label | string | Маркировка единицы; пустая при отсутствии |
Результат: cart_id, status (open, process, finished или canceled), receipt_id (ID закрытого чека, до завершения — null), created_at, updated_at (местное время кассы, YYYY-MM-DD HH:mm:ss), total (сумма после скидок, тийины), items.
Каждая позиция содержит item_id, name, barcode, icps, price (цена единицы), quantity (×1000), discount, amount (сумма после скидки), vat_value, package_code и label. Денежные поля указаны в тийинах.
Новая корзина получает статус open. При открытии кассиром она переходит в process; после закрытия чека — в finished. Повтор исходного запроса возвращает актуальное состояние.
Пример ответа
{
"jsonrpc": "2.0",
"result": {
"cart_id": "0123456789abcdef0123456789abcdef",
"status": "open",
"receipt_id": null,
"created_at": "2026-11-12 10:00:00",
"updated_at": "2026-11-12 10:00:00",
"total": 10000,
"items": [
{
"item_id": 101,
"name": "Тестовый товар",
"barcode": "4780000000000",
"icps": "00000000000000000",
"price": 11000,
"quantity": 1000,
"discount": 1000,
"amount": 10000,
"vat_value": 0,
"package_code": null,
"label": ""
}
]
},
"ok": true,
"id": 2
}
Ошибки: общие ошибки; 701001 — товар не найден или удалён; 701003 — неверные параметры, в том числе неподдерживаемый cart_id, цена, количество, скидка, маркировка либо лимит позиций; 703100 — external_id использован с другими данными. Ошибки маркировки — из перечня.