Сценарии интернет-магазина
Готовые тела запросов под типовые ситуации онлайн-торговли. Общий каркас, справочники значений и лимиты — в справочнике API и реквизитах чека. Во всех примерах базовый URL https://54fz.cenaly.ru/possystem/v5/, группа kkt-1f4c9a20b73e — код такого вида выдаётся при создании кассового сервера в разделе админки «API кассы», выбрать своё «говорящее» имя нельзя.
1. Оплата картой на сайте, товар отгружается сразу#
Самый частый случай: покупатель оплатил на сайте, товар уходит со склада в тот же день.
POST /possystem/v5/kkt-1f4c9a20b73e/sell
Token: <токен>
{
"timestamp": "04.08.2026 14:40:00",
"external_id": "order-10421",
"service": { "callback_url": "https://shop.example/api/fiscal-callback" },
"receipt": {
"client": { "email": "buyer@example.com" },
"company": { "email": "shop@example.com", "sno": "usn_income",
"inn": "7736570901", "payment_address": "https://shop.example" },
"items": [{
"name": "Кофе в зёрнах, 1 кг", "price": 1250.00, "quantity": 2, "sum": 2500.00,
"measure": 11, "payment_method": "full_payment", "payment_object": 1,
"vat": { "type": "vat20" }
}],
"payments": [{ "type": 1, "sum": 2500.00 }],
"total": 2500.00
}
}
Ключевое: payment_method: full_payment (полный расчёт) и payments[].type: 1 (безналичные).
Когда отправлять. Сразу после подтверждения оплаты эквайрингом — по закону чек формируется не позднее следующего рабочего дня, но копить чеки нет смысла: покупатель ждёт его в момент оплаты.
2. Предоплата: два чека#
Товара нет на складе, отгрузка через неделю. Закон требует два чека.
Чек 1 — в момент оплаты (full_prepayment, «предоплата 100 %»):
{
"timestamp": "04.08.2026 14:40:00",
"external_id": "order-10422-prepay",
"receipt": {
"client": { "email": "buyer@example.com" },
"company": { "sno": "usn_income", "inn": "7736570901", "payment_address": "https://shop.example" },
"items": [{
"name": "Кофемашина X100", "price": 45000.00, "quantity": 1, "sum": 45000.00,
"measure": 0, "payment_method": "full_prepayment", "payment_object": 1,
"vat": { "type": "vat20" }
}],
"payments": [{ "type": 1, "sum": 45000.00 }],
"total": 45000.00
}
}
Чек 2 — в момент отгрузки (full_payment + зачёт аванса type: 2, денег покупатель больше не платит):
{
"timestamp": "11.08.2026 10:15:00",
"external_id": "order-10422-shipment",
"receipt": {
"client": { "email": "buyer@example.com" },
"company": { "sno": "usn_income", "inn": "7736570901", "payment_address": "https://shop.example" },
"items": [{
"name": "Кофемашина X100", "price": 45000.00, "quantity": 1, "sum": 45000.00,
"measure": 0, "payment_method": "full_payment", "payment_object": 1,
"vat": { "type": "vat20" }
}],
"payments": [{ "type": 2, "sum": 45000.00 }],
"total": 45000.00
}
}
Частичная предоплата устроена так же, но первый чек идёт с payment_method: prepayment на оплаченную часть, а второй закрывает остаток: payments = зачёт аванса (type: 2) + доплата (type: 1 или 0).
3. Возврат#
Покупатель вернул товар — это не коррекция, а обычный чек с признаком «возврат прихода»:
POST /possystem/v5/kkt-1f4c9a20b73e/sell_refund
{
"timestamp": "12.08.2026 12:00:00",
"external_id": "order-10421-refund",
"receipt": {
"client": { "email": "buyer@example.com" },
"company": { "sno": "usn_income", "inn": "7736570901", "payment_address": "https://shop.example" },
"items": [{
"name": "Кофе в зёрнах, 1 кг", "price": 1250.00, "quantity": 1, "sum": 1250.00,
"measure": 11, "payment_method": "full_payment", "payment_object": 1,
"vat": { "type": "vat20" }
}],
"payments": [{ "type": 1, "sum": 1250.00 }],
"total": 1250.00
}
}
Форма возврата денег должна совпадать с формой оплаты: оплата картой возвращается на карту (type: 1). Частичный возврат — только вернувшиеся позиции, а не весь чек.
4. Коррекция: расчёт прошёл мимо кассы#
Оплата была, а чек не сформирован (сбой интеграции, кассовый ПК был выключен дольше суток). Оформляется чек коррекции:
POST /possystem/v5/kkt-1f4c9a20b73e/sell_correction
{
"timestamp": "05.08.2026 09:00:00",
"external_id": "corr-2026-08-04-01",
"correction_info": { "type": "self", "base_date": "04.08.2026", "base_number": "б/н" },
"correction": {
"company": { "sno": "usn_income", "inn": "7736570901", "payment_address": "https://shop.example" },
"items": [{
"name": "Кофе в зёрнах, 1 кг", "price": 1250.00, "quantity": 2, "sum": 2500.00,
"measure": 11, "payment_method": "full_payment", "payment_object": 1,
"vat": { "type": "vat20" }
}],
"payments": [{ "type": 1, "sum": 2500.00 }],
"total": 2500.00
}
}
Чеки коррекции уходят на кассу отдельной командой моста, появившейся в августе 2026: если в ответ приходит unknown command, обновите Cenaly Hardware Bridge на кассовом ПК.
type: "self" — коррекция по собственной инициативе (до того, как ФНС заметила). Именно самостоятельная коррекция освобождает от штрафа по ст. 14.5 КоАП. Если пришло предписание налоговой — type: "instruction" и обязательный base_number с номером документа.
Когда какой чек коррекции нужен и как исправлять конкретные ошибки — большой разбор в справочнике по чекам коррекции.
5. Наложенный платёж: курьер принял деньги#
Курьер получил наличные при вручении. Чек пробивается на кассе склада или магазина, форма расчёта — наличные:
"items": [{
"name": "Кофе в зёрнах, 1 кг", "price": 1250.00, "quantity": 2, "sum": 2500.00,
"measure": 11, "payment_method": "full_payment", "payment_object": 1,
"vat": { "type": "vat20" }
}],
"payments": [{ "type": 0, "sum": 2500.00 }]
Если курьер принимает оплату картой на терминале, он выдаёт свой чек — второй раз через API его пробивать не нужно. Разбор схем с курьерами — Курьеры и доставка.
6. Доставка отдельной строкой#
Доставка — услуга, отдельная позиция с собственной ставкой НДС:
"items": [
{ "name": "Кофе в зёрнах, 1 кг", "price": 1250.00, "quantity": 2, "sum": 2500.00,
"measure": 11, "payment_method": "full_payment", "payment_object": 1, "vat": { "type": "vat20" } },
{ "name": "Доставка", "price": 350.00, "quantity": 1, "sum": 350.00,
"measure": 0, "payment_method": "full_payment", "payment_object": 4, "vat": { "type": "vat20" } }
],
"payments": [{ "type": 1, "sum": 2850.00 }],
"total": 2850.00
payment_object: 4 — услуга. Итог чека обязан сойтись с суммой позиций и с оплатой.
7. Маркированный товар#
Для товара, подлежащего маркировке, признак предмета расчёта — 33 (с кодом) или 32 (без кода), а сам код передаётся в mark_code:
{
"name": "Кроссовки Nike Air, 42", "price": 12990.00, "quantity": 1, "sum": 12990.00,
"measure": 0, "payment_method": "full_payment", "payment_object": 33,
"vat": { "type": "vat20" },
"mark_code": { "gs1m": "MDEwNDYwNzQyODY3OTA5MDIxOU..." }
}
Код передаётся в кассу без изменений. Проверку кода в «Честном знаке» и разрешительный режим сервис не выполняет — это должна сделать ваша учётная система до отправки чека. Подробности по маркировке — Ошибки маркировки.
8. Агентская продажа (маркетплейс, комиссия)#
Продаёте товар принципала — в позиции появляются агентские реквизиты:
{
"name": "Набор посуды (товар партнёра)", "price": 5400.00, "quantity": 1, "sum": 5400.00,
"measure": 0, "payment_method": "full_payment", "payment_object": 1,
"vat": { "type": "vat20" },
"agent_info": { "type": "commission_agent" },
"supplier_info": { "name": "ООО Поставщик", "inn": "7736570901", "phones": ["+79001234567"] }
}
supplier_info с валидным ИНН обязателен — без него чек не примут. Разбор агентских схем — Агентские чеки.
9. Подписка и регулярные списания#
Каждое списание — отдельный расчёт и отдельный чек с собственным external_id:
{
"timestamp": "01.09.2026 03:00:00",
"external_id": "sub-777-2026-09",
"receipt": {
"client": { "email": "buyer@example.com" },
"company": { "sno": "usn_income", "inn": "7736570901", "payment_address": "https://shop.example" },
"items": [{
"name": "Подписка «Кофе месяца», сентябрь", "price": 990.00, "quantity": 1, "sum": 990.00,
"measure": 0, "payment_method": "full_payment", "payment_object": 4,
"vat": { "type": "vat20" }
}],
"payments": [{ "type": 1, "sum": 990.00 }],
"total": 990.00
}
}
Схема external_id вида sub-{id}-{период} даёт естественную защиту от двойного списания: повтор того же периода вернёт ошибку 33 с прежним uuid, а не второй чек.
Ночные списания: чек пробивается на вашей кассе, поэтому кассовый ПК в это время должен быть включён. Если списания идут ночью, а магазин закрыт — либо оставляйте ПК включённым, либо переносите биллинг на рабочие часы.
10. Что сохранять у себя в заказе#
После status: done сохраните из payload:
| Поле | Зачем |
|---|---|
fiscal_document_number (ФД) |
Поиск чека в ОФД и в проверке ФНС |
fiscal_document_attribute (ФПД) |
Подтверждение подлинности документа |
fn_number |
Идентификация накопителя, на котором пробит чек |
ecr_registration_number |
Идентификация кассы |
receipt_datetime |
Время документа по часам кассы (может отличаться от вашего) |
uuid |
Ключ для повторного запроса report и разбора инцидентов |
Этого набора достаточно, чтобы через месяц ответить на вопрос покупателя или налоговой «где чек по заказу №10421».
Дальше: ошибки и диагностика · реквизиты чека · справочник API.