Online Store Scenarios
Ready-to-use request bodies for typical online commerce scenarios. The general framework, value dictionaries, and limits can be found in the API reference and receipt attributes. In all examples, the base URL is https://54fz.cenaly.ru/possystem/v5/, group kkt-1f4c9a20b73e — a code of this format is issued when creating a cash server in the "POS API" admin section; choosing a custom descriptive name is not allowed.
1. Card payment on the website, goods shipped immediately#
The most common case: the customer paid on the website, and the goods leave the inventory on the same day.
POST /possystem/v5/kkt-1f4c9a20b73e/sell
Token: <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": "Coffee beans, 1 kg", "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
}
}
Key points: payment_method: full_payment (full settlement) and payments[].type: 1 (cashless).
When to send. Immediately after payment confirmation by acquiring — by law, the receipt must be generated no later than the next business day, but there is no point in accumulating receipts: the customer expects it at the moment of payment.
2. Prepayment: two receipts#
The goods are out of stock, shipping is a week away. The law requires two receipts.
Receipt 1 — at the moment of payment (full_prepayment, "100% prepayment"):
{
"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": "Coffee machine 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
}
}
Receipt 2 — at the moment of shipping (full_payment plus an offset of the advance, type: 2; the customer pays no more money):
{
"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": "Coffee machine 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
}
}
A partial prepayment works the same way, but the first receipt goes out with payment_method: prepayment for the paid part, and the second closes the remainder: payments = the offset of the advance (type: 2) plus the top-up payment (type: 1 or 0).
3. Refund#
The customer returned an item — this is not a correction, but a regular receipt flagged as "income refund":
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
}
}
The refund method must match the payment method: card payment is refunded to the card (type: 1). Partial refund — only the returned items, not the entire receipt.
4. Correction: payment bypassed the POS#
Payment was received, but no fiscal receipt was generated (integration failure, POS PC was powered off for over 24 hours). A correction receipt is issued:
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
}
}
Correction receipts are sent to the POS via a dedicated bridge command introduced in August 2026: if you receive unknown command in response, update Cenaly Hardware Bridge on the POS PC.
type: "self" — self-initiated correction (before the tax authority notices). Voluntary correction is what exempts you from penalties under Article 14.5 of the Code of Administrative Offenses. If an official tax authority notice was issued, use type: "instruction" along with the mandatory base_number specifying the document number.
For details on which correction receipt to use and how to fix specific errors, see the in-depth breakdown in the guide to correction receipts.
5. Cash on delivery: the courier took the money#
The courier received cash on handover. The receipt is registered on the cash register of the warehouse or the store, and the form of settlement is cash:
"items": [{
"name": "Coffee beans, 1 kg", "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 }]
If the courier takes a card payment on a terminal, they issue their own receipt — there is no need to register it a second time through the API. A breakdown of courier schemes — Couriers and delivery.
6. Delivery as a separate line#
Delivery is a service, a separate item with its own VAT rate:
"items": [
{ "name": "Coffee beans, 1 kg", "price": 1250.00, "quantity": 2, "sum": 2500.00,
"measure": 11, "payment_method": "full_payment", "payment_object": 1, "vat": { "type": "vat20" } },
{ "name": "Delivery", "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 is a service. The receipt total must add up to the sum of the items and to the payment.
7. A marked good#
For goods subject to marking the payment subject attribute is 33 (with a code) or 32 (without one), and the code itself is passed in mark_code:
{
"name": "Nike Air sneakers, size 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..." }
}
The code is passed to the cash register unchanged. The service does not verify the code in "Chestny ZNAK" and does not implement the permissive mode — your accounting system must do that before the receipt is sent. Details on marking — Marking errors.
8. An agent sale (marketplace, commission)#
You are selling a principal's goods — agent fields appear in the item:
{
"name": "Tableware set (partner's goods)", "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": "Supplier LLC", "inn": "7736570901", "phones": ["+79001234567"] }
}
supplier_info with a valid TIN is mandatory — the receipt will not be accepted without it. A breakdown of agent schemes — Agent receipts.
9. Subscriptions and recurring charges#
Every charge is a separate settlement and a separate receipt with its own 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": "\"Coffee of the month\" subscription, September", "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
}
}
An external_id scheme of the form sub-{id}-{period} gives natural protection against a double charge: a repeat of the same period returns error 33 with the original uuid rather than a second receipt.
Night-time charges: the receipt is registered on your cash register, so the cash register PC must be on at that hour. If the charges run at night while the store is closed, either leave the PC on or move the billing to working hours.
10. What to store with your order#
After status: done, save from payload:
| Field | What for |
|---|---|
fiscal_document_number (FD) |
Finding the receipt in the OFD and in the FTS check |
fiscal_document_attribute (FPD) |
Confirming the document's authenticity |
fn_number |
Identifying the fiscal drive the receipt was registered on |
ecr_registration_number |
Identifying the cash register |
receipt_datetime |
The document time by the cash register's clock (it may differ from yours) |
uuid |
The key for re-requesting the report and for investigating incidents |
This set is enough to answer a customer's or the tax authority's question a month later: "where is the receipt for order No. 10421".
Next: errors and diagnostics · receipt fields · API reference.