Receipt. Продажи
Метод возвращает чеки продаж и возвратов вместе со строками, оплатой и данными о кассе. Чеки можно только читать: создаются они кассовым приложением. Выгрузку можно вести по датам либо по маркеру — так удобно получать только новые чеки после прошлого обмена.
Как получить ключ, как формируются запросы и какие бывают ответы и ошибки — в статье Общие сведения. Здесь описаны только особенности метода receipt.
Запрос
Все параметры, кроме ключа apikey и формата format, принимаются и в адресной строке, и в теле POST.
GET https://[компания].myvirtualpos.ru/api/receipt?apikey=MySecret&datefrom=20260901&dateto=20260902&warehouseid=8
Параметры запроса
| datefrom | Дата ГГГГММДД или дата и время ГГГГММДДччммсс. Чеки, оформленные не раньше указанного момента. Если не указан, отбираются чеки за последние days дней |
| dateto | Дата ГГГГММДД или дата и время ГГГГММДДччммсс. Чеки, оформленные раньше указанного момента (граница не включается). Для одного дня укажите следующий день |
| days | Число. Глубина поиска в днях от текущего момента, если не указан datefrom. По умолчанию 25 |
| warehouseid | Число. Ид точки продаж. Только при выгрузке по датам |
| warehouseid2 | Строка. Код точки продаж во внешней системе. Только при выгрузке по датам |
| marker | Маркер последнего полученного чека вида метка:номер: вернуть чеки, появившиеся или изменившиеся после него. При указании маркера параметры datefrom, dateto, days, warehouseid и warehouseid2 игнорируются |
| fields | Дополнительные поля через двоеточие, например itemname:user_login. Список допустимых значений ниже |
| bankTransaction | 1 — добавить в чек данные банковской транзакции |
| format | json (по умолчанию) или xml |
Чеки возвращаются по возрастанию ид. В выгрузку попадают только фискальные чеки: с типом «продажа» или «возврат» (и операции покупки у клиента) и с заполненным регистрационным номером фискального регистратора.
Выгружайте порциями. Метод собирает в одном ответе все чеки за период вместе со строками. За большой период это долго и может закончиться ошибкой сервера по памяти. Ограничивайте выборку датами и точкой продаж либо используйте маркер.
Выгрузка новых чеков по маркеру
Каждый чек содержит поле marker вида 1780236802:0000386289. Запомните маркер последнего обработанного чека и передайте его в параметре marker в следующем запросе: ответ будет содержать только чеки, которые появились или были изменены после него. Так ничего не теряется и не приходят повторы.
Маркер состоит из двух чисел: времени последнего изменения чека и ид чека. Оба обязательны, ид не может быть просто 0. Для первой выгрузки используйте даты, а маркер берите из полученных чеков.
Дополнительные поля (''fields'')
Через двоеточие можно перечислить:
| itemname | В строку: название товара |
| itemid2 | В строку: код товара во внешней системе |
| article | В строку: артикул |
| lot_number | В строку: серия (партия) |
| manufacturer_id, manufacturer_name | В строку: ид и название производителя товара |
| discount_name | В строку: название акции, по которой дана скидка |
| warehouseid2 | В чек: код точки продаж во внешней системе |
| user_login | В чек: логин кассира |
| user_fio | В чек: фамилия и инициалы кассира |
| card_id, card_id2 | В чек: ид карты клиента и её код во внешней системе |
| customer_id, customer_id2 | В чек: ид клиента и его код во внешней системе |
| customer_fname, customer_lname, customer_mname | В чек: имя, фамилия и отчество клиента |
| session_open_datetime | В чек: дата и время открытия смены |
Если указано неизвестное поле, метод вернёт ошибку со списком допустимых значений.
Структура ответа
| success | 1 — данные получены |
| type | Тип данных, всегда receipt |
| count | Количество чеков в ответе |
| receipts | Список чеков. Каждый обёрнут в объект receipt |
Поля чека
Пустые значения в JSON приходят как null, в XML — как пустой элемент.
Основное
| receipt_id | Строка. Уникальный идентификатор чека (GUID) |
| marker | Строка. Маркер чека для выгрузки новых данных |
| doc_type | Строка. Тип чека: sale — продажа, return — возврат, buy — покупка у клиента, buy_return — возврат покупки |
| date | Строка. Дата и время чека, формат дд.мм.гггг чч:мм:сс |
| amount | Строка. Сумма чека с учётом скидки |
| discount | Строка. Скидка на чек |
| discount_misc | Строка. Дополнительная скидка: часть, оплаченная купоном или сертификатом |
| round_amount | Строка. Сумма округления |
| items_count | Число. Количество строк в чеке |
| items | Список строк чека. Каждая строка обёрнута в объект item |
Касса и кассир
| terminalid | Строка. Регистрационный номер фискального регистратора. Если фискальный регистратор не используется — уникальный идентификатор кассы |
| short_fiscal_serial_number | Строка. Краткий серийный номер ККТ |
| terminal_number | Число. Номер кассы в зале |
| terminal_description | Строка. Описание кассового места |
| device_model_name, device_model_version | Строка. Модель и версия ККТ |
| warehouseid | Число. Ид точки продаж |
| user_id | Число. Ид кассира |
| corp_code | Строка. Корпоративный код кассира |
| fr_session | Число. Номер смены |
| doc_num | Число. Номер документа по данным фискального регистратора |
| doc_num_session | Число. Номер чека в смене по данным фискального регистратора |
| fiscal_attribute | Строка. Фискальный признак документа |
| is_electronic | Число. 1 — покупателю отправлен электронный чек |
Оплата
| pay_cash | Строка. Оплачено наличными |
| pay_card | Строка. Оплачено банковской картой |
| pay_sbp | Строка. Оплачено через систему быстрых платежей |
| pay_credit, pay_tare | Строка. Оплата в кредит и тарой; не используются |
| pay_bonus_id | Число. Ид бонусной программы, по которой списаны бонусы |
| pay_bonus_amount | Строка. Списано бонусов |
| pinpad_name | Строка. Признак платёжного терминала |
| vat10_sum, vat18_sum, vat20_sum | Строка. Сумма НДС по позициям со ставкой 10%, 18% и 20% |
Дополнительные блоки
| sale_receipt_id, sale_receipt_date | Только у возвратов: ид (GUID) и дата первоначального чека продажи |
| bankTransaction | При bankTransaction=1: данные банковской транзакции — payment_type (card), rrn, trx_date, term_num, auth_code, card_type, card_name, amount_clear, client_card (номер карты в маскированном виде). Пусто, если по чеку нет данных терминала |
| coupons | Если часть чека оплачена сертификатом: список coupon с barcode и номиналом sum. Тогда в bankTransaction приходят payment_type равный coupon и payment_denomination — сумма номиналов |
Поля строки чека
| line_id | Строка. Уникальный идентификатор строки (GUID) |
| itemid | Число. Ид товара |
| quantity | Строка. Количество |
| pricebase | Строка. Цена за единицу по прайс-листу без скидки |
| pricesale | Строка. Цена продажи за единицу с учётом скидки |
| discount | Строка. Сумма скидки по строке |
| amount | Строка. Сумма по строке с учётом скидки |
| cogs | Строка. Себестоимость единицы |
| barcode | Строка. Штрихкод |
| vat_applied | Строка. Ставка НДС; -1 — без НДС |
| vat_amount | Строка. Сумма НДС |
| onhand_id | Число. Ид товарного остатка, из которого списан товар |
| user_id | Всегда пусто (не используется) |
Пример ответа
{
"success": 1,
"type": "receipt",
"count": 1,
"receipts": [
{
"receipt": {
"receipt_id": "57307ECE-1489-4B1F-A3AE-3F4E5CDC0BF1",
"marker": "1780232425:0000386281",
"terminalid": "100000032",
"warehouseid": 8,
"user_id": 3,
"corp_code": "",
"fr_session": 10,
"doc_type": "sale",
"doc_num": 23,
"doc_num_session": 15,
"date": "31.05.2026 16:00:23",
"discount": "0.00",
"discount_misc": "0.00",
"amount": "150.00",
"round_amount": "0.00",
"pay_cash": "0.00",
"pay_card": "150.00",
"pay_tare": "0.00",
"pay_credit": "0.00",
"pay_sbp": "0.00",
"pay_bonus_id": null,
"pay_bonus_amount": "0.00",
"pinpad_name": "standalone",
"terminal_number": 2,
"short_fiscal_serial_number": "000003",
"device_model_name": "",
"device_model_version": "",
"terminal_description": "Касса № 2",
"is_electronic": 0,
"fiscal_attribute": null,
"vat10_sum": "0.00",
"vat18_sum": "0.00",
"vat20_sum": "0.00",
"items_count": 1,
"items": [
{
"item": {
"line_id": "CEDC9509-633B-5B89-7F57-B56588767BFA",
"itemid": 4620,
"quantity": "1.000",
"pricebase": "150.00",
"pricesale": "150.0000",
"discount": "0.00",
"amount": "150.00",
"barcode": null,
"cogs": "0.00",
"user_id": null,
"vat_applied": "-1.00",
"vat_amount": "0.00",
"onhand_id": 81540
}
}
]
}
}
]
}
Тот же ответ при format=xml (сокращённо):
<?xml version="1.0" encoding="UTF-8"?> <root> <success>1</success> <type>receipt</type> <count>1</count> <receipts> <receipt> <receipt_id>57307ECE-1489-4B1F-A3AE-3F4E5CDC0BF1</receipt_id> <marker>1780232425:0000386281</marker> <doc_type>sale</doc_type> <amount>150.00</amount> <!-- остальные поля чека --> <items_count>1</items_count> <items> <item> <line_id>CEDC9509-633B-5B89-7F57-B56588767BFA</line_id> <itemid>4620</itemid> <quantity>1.000</quantity> <!-- остальные поля строки --> </item> </items> </receipt> </receipts> </root>
Примеры запросов
| Задача | Запрос |
|---|---|
| Чеки за последние 25 дней | /api/receipt?apikey=MySecret |
| Чеки за сутки по точке продаж | /api/receipt?apikey=MySecret&datefrom=20260901&dateto=20260902&warehouseid=8 |
| Чеки за интервал времени | /api/receipt?apikey=MySecret&datefrom=20260901090000&dateto=20260901180000 |
| Только новые чеки после прошлого обмена | /api/receipt?apikey=MySecret&marker=1780236802:0000386289 |
| Чеки с названиями товаров и кассиром | /api/receipt?apikey=MySecret&datefrom=20260901&dateto=20260902&fields=itemname:article:user_login |
| Чеки с банковскими транзакциями | /api/receipt?apikey=MySecret&datefrom=20260901&dateto=20260902&bankTransaction=1 |
Ошибки
Ошибка авторизации и общие ошибки описаны в статье Общие сведения.
| Сообщение | Причина | Что делать |
|---|---|---|
| Incorrect date format dateFrom='…' / dateTo='…' | Дата не в формате ГГГГММДД или ГГГГММДДччммсс | Передайте дату, например 20260901 |
| Error parse marker '…'. Example 1394804029:000000010 (timestamp:id) | Маркер не содержит двух частей через двоеточие | Передайте маркер из ответа без изменений |
| Error parse marker '…'. Timestamp is not numeric / Id is not numeric | Части маркера не числа | Передайте маркер из ответа без изменений |
| Error parse marker '…'. Timestamp not found / Id not found | Одна из частей маркера пуста или равна 0 | Используйте маркер из ответа |
| Field '…' not found. Use combination of: […] | Неизвестное поле в fields | Используйте поля из списка |
Если по условиям ничего не найдено, метод возвращает успешный ответ с count равным 0 и пустым списком receipts.