PRRO.cloud

OpenAPI v0.2.1

Документація API

REST API сервісу PRRO.cloud: реєстрація чеків, керування змінами, білінг і вебхуки. Джерело правди — специфікація OpenAPI 3.1; цю сторінку згенеровано з неї під час збірки, тож довідник не розходиться з контрактом.

Базова адреса: https://app.prro.cloud

Усі шляхи на цій сторінці — відносні до базової адреси. Тіла запитів і відповідей — JSON (application/json), кодування UTF-8.

Зміст сторінки

Автентифікація

Машинні запити автентифікуються довгоживучим Bearer-токеном (JWT). Випустіть його в кабінеті PRRO.cloud у розділі токенів — значення показується рівно один раз, збережіть його одразу. Токен передається в заголовку Authorization: Bearer <token>; відкликання в кабінеті набирає чинності на всіх репліках протягом ~2 секунд. Перевірити токен можна запитом:

curl -H "Authorization: Bearer $PRRO_TOKEN" \
  "$BASE_URL/api/v1/whoami"

Швидкий старт

Разовий виклик, щоб узяти id каси, і три запити фіскального циклу — перший чек зареєстровано. На касі в режимі TEST цей цикл безкоштовний і не потребує реєстрації в податковій.

  1. Візьміть id каси.

    Токен показує ті каси, на які він діє. id з відповіді — те саме значення, що далі йде у cash_register_id чека і в шляхи /cash-registers/{id}; фіскальний номер для цього не годиться. Виклик разовий — збережіть id у налаштуваннях інтеграції.

    curl -H "Authorization: Bearer $PRRO_TOKEN" \
      "$BASE_URL/api/v1/cash-registers"
  2. Відкрийте зміну.

    Якщо каса не в режимі shift_mode: manual, цей крок можна пропустити — перший чек відкриє зміну сам.

    curl -X POST "$BASE_URL/api/v1/cash-registers/$REGISTER_ID/shifts" \
      -H "Authorization: Bearer $PRRO_TOKEN" \
      -H "Idempotency-Key: shift-2026-07-14" \
      -H "Content-Type: application/json" \
      -d '{"cashier": "Каса самообслуговування"}'
  3. Зареєструйте чек.

    Суми — десяткові рядки, а не числа. У синхронному режимі (за замовчуванням) фіскальний номер — одразу у відповіді, а поруч із ним — посилання на чек для покупця.

    curl -X POST "$BASE_URL/api/v1/receipts" \
      -H "Authorization: Bearer $PRRO_TOKEN" \
      -H "Idempotency-Key: order-10412" \
      -H "Content-Type: application/json" \
      -d '{
        "cash_register_id": "'$REGISTER_ID'",
        "type": "sale",
        "items": [
          { "name": "Кава американо", "quantity": "1", "price": "65.00", "tax_letters": "А" }
        ],
        "payments": [
          { "type": "card", "sum": "65.00" }
        ]
      }'
  4. Закрийте день.

    Z-звіт і закриття зміни — одна операція (або налаштуйте shift_close_times на касі, і день закриватиметься сам).

    curl -X DELETE "$BASE_URL/api/v1/cash-registers/$REGISTER_ID/shifts/current" \
      -H "Authorization: Bearer $PRRO_TOKEN" \
      -H "Idempotency-Key: close-2026-07-14"

Для ШІ-асистентів

Цю документацію не обовʼязково читати вручну — віддайте її своєму ШІ-асистенту (Claude, ChatGPT, Copilot тощо), і він напише код інтеграції за вас. Для цього сайт публікує машиночитані версії за конвенцією llms.txt:

  • /llms.txt

    — індекс для ШІ-агентів: короткий опис сервісу та посилання на машиночитані документи. Почніть звідси.

  • /llms-full.txt

    — уся ця сторінка одним markdown-файлом: автентифікація, швидкий старт, чек для покупця, вебхуки, повний довідник ендпоінтів і схем. Вміщується в контекст моделі — цього файла достатньо, щоб написати інтеграцію без жодного іншого джерела.

  • /api/openapi.yaml

    — специфікація OpenAPI 3.1, з якої згенеровано довідник: джерело правди для кодогенерації та валідації.

Усі три файли генеруються під час збірки з тих самих джерел, що й ця сторінка, тож не розходяться з нею.

Ключові механіки

  • Ідемпотентність.

    Заголовок Idempotency-Key обовʼязковий для всіх фіскальних операцій. Повтор запиту з тим самим ключем повертає оригінальну задачу, а не другий чек — мережеві збої та ретраї безпечні. Той самий ключ з іншою операцією — 409.

  • Sync та async.

    За замовчуванням запит тримає зʼєднання до відповіді ДПС (до 30 с); якщо не встигли — 202 із задачею для опитування. mode=async повертає 202 одразу, а результат приходить через GET /api/v1/tasks/{id} та/або вебхук.

  • Гроші — рядки.

    Усі суми — десяткові рядки ("259.90"), ніколи не float. Кількість — до 3 знаків після коми, ціни — до 2.

  • Помилки.

    Єдиний конверт {code, message, details}: code — машинний код для обробки, message — людський текст. 422 — помилка валідації або відхилення операції (немає відкритої зміни, відмова ДПС).

  • Баланс.

    Сервіс передплатний: коли баланс перетинає мʼякий ліміт, нові чеки відповідають 402, доки баланс не поповнено. Операції зі змінами при цьому доступні.

Чек для покупця

Відповідь на фіскалізацію несе не лише фіскальний номер: у result.receipt поруч із ним лежать два посилання — наша копія чека і той самий документ у кабінеті ДПС. Це все, що потрібно надіслати покупцеві листом чи в месенджер або показати QR-кодом на екрані каси — рендерити чек самотужки не треба.

{
  "task_id": "0197a2c1-…",
  "type": "receipt",
  "status": "succeeded",
  "result": {
    "receipt": {
      "document_id": "0197a2c3-…",
      "local_number": 42,
      "fiscal_number": "7466800082",
      "receipt_url": "https://r.prro.cloud/aB3xK9pQvT2mNr7c",
      "tax_url": "https://cabinet.tax.gov.ua/cashregs/check?fn=4001063533&id=7466800082&date=20260803&time=010754&sm=65.00"
    }
  }
}
  • receipt_url — копія чека.

    Сторінка відкривається без авторизації: 16-символьний код і є доступом, як паперовий чек у кишені. Подання обирає параметр ?format=: html (типово), text (моноширинний чек) і qr (PNG з адресою цієї ж сторінки). Назовні віддається лише людиночитаний чек — ні XML, ні CMS, ні квитанції ДПС. Невідомий код і документ, який не можна показати, відповідають однаково — 404.

  • tax_url — незалежна перевірка.

    Той самий документ у кабінеті платника податків — підтвердження, яке покупець читає, не довіряючи нам. Доказ фіскалізації — це fiscal_number і tax_url; receipt_url лише показує чек.

  • Офлайн-чек.

    У документа з offline: true фіскальний номер обчислено локально (<sid>.<n>.<crc>), тож tax_url зʼявиться лише після того, як пакет сесії прийме фіскальний сервер. receipt_url є одразу — копія віддається з нашого журналу.

  • Тільки розрахункові документи.

    Z-звіт, відкриття та закриття зміни друкованої форми не мають, тож посилань у їхніх DocResult не буде.

  • Посилання не протухають.

    Код зберігається разом із документом, а не перераховується, тож ротація ключів сервісу не ламає адрес, які вже в руках у покупців. Сторінку не індексують пошукові системи.

Вебхуки

Замість опитування задач підпишіться на події: зареєструйте endpoint через POST /api/v1/webhooks — і сервіс сам постукає у ваш бекенд. Події: task.completed, task.failed, shift.opened, shift.closed, key.expiring.

  • Конверт доставки.

    POST на ваш URL з тілом {delivery_id, event, attempt, occurred_at, data}; у data — корисне навантаження події.

  • Підпис.

    Заголовок X-Signature: sha256=<hex> — HMAC-SHA256 від тіла запиту під секретом endpoint'а. Секрет видається один раз при створенні; перевіряйте підпис перед обробкою.

  • Гарантії.

    Доставка at-least-once — дедуплікуйте за delivery_id; події однієї каси приходять по порядку. Невдалі доставки ретраяться, вичерпані потрапляють у DLQ (status=dead) і можуть бути повторені вручну через replay.

POST https://example.com/prro-hook
X-Signature: sha256=2b7e9f…

{
  "delivery_id": "0197a2c4-…",
  "event": "task.completed",
  "attempt": 1,
  "occurred_at": "2026-07-14T10:15:04Z",
  "data": { "task_id": "0197a2c1-…", "status": "succeeded" }
}

Довідник ендпоінтів

Згенеровано зі специфікації OpenAPI. Кабінетні ендпоінти (cookie-сесія панелі) сюди не входять — інтеграції працюють лише з машинним API.

Сервісні

GET /api/v1/version

Версія збірки сервісу

Відповіді

  • 200 Версія, зашита у збірку.
    Поле Тип Обовʼязковий Опис
    versionstringтак
GET /api/v1/whoami Bearer

Дізнатися, що стоїть за наданим машинним токеном

Відповіді

  • 200 Клієнт, дозволи (scopes) та обмеження за касами.
    Поле Тип Обовʼязковий Опис
    client_idstring (uuid)так
    scopesarray<string>так
    all_cash_registersbooleanтакtrue — токен діє на всі каси клієнта (поточні й майбутні); false — лише на перелічені у cash_registers.
    cash_registersarray<string (uuid)>Присутнє лише для обмеженого токена — перелік uuid кас, до яких він прив'язаний. Відсутнє, коли all_cash_registers.
    jtistring (uuid)так
    expires_atstring (date-time)
  • 401 Немає облікових даних, або вони недійсні, протерміновані чи відкликані. Error
GET /system/dps Bearer

Поточний режим роботи з ДПС (онлайн/офлайн)

Той самий знімок доступності, доступний будь-якій автентифікованій інтеграції: клієнт може показувати «ДПС офлайн» власним операторам.

Відповіді

  • 200 Знімок стану доступності. DPSStatus
  • 401 Немає облікових даних, або вони недійсні, протерміновані чи відкликані. Error

Фіскальні операції

POST /api/v1/receipts Bearer

Зареєструвати чек (реалізація/повернення/сторно або рух готівки)

Реєструє або розрахунок за товари (sale/return/storno), або рух готівки повз продаж (service_in/service_out — службове внесення та службова видача, тобто інкасація). І те, й інше — документи DOCTYPE 0, які проходять однаковий шлях. Виконується повний фіскальний цикл: локальний номер, XML за check01, підпис КЕП (CAdES-T), надсилання на фіскальний сервер ДПС, квитанція. У синхронному режимі (типовому) відповідь чекає на результат до 30 секунд; якщо не вклалися — 202 і номер завдання, за яким статус опитують через GET /tasks/{id}. Режим mode=async (у query або в тілі) віддає 202 одразу, а результат приходить опитуванням та/або вебхуком. Заголовок Idempotency-Key обов'язковий: повтор із тим самим ключем поверне те саме завдання, а не зареєструє другий чек.

Параметри

Параметр Тип Обовʼязковий Опис
Idempotency-Key header string так Ключ операції, який обирає клієнт. Повтор запиту з тим самим ключем поверне початкове завдання, а не виконає фіскальну операцію вдруге.
mode query string Режим доставки результату; має перевагу над однойменним полем у тілі. sync (типовий) чекає на результат у межах синхронного очікування; async одразу відповідає 202 і номером завдання, а результат приходить через GET /tasks/{id} та/або вебхуком.

Тіло запиту application/json

ReceiptInput

Відповіді

  • 200 Повтор за тим самим Idempotency-Key; завдання вже завершене. Task
  • 201 Зареєстровано в межах синхронного очікування. Task
  • 202 Ще виконується; статус — через GET /tasks/{id}. Task
  • 400 Конверт помилки. Error
  • 401 Немає облікових даних, або вони недійсні, протерміновані чи відкликані. Error
  • 402 Передплачений баланс опустився нижче порога: нові чеки заблоковано до поповнення. Операції зі змінами лишаються доступними — закрити зміну можна завжди. Error
  • 404 Конверт помилки. Error
  • 409 Цей Idempotency-Key уже використано для іншої операції. Error
  • 422 Не пройшла валідація або завдання завершилося помилкою (немає відкритої зміни, відмова ДПС тощо). Error
GET /api/v1/tasks/{id} Bearer

Статус і результат операції (опитування)

Параметри

Параметр Тип Обовʼязковий Опис
id path string (uuid) так

Відповіді

  • 200 Завдання в поточному стані. Task
  • 401 Немає облікових даних, або вони недійсні, протерміновані чи відкликані. Error
  • 404 Конверт помилки. Error
GET /api/v1/cash-registers Bearer

Каси, доступні цьому токену (звідки інтегратор бере cash_register_id)

Перелік реєстраторів, на які діє наданий токен: повний токен бачить усі каси клієнта, обмежений — лише свої. Це разовий виклик під час налаштування інтеграції: усі інші маршрути адресують касу за її uuid, і взяти цей uuid більше ніде — фіскальний номер сторонній сервіс показує людині, а працює за id. Віддає лише те, чим касу впізнають і адресують. Поточний стан (зміна, лічильники, офлайн-бюджет) — за GET /cash-registers/{id}.

Відповіді

  • 200 Каси в межах токена, від найстаріших.
    Поле Тип Обовʼязковий Опис
    cash_registersarray<CashRegisterListItem>так
  • 401 Немає облікових даних, або вони недійсні, протерміновані чи відкликані. Error
GET /api/v1/cash-registers/{id} Bearer

Стан реєстратора (зміна, режим, лічильники)

Параметри

Параметр Тип Обовʼязковий Опис
id path string (uuid) так

Відповіді

  • 200 Поточний стан реєстратора. CashRegisterState
  • 401 Немає облікових даних, або вони недійсні, протерміновані чи відкликані. Error
  • 404 Конверт помилки. Error
POST /api/v1/cash-registers/{id}/shifts Bearer

Відкрити зміну (DOCTYPE 100; семантика завдання така сама, як у чеків)

Параметри

Параметр Тип Обовʼязковий Опис
id path string (uuid) так
Idempotency-Key header string так Ключ операції, який обирає клієнт. Повтор запиту з тим самим ключем поверне початкове завдання, а не виконає фіскальну операцію вдруге.
mode query string Режим доставки результату; має перевагу над однойменним полем у тілі. sync (типовий) чекає на результат у межах синхронного очікування; async одразу відповідає 202 і номером завдання, а результат приходить через GET /tasks/{id} та/або вебхуком.

Тіло запиту application/json · optional

Поле Тип Обовʼязковий Опис
cashierstring
modestringsyncasync

Відповіді

  • 201 Зміну відкрито. Task
  • 202 Ще виконується; статус — через GET /tasks/{id}. Task
  • 400 Конверт помилки. Error
  • 401 Немає облікових даних, або вони недійсні, протерміновані чи відкликані. Error
  • 404 Конверт помилки. Error
  • 422 Конверт помилки. Error
DELETE /api/v1/cash-registers/{id}/shifts/current Bearer

Закрити поточну зміну (Z-звіт і повідомлення про закриття однією операцією)

Параметри

Параметр Тип Обовʼязковий Опис
id path string (uuid) так
Idempotency-Key header string так Ключ операції, який обирає клієнт. Повтор запиту з тим самим ключем поверне початкове завдання, а не виконає фіскальну операцію вдруге.
mode query string Режим доставки результату; має перевагу над однойменним полем у тілі. sync (типовий) чекає на результат у межах синхронного очікування; async одразу відповідає 202 і номером завдання, а результат приходить через GET /tasks/{id} та/або вебхуком.

Відповіді

  • 201 Зміну закрито; у результаті — і Z-звіт, і документ закриття. Task
  • 202 Ще виконується; статус — через GET /tasks/{id}. Task
  • 400 Конверт помилки. Error
  • 401 Немає облікових даних, або вони недійсні, протерміновані чи відкликані. Error
  • 404 Конверт помилки. Error
  • 422 Конверт помилки. Error
POST /api/v1/cash-registers/{id}/offline-session/close Bearer

Примусово закрити активну офлайн-сесію (документ завершення сесії потрапляє до журналу одразу, а пакети досилаються у фоні)

Параметри

Параметр Тип Обовʼязковий Опис
id path string (uuid) так
Idempotency-Key header string так Ключ операції, який обирає клієнт. Повтор запиту з тим самим ключем поверне початкове завдання, а не виконає фіскальну операцію вдруге.
mode query string Режим доставки результату; має перевагу над однойменним полем у тілі. sync (типовий) чекає на результат у межах синхронного очікування; async одразу відповідає 202 і номером завдання, а результат приходить через GET /tasks/{id} та/або вебхуком.

Тіло запиту application/json · optional

Поле Тип Обовʼязковий Опис
cashierstring
modestringsyncasync

Відповіді

  • 201 Сесію закрито; у результаті — документ завершення. Task
  • 202 Ще виконується; статус — через GET /tasks/{id}. Task
  • 400 Конверт помилки. Error
  • 401 Немає облікових даних, або вони недійсні, протерміновані чи відкликані. Error
  • 404 Конверт помилки. Error
  • 422 Конверт помилки. Error
POST /api/v1/cash-registers/{id}/offline-session/retry Bearer

Відновити зупинене надсилання офлайн-пакетів (сервіс зупинив сесію після повторюваних непоправних відмов — спершу усуньте причину)

Параметри

Параметр Тип Обовʼязковий Опис
id path string (uuid) так

Відповіді

  • 200 Скільки сесій повернуто до надсилання.
    Поле Тип Обовʼязковий Опис
    resumed_sessionsintegerтак
  • 401 Немає облікових даних, або вони недійсні, протерміновані чи відкликані. Error
  • 404 Конверт помилки. Error
DELETE /api/v1/cash-registers/{id}/attention Bearer

Зняти позначку «потребує уваги» з реєстратора

Параметри

Параметр Тип Обовʼязковий Опис
id path string (uuid) так

Відповіді

  • 200 Чи справді було знято позначку.
    Поле Тип Обовʼязковий Опис
    clearedbooleanтак
  • 401 Немає облікових даних, або вони недійсні, протерміновані чи відкликані. Error
  • 404 Конверт помилки. Error
PUT /api/v1/cash-registers/{id}/cash-balance Bearer

Заявити, скільки готівки насправді в касі

Переставляє лічильник готівки на перераховану суму. Це те, що потрібно реєстратору, який приєднується до сервісу з непорожньою касою: лічильник стартує з нуля і не має звідки дізнатися початкову суму. Так само виправляють лічильник, який розійшовся з касою. Нічого фіскального не відбувається: заявлений залишок не потрапляє в жоден документ і не змінює підсумків зміни. Щоб зареєструвати готівку, яка справді рухається, надсилайте чек service_in або service_out. Заявлений залишок не може бути від'ємним — на відміну від самого лічильника, який чесно йде в мінус, коли зустрічає гроші, приходу яких не бачив.

Параметри

Параметр Тип Обовʼязковий Опис
id path string (uuid) так

Тіло запиту application/json

Поле Тип Обовʼязковий Опис
amountCashAmountтакПерерахований залишок; не може бути від'ємним.

Відповіді

  • 200 Лічильник після заяви. CashBalanceDeclaration
  • 400 Конверт помилки. Error
  • 401 Немає облікових даних, або вони недійсні, протерміновані чи відкликані. Error
  • 404 Конверт помилки. Error
  • 422 Конверт помилки. Error

Білінг

GET /api/v1/billing/usage Bearer

Передплачений баланс і підсумок тарифікації за період

Суми — копійки десятковим рядком, ніколи не числа з рухомою комою. Типовий період — поточний календарний місяць за UTC; межа to не включається. Чеки тарифікуються асинхронно після реєстрації, тож підсумок може відставати від останнього чека на кілька секунд. Період не може перевищувати 366 днів — ширший діапазон дає 422.

Параметри

Параметр Тип Обовʼязковий Опис
from query string (date)
to query string (date)

Відповіді

  • 200 Баланс і використання за період. BillingUsage
  • 401 Немає облікових даних, або вони недійсні, протерміновані чи відкликані. Error
  • 422 Конверт помилки. Error
GET /api/v1/invoices Bearer

Рахунки клієнта, від найновішого періоду

Рахунок — це підсумок одного розрахункового періоду, а не окремий платіж: на клієнта припадає один рядок за період, тож типова сторінка у 50 рахунків покриває роки щомісячної тарифікації.

Параметри

Параметр Тип Обовʼязковий Опис
limit query integer
offset query integer

Відповіді

  • 200 Рахунки клієнта.
    Поле Тип Обовʼязковий Опис
    invoicesarray<Invoice>так
  • 401 Немає облікових даних, або вони недійсні, протерміновані чи відкликані. Error
  • 422 Конверт помилки. Error

Вебхуки

GET /api/v1/webhooks Bearer

Перелік вебхуків клієнта (без секретів)

Відповіді

  • 200 Точки доставки клієнта.
    Поле Тип Обовʼязковий Опис
    webhooksarray<WebhookEndpoint>так
  • 401 Немає облікових даних, або вони недійсні, протерміновані чи відкликані. Error
POST /api/v1/webhooks Bearer

Зареєструвати вебхук (секрет HMAC показують рівно один раз)

Доставка — це POST з тілом {delivery_id, event, attempt, occurred_at, data} і заголовком X-Signature вигляду "sha256=<HMAC-SHA256 тіла у hex>", порахованим на секреті цієї точки доставки. Гарантія — «щонайменше один раз»: приймач має відкидати повтори за delivery_id. Події одного реєстратора приходять по порядку. Якщо secret не вказати, його згенерує сервер і поверне лише у цій відповіді.

Тіло запиту application/json

Поле Тип Обовʼязковий Опис
urlstringтакАбсолютний http(s)-URL приймача.
eventsarray<WebhookEvent>Події, на які підписані; порожній список або відсутнє поле означає всі події.task.completedtask.failedshift.openedshift.closedkey.expiringregister.offlineregister.onlineregister.offline_limitregister.remediatedregister.needs_attention
secretstringСекрет HMAC; якщо не вказати, згенерує сервер.

Відповіді

  • 201 Створено; секрет повертається рівно один раз.
    Поле Тип Обовʼязковий Опис
    idstring (uuid)так
    urlstringтак
    eventsarray<WebhookEvent>такПорожній список означає підписку на всі події.task.completedtask.failedshift.openedshift.closedkey.expiringregister.offlineregister.onlineregister.offline_limitregister.remediatedregister.needs_attention
    activebooleanтак
    created_atstring (date-time)так
    updated_atstring (date-time)так
    secretstringтакОтримати повторно неможливо.
  • 401 Немає облікових даних, або вони недійсні, протерміновані чи відкликані. Error
  • 422 Конверт помилки. Error
PATCH /api/v1/webhooks/{id} Bearer

Змінити URL, підписку або ознаку активності (часткове оновлення)

Параметри

Параметр Тип Обовʼязковий Опис
id path string (uuid) так

Тіло запиту application/json

Поле Тип Обовʼязковий Опис
urlstring
eventsarray<WebhookEvent>task.completedtask.failedshift.openedshift.closedkey.expiringregister.offlineregister.onlineregister.offline_limitregister.remediatedregister.needs_attention
activebooleanfalse призупиняє доставку, не втрачаючи черги.

Відповіді

  • 200 Оновлено. WebhookEndpoint
  • 401 Немає облікових даних, або вони недійсні, протерміновані чи відкликані. Error
  • 404 Конверт помилки. Error
  • 422 Конверт помилки. Error
DELETE /api/v1/webhooks/{id} Bearer

Видалити точку доставки (недоставлену чергу буде відкладено)

Параметри

Параметр Тип Обовʼязковий Опис
id path string (uuid) так

Відповіді

  • 204 Видалено.
  • 401 Немає облікових даних, або вони недійсні, протерміновані чи відкликані. Error
  • 404 Конверт помилки. Error
GET /api/v1/webhooks/{id}/deliveries Bearer

Історія доставок, від найновішої (status=dead — черга невдалих)

Параметри

Параметр Тип Обовʼязковий Опис
id path string (uuid) так
status query string
limit query integer

Відповіді

  • 200 Доставки.
    Поле Тип Обовʼязковий Опис
    deliveriesarray<WebhookDelivery>так
  • 401 Немає облікових даних, або вони недійсні, протерміновані чи відкликані. Error
  • 404 Конверт помилки. Error
  • 422 Конверт помилки. Error
POST /api/v1/webhooks/{id}/deliveries/{deliveryId}/replay Bearer

Повернути доставку в чергу з новим запасом спроб (зазвичай — невдалу)

Параметри

Параметр Тип Обовʼязковий Опис
id path string (uuid) так
deliveryId path string (uuid) так

Відповіді

  • 200 Повернуто в чергу; пізніші події того самого реєстратора зачекають на неї — порядок зберігається й після повтору. WebhookDelivery
  • 401 Немає облікових даних, або вони недійсні, протерміновані чи відкликані. Error
  • 404 Конверт помилки. Error
  • 409 Саме зараз триває спроба доставки. Error

Схеми даних

Обʼєкти, на які посилаються ендпоінти довідника. Обовʼязкові поля позначено «так».

Error object

Поле Тип Обовʼязковий Опис
codestringтак
messagestringтак
detailsany

CashRegisterState object

Поле Тип Обовʼязковий Опис
idstring (uuid)так
fiscal_numberstringтак
local_numberstringтак
modestringтакproductiontest
statestringтакclosedopenedoffline
offline_readybooleanЧи має реєстратор видані ДПС офлайн-реквізити (приходять із квитанцією на відкриття зміни).
shift_modeShiftModeЯк керують змінами реєстратора. manual — клієнт відкриває і закриває їх через API, автоматично не відбувається нічого. round_the_clock — реєстратор не припиняє продавати: зміна закривається в кожен із shift_close_times, а наступний чек відкриває нову. working_hours — денне вікно, задане двома межами у shift_close_times. В обох керованих режимах зміну відкриває перший же чек, тож жоден продаж не втрачається через закритий реєстратор.
shift_close_timesShiftCloseTimesЧас щоденного закриття зміни за київським часом. Порожній рівно тоді, коли shift_mode — manual. Часи прив'язані до годинника, тож реєстратор, який відкрився за секунду після закриття, все одно закриється в той самий час, що й щодня, а не поповзе. Потрібно щонайменше два значення з проміжком не більше 18 годин (рахуючи через опівніч): зміна триває стільки, скільки лишилося до наступного закриття, а решта законодавчої доби — це єдиний запас, у якому можна повторити невдале закриття. working_hours містить рівно два — початок і кінець дня, саме в цьому порядку, щоб вікно через опівніч ("08:00", потім "02:00") зберігало напрямок. Обидва є точками закриття: денна зміна завершується в кінці вікна, а чек, що прийшов у неробочий час, усе одно відкриє зміну (у продажу ніколи не відмовляють), і вона закриється з початком наступного дня. round_the_clock приймає два або більше значень за зростанням.
cash_balanceCashBalanceСкільки готівки в касі реєстратора. Це лічильник, а не налаштування і не фіскальна величина: він стартує з нуля при створенні реєстратора і бачить лише ті документи, що пройшли через цей сервіс. Рухають його готівкові рядки оплат — додають на реалізації, віднімають на поверненні та сторно — і службові документи. Картка не рухає нічого: через касу фізично нічого не проходить. Решта вже врахована, бо береться sum рядка оплати, а не provided. Лічильник живе на реєстраторі, а не на зміні, бо готівка переживає Z-звіт: торговельний автомат закривається двічі на добу і тримає свої монети, доки по них не приїдуть. Значення може бути від'ємним, і ніщо цьому не заважає. Гроші лежали в касі ще до того, як сервіс побачив бодай один документ, тож перша інкасація цих грошей — цілком законна операція. Від'ємне значення саме по собі корисний сигнал: у касі було більше, ніж ми знали. Щоб переставити лічильник на справжню суму, скористайтеся PUT .../cash-balance.
current_shiftobject
idstring (uuid)
numberinteger (int64)Наскрізний номер зміни в межах каси («Зміна №147»). Присвоюється локально: ДПС номера зміни не видає.
statusstringopeningopenedclosingclosed
testingboolean
opened_atstring (date-time)
documentsintegerСкільки документів створила зміна — усіх видів, а не лише розрахункових, які рахують підсумки: сповіщення про відкриття, чеки, рухи готівки. Відсутнє, якщо порахувати не вдалося (нуля, якого в зміні немає, тут не буває).
shift_totalsShiftTotalsПоточні підсумки відкритої зміни — те саме накопичення, з якого потім буде побудований Z-звіт. Сервіс складає його чек за чеком у тій самій транзакції, що реєструє документ, тож розійтися з журналом він не може. Сторно віднімається з боку реалізації, а не додається до повернень. Службові внесення й видачі не належать до жодного боку — ДПС тримає їх в окремих полях, і Z-звіт робить так само. Розклад за податковими літерами тут не віддається навмисно: він найширша частина підсумків і належить Z-звіту, а цей об'єкт їде у відповіді про стан, яку панель опитує кожні кілька секунд.
offline_sessionobjectПрисутня, поки реєстратор працює офлайн.
idstring (uuid)
dps_session_idinteger (int64)
started_atstring (date-time)
documentsinteger (int64)
last_significant_atstring (date-time)
offline_limitsobjectтакЗаконодавчі межі офлайн-роботи в секундах: 36 годин на одну сесію і 168 годин на календарний місяць. Скільки лишилося в сесії, рахують від offline_session.started_at, а скільки лишилося на місяць — від offline_month_used_seconds.
session_secondsinteger (int64)так
month_secondsinteger (int64)так
offline_month_used_secondsinteger (int64)Час, відпрацьований офлайн у цьому календарному місяці (за київським часом).
attentionobjectПрисутня, коли сервіс позначив реєстратор як такий, що потребує уваги (див. CashRegister.attention_reason). Знімається через DELETE .../attention; якщо зупинилося надсилання офлайн-пакетів, його додатково відновлюють через POST .../offline-session/retry.
reasonstringтакrecurring_remediationoffline_submission_pausedauto_close_failing
sincestring (date-time)

ShiftMode string

Як керують змінами реєстратора. manual — клієнт відкриває і закриває їх через API, автоматично не відбувається нічого. round_the_clock — реєстратор не припиняє продавати: зміна закривається в кожен із shift_close_times, а наступний чек відкриває нову. working_hours — денне вікно, задане двома межами у shift_close_times. В обох керованих режимах зміну відкриває перший же чек, тож жоден продаж не втрачається через закритий реєстратор.

manualround_the_clockworking_hours

ShiftCloseTimes array

Час щоденного закриття зміни за київським часом. Порожній рівно тоді, коли shift_mode — manual. Часи прив'язані до годинника, тож реєстратор, який відкрився за секунду після закриття, все одно закриється в той самий час, що й щодня, а не поповзе. Потрібно щонайменше два значення з проміжком не більше 18 годин (рахуючи через опівніч): зміна триває стільки, скільки лишилося до наступного закриття, а решта законодавчої доби — це єдиний запас, у якому можна повторити невдале закриття. working_hours містить рівно два — початок і кінець дня, саме в цьому порядку, щоб вікно через опівніч ("08:00", потім "02:00") зберігало напрямок. Обидва є точками закриття: денна зміна завершується в кінці вікна, а чек, що прийшов у неробочий час, усе одно відкриє зміну (у продажу ніколи не відмовляють), і вона закриється з початком наступного дня. round_the_clock приймає два або більше значень за зростанням.

CashRegisterListItem object

Каса так, як її показує перелік токена: чим її впізнає людина (фіскальний і локальний номер, точка) і чим її адресує машина (id).

Поле Тип Обовʼязковий Опис
idstring (uuid)такІдентифікатор каси в цьому API — те саме значення, що йде в cash_register_id чека і в {id} решти маршрутів.
fiscal_numberstringтак
local_numberstringтакCASHDESKNUM: власний номер каси у клієнта.
org_namestring
point_namestring
point_addressstring
modestringтакproductiontest
statestringтакclosedopenedoffline

Task object

Поле Тип Обовʼязковий Опис
task_idstring (uuid)так
typestringтакreceiptopen_shiftclose_shiftclose_offline_sessionverify_keysync_registerdps_objects
statusstringтакpendingprocessingsucceededfailed
created_atstring (date-time)так
finished_atstring (date-time)
errorstring
faultFaultСтруктурований опис збою завдання: стабільний код із простором імен (dps.* — відмовив фіскальний сервер; fiscal.* — валідація документа; signer.* — рівень КЕП; state.* — стан реєстратора), клас реакції, параметри для підстановки, повідомлення мовою з Accept-Language (типово українською), дослівний текст ДПС і автоматичні виправлення, застосовані до завершення завдання.
resultTaskResultРезультати фіскальних операцій (prro_id/shift_id/testing/*) стосуються завдань на чек, зміну та офлайн-сесію; key_verification — єдиний результат завдання verify_key, решти полів у ньому немає.

Fault object

Структурований опис збою завдання: стабільний код із простором імен (dps.* — відмовив фіскальний сервер; fiscal.* — валідація документа; signer.* — рівень КЕП; state.* — стан реєстратора), клас реакції, параметри для підстановки, повідомлення мовою з Accept-Language (типово українською), дослівний текст ДПС і автоматичні виправлення, застосовані до завершення завдання.

Поле Тип Обовʼязковий Опис
codestringтакСтабільний ідентифікатор, напр. dps.check_local_number_invalid.
classstringтакresyncconfigprecursoruser_actiontransientrequestinternal
paramsobject
messagestringТекст для людини, локалізований із каталогу помилок.
upstream_messagestringДослівне повідомлення фіскального сервера.
remediationarray<string>Автоматичні виправлення, застосовані під час обробки завдання.local_number_syncedshift_adoptedshift_abandonedzreport_recoveredregister_config_filled

TaskResult object

Результати фіскальних операцій (prro_id/shift_id/testing/*) стосуються завдань на чек, зміну та офлайн-сесію; key_verification — єдиний результат завдання verify_key, решти полів у ньому немає.

Поле Тип Обовʼязковий Опис
prro_idstring (uuid)
shift_idstring (uuid)
shift_numberinteger (int64)Наскрізний номер зміни в межах каси. Присвоюється локально: ДПС номера зміни не видає (у квитанції такого поля немає).
testingboolean
receiptDocResult
shift_openDocResult
zreportDocResult
shift_closeDocResult
offline_endDocResult
key_verificationKeyVerificationResult
key_password_checkKeyPasswordCheckResultНаслідок швидкої локальної перевірки пароля контейнера (TaskVerifyPassword), яку кабінет проганяє синхронно під час завантаження ключа: контейнер лише розшифровується, без CMP і без мережі, щоб хибний пароль повертався формі за мілісекунди, а не аж після повної асинхронної перевірки. Завдання ВВАЖАЄТЬСЯ УСПІШНИМ у тому числі при ok=false — воно дійшло до вердикту. Інфраструктурні збої (БД, KEK, слот підпису) вердиктом не є: там завдання повторюється.
reconcileReconcileReportПідсумок звіряння реєстратора з ДПС (sync_register): який стан побачили на боці сервера і що виправили в себе.
dps_objectsarray<DPSTaxObject>

ReconcileReport object

Підсумок звіряння реєстратора з ДПС (sync_register): який стан побачили на боці сервера і що виправили в себе.

Поле Тип Обовʼязковий Опис
fiscal_numberstringтак
dps_shift_openedbooleanтак
dps_next_local_numberinteger (int64)так
dps_testingboolean
counter_oldinteger (int64)
counter_newinteger (int64)
shift_adoptedboolean
shift_abandonedboolean
cashobjectЗвіряння каси. Присутнє лише тоді, коли на сервері справді триває зміна: скільки готівки ця зміна зрушила за нашим підрахунком — поруч із тією самою величиною, виведеною з підсумків зміни на боці ДПС. Це довідка, за нею нічого не виправляється автоматично. Показник ДПС охоплює одну зміну, а cash_balance — усе життя реєстратора, і розбіжність не каже, чия сторона помиляється: документ, який на цьому ПРРО зареєструвало інше програмне забезпечення, тут невидимий, а там порахований. Вирішує людина.
oursCashAmountтакГривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках. На відміну від Money, який рахує копійки і належить тарифікації.
dpsCashAmountтакГривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках. На відміну від Money, який рахує копійки і належить тарифікації.
matchbooleanтак
skippedstringЧому нічого не чіпали (офлайн-сесію звіряння не торкається).offline_session

DPSTaxObject object

Одна господарська одиниця власника ключа (dps_objects).

Поле Тип Обовʼязковий Опис
namestringтак
addressstring
tinstringтак
ipnstring
org_namestringтак
registrarsarray<DPSRegistrar>так

DPSRegistrar object

Один ПРРО, зареєстрований за господарською одиницею.

Поле Тип Обовʼязковий Опис
fiscal_numberstringтак
local_numberstringтак
namestring
closedboolean

KeyPasswordCheckResult object

Наслідок швидкої локальної перевірки пароля контейнера (TaskVerifyPassword), яку кабінет проганяє синхронно під час завантаження ключа: контейнер лише розшифровується, без CMP і без мережі, щоб хибний пароль повертався формі за мілісекунди, а не аж після повної асинхронної перевірки. Завдання ВВАЖАЄТЬСЯ УСПІШНИМ у тому числі при ok=false — воно дійшло до вердикту. Інфраструктурні збої (БД, KEK, слот підпису) вердиктом не є: там завдання повторюється.

Поле Тип Обовʼязковий Опис
signing_key_idstring (uuid)так
okbooleanтак
verify_codestringПрисутній завжди при ok=false (напр. wrong_password).
verify_errorstring

KeyVerificationResult object

Поле Тип Обовʼязковий Опис
signing_key_idstring (uuid)такВказує, який ключ перевіряли. Якщо deleted істинне, цей ідентифікатор більше ні на що не вказує — запис видалено.
statusstringтакactiveinvalid
verify_codestringwrong_passwordcert_not_foundcert_expirednot_prroverify_failedca_unreachable
verify_errorstring
key_typestringindividuallegal
prro_capablebooleanтак
cert_subjectstring
org_namestringНазва організації (або ім'я особи) власника з сертифіката.
edrpoustringЄДРПОУ юридичної особи з сертифіката, лише цифри.
drfostringРНОКПП (ДРФО) фізичної особи з сертифіката, лише цифри.
deletedbooleanЗапис ключа остаточно видалено (так відбувається при будь-якому відхиленні, крім not_prro): недійсний ключ у базі не лишається.

DocResult object

Поле Тип Обовʼязковий Опис
document_idstring (uuid)так
local_numberintegerтак
fiscal_numberstringтакПрисвоєний фіскальним сервером ДПС.
offlinebooleanДокумент підписано в межах офлайн-сесії. Його фіскальний номер обчислено локально (<sid>.<n>.<crc>), і на фіскальному сервері він з'явиться лише після надсилання пакета сесії.
receipt_urlstring (uri)Копія чека для покупця на короткому домені сервісу (https://r.prro.cloud/<код>) — те, що інтеграція пересилає листом або перетворює на QR. Сторінка відкривається без авторизації: код і є доступом, як паперовий чек у кишені. Формат обирає параметр запиту: ?format=html (типово), text або qr (PNG із адресою цієї ж сторінки). Це подання чека, а не доказ фіскалізації: доказ — fiscal_number і посилання tax_url поруч із ним. Присутнє лише в розрахункових документів: тільки вони мають друковану форму.
tax_urlstring (uri)Той самий документ у кабінеті платника податків — незалежне підтвердження, яке читач перевіряє, не довіряючи нам. Відсутнє, доки документ не потрапив на фіскальний сервер: у офлайн-чека до надсилання пакета сесії є лише локально обчислений номер, і посилання за ним нічого не знайде.

ReceiptInput oneOf

Чек буває двох форм, які розрізняє поле type. Розрахунок за товари несе позиції та оплати; рух готівки — лише суму, і більше нічого. Сам документ саме такий тонкий: заголовок і CHECKTOTAL/SUM. Поля чужої форми не ігноруються, а відхиляються з 422. Службовий документ, зібраний із позиціями, був би цілком дійсним чеком, який мовчки викинув ці позиції, — тому сервіс радше відмовить, ніж зареєструє не те, що ви мали на увазі.

Одна з форм розрізняє поле: type

SettlementReceiptInput object

Розрахунок за товари — реалізація, повернення або сторно.

Поле Тип Обовʼязковий Опис
cash_register_idstring (uuid)Реєстратор. Обов'язковий для POST /api/v1/receipts, де тіло — вся адреса запиту. Кабінетний маршрут бере реєстратор з URL: там поле або відсутнє, або збігається з ним, інакше 422.
typestringтакsalereturnstorno
cashierstring
commentstringВільна примітка, яку друкують на самому документі (CHECKHEAD/COMMENT) — наприклад номер замовлення.
modestringРежим доставки результату; параметр запиту ?mode= має перевагу над цим полем.syncasync
originalobjectЗв'язок із початковим чеком; обов'язковий для повернення та сторно.
fiscal_numberstringтак
register_fiscal_numberstringДля повернень, оформлених на іншому реєстраторі.
datestring (date)У форматі РРРР-ММ-ДД.
itemsarray<ReceiptItem>так
paymentsarray<ReceiptPayment>так
rounding_stepstringКрок заокруглення готівки десятковим рядком ("0.10" за правилами НБУ); без цього поля заокруглення не застосовується.

ServiceReceiptInput object

Готівка, що проходить через касу повз продаж: service_in — службове внесення (DOCSUBTYPE 2), service_out — службова видача, тобто інкасація (DOCSUBTYPE 4). Це так само розрахунковий документ, тож він тягне за собою весь звичайний шлях чека: автоматичне відкриття зміни в керованих режимах, офлайн-сесію з ланцюжком хешів, журнал і тарифікацію як за чек. У підсумках зміни він не чіпає ні реалізації, ні повернення: сума накопичується окремо в service_input/service_output і потрапляє до ZREPBODY Z-звіту — так само, як веде свої підсумки ДПС. Залишок готівки реєстратора (cash_balance) він зсуває на всю свою суму. Підтип 3 (отримання підкріплення) не підтримується: це валютний документ (DOCTYPE 2) обмінних пунктів і ПТКС.

Поле Тип Обовʼязковий Опис
cash_register_idstring (uuid)Реєстратор. Обов'язковий для POST /api/v1/receipts, де тіло — вся адреса запиту. Кабінетний маршрут бере реєстратор з URL: там поле або відсутнє, або збігається з ним, інакше 422.
typestringтакservice_inservice_out
cashierstring
commentstringВільна примітка, яку друкують на самому документі (CHECKHEAD/COMMENT). Для руху готівки це єдине місце, де сказано, за що гроші — «Інкасація», «Розмінна монета».
modestringРежим доставки результату; параметр запиту ?mode= має перевагу над цим полем.syncasync
sumstringтакСума руху — додатний десятковий рядок, до 2 знаків після коми. Це весь документ: підсумовувати тут нічого, позицій немає.

ReceiptItem object

Грошові величини — десяткові рядки ("259.90"); кількість допускає до 3 знаків після коми, ціни — до 2.

Поле Тип Обовʼязковий Опис
codestring
barcodestring
uktzedstring
dkppstringВзаємовиключний з uktzed.
namestringтак
unit_codeinteger
unit_namestring
quantitystringтак
pricestringтак
tax_lettersstringПодаткові літери з tax_rates реєстратора, напр. "А" або "АГ". Порожнє значення застосовує default_tax_letter реєстратора (а якщо типової літери немає — позиція лишається без податку); "-" примусово робить позицію неоподаткованою попри типову літеру.
discountobject
percentstringПозначає відсоткову знижку; суму все одно вказують у sum.
sumstringтак
excise_labelsarray<string>
commentstring

PaymentType string

Форма оплати. Фіскальний код і назву, які потраплять у чек, визначає сервіс: cash — 0 ГОТІВКА, card — 301 КАРТКА, certificate — 305 СЕРТИФІКАТ, bank_transfer — 306 ПЕРЕКАЗ З ПОТОЧНОГО РАХУНКУ, direct_debit — 100000 ПРЯМИЙ ДЕБЕТ. Через касу фізично проходить лише cash — саме вона рухає залишок готівки реєстратора. Решта форм на лічильник готівки не впливає.

cashcardcertificatebank_transferdirect_debit

ReceiptPayment object

Поле Тип Обовʼязковий Опис
typePaymentTypeтакФорма оплати. Фіскальний код і назву, які потраплять у чек, визначає сервіс: cash — 0 ГОТІВКА, card — 301 КАРТКА, certificate — 305 СЕРТИФІКАТ, bank_transfer — 306 ПЕРЕКАЗ З ПОТОЧНОГО РАХУНКУ, direct_debit — 100000 ПРЯМИЙ ДЕБЕТ. Через касу фізично проходить лише cash — саме вона рухає залишок готівки реєстратора. Решта форм на лічильник готівки не впливає.
sumstringтак
providedstringОтримано готівкою; решта = provided − sum.
cardobject
system_namestring
acquirer_namestring
transaction_datestring (date-time)
transaction_numberstring
device_idstring
epz_detailsstringЗамаскований номер картки.
auth_codestring

WebhookEvent string

task.completed і task.failed повідомляють про кожне завершене завдання; shift.opened і shift.closed — похідні події життєвого циклу зміни; key.expiring попереджає про сертифікати ключів, що спливають протягом 30 днів, раз на добу для кожного ключа; register.offline/register.online/register.offline_limit стежать за офлайн-сесіями та законними межами їх тривалості (36 та 168 годин); register.remediated повідомляє про кожне автоматичне усунення розбіжності між реєстратором і ДПС; register.needs_attention спрацьовує, коли виправлення не тримаються (повторювані усунення, зупинене надсилання офлайн-пакетів) і на реєстратор має поглянути людина.

task.completedtask.failedshift.openedshift.closedkey.expiringregister.offlineregister.onlineregister.offline_limitregister.remediatedregister.needs_attention

WebhookEndpoint object

Поле Тип Обовʼязковий Опис
idstring (uuid)так
urlstringтак
eventsarray<WebhookEvent>такПорожній список означає підписку на всі події.task.completedtask.failedshift.openedshift.closedkey.expiringregister.offlineregister.onlineregister.offline_limitregister.remediatedregister.needs_attention
activebooleanтак
created_atstring (date-time)так
updated_atstring (date-time)так

WebhookDelivery object

Поле Тип Обовʼязковий Опис
idstring (uuid)так
eventstringтакТип події доставки. Крім значень WebhookEvent, доставка може нести зарезервовані типи, на які не можна підписатися: webhook.ping (тестова відправка) та system.dps_* (події доступності ДПС).
statusstringтакpendingdeliveringdeliveredfaileddead
attemptsintegerтак
cash_register_idstring (uuid)
dataanyтакКорисне навантаження події (поле data конверта).
last_errorstring
next_attempt_atstring (date-time)
created_atstring (date-time)так
delivered_atstring (date-time)

Money string

Копійки десятковим рядком (numeric(14,4)); ніколи не число з рухомою комою.

CashAmount string

Гривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках. На відміну від Money, який рахує копійки і належить тарифікації.

CashBalance object

Скільки готівки в касі реєстратора. Це лічильник, а не налаштування і не фіскальна величина: він стартує з нуля при створенні реєстратора і бачить лише ті документи, що пройшли через цей сервіс. Рухають його готівкові рядки оплат — додають на реалізації, віднімають на поверненні та сторно — і службові документи. Картка не рухає нічого: через касу фізично нічого не проходить. Решта вже врахована, бо береться sum рядка оплати, а не provided. Лічильник живе на реєстраторі, а не на зміні, бо готівка переживає Z-звіт: торговельний автомат закривається двічі на добу і тримає свої монети, доки по них не приїдуть. Значення може бути від'ємним, і ніщо цьому не заважає. Гроші лежали в касі ще до того, як сервіс побачив бодай один документ, тож перша інкасація цих грошей — цілком законна операція. Від'ємне значення саме по собі корисний сигнал: у касі було більше, ніж ми знали. Щоб переставити лічильник на справжню суму, скористайтеся PUT .../cash-balance.

Поле Тип Обовʼязковий Опис
amountCashAmountтакГривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках. На відміну від Money, який рахує копійки і належить тарифікації.
as_ofstring (date-time)Коли залишок рухався востаннє. Null означає, що його ще ніщо не рухало, — тоді нуль читається як «ми ще нічого не бачили», а не «каса порожня».

ShiftTotalsSide object

Один бік підсумків зміни — реалізація або повернення: скільки розрахунків прийнято і на яку суму, з розкладом за засобами оплати.

Поле Тип Обовʼязковий Опис
countintegerтакКількість розрахункових документів цього боку.
sumCashAmountтакГривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках. На відміну від Money, який рахує копійки і належить тарифікації.
pay_formsarray<object>Накопичено за засобами оплати. code/name — це пара PAYFORMCD / PAYFORMNM, яка піде в Z-звіт; масиву немає, поки бік порожній.
codeintegerтак
namestringтак
sumCashAmountтакГривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках. На відміну від Money, який рахує копійки і належить тарифікації.

ShiftTotals object

Поточні підсумки відкритої зміни — те саме накопичення, з якого потім буде побудований Z-звіт. Сервіс складає його чек за чеком у тій самій транзакції, що реєструє документ, тож розійтися з журналом він не може. Сторно віднімається з боку реалізації, а не додається до повернень. Службові внесення й видачі не належать до жодного боку — ДПС тримає їх в окремих полях, і Z-звіт робить так само. Розклад за податковими літерами тут не віддається навмисно: він найширша частина підсумків і належить Z-звіту, а цей об'єкт їде у відповіді про стан, яку панель опитує кожні кілька секунд.

Поле Тип Обовʼязковий Опис
realizShiftTotalsSideтакОдин бік підсумків зміни — реалізація або повернення: скільки розрахунків прийнято і на яку суму, з розкладом за засобами оплати.
returnShiftTotalsSideтакОдин бік підсумків зміни — реалізація або повернення: скільки розрахунків прийнято і на яку суму, з розкладом за засобами оплати.
service_inCashAmountтакГривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках. На відміну від Money, який рахує копійки і належить тарифікації.
service_outCashAmountтакГривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках. На відміну від Money, який рахує копійки і належить тарифікації.

CashBalanceDeclaration object

Підсумок заяви про залишок: скільки лічильник показував, скільки показує тепер і поправка між ними. Дивитися варто саме на поправку — це те, наскільки наш підрахунок розійшовся з касою.

Поле Тип Обовʼязковий Опис
amountCashAmountтакГривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках. На відміну від Money, який рахує копійки і належить тарифікації.
previousCashAmountтакГривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках. На відміну від Money, який рахує копійки і належить тарифікації.
adjustmentCashAmountтакГривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках. На відміну від Money, який рахує копійки і належить тарифікації.

BillingUsage object

Поле Тип Обовʼязковий Опис
balanceMoneyтакКопійки десятковим рядком (numeric(14,4)); ніколи не число з рухомою комою.
soft_limitMoneyтакНижня межа балансу: поки balance < soft_limit, чеки заблоковані.
blockedbooleanтак
periodobjectтак
fromstring (date)так
tostring (date)такНе включно.
receiptsinteger (int64)такКількість тарифікованих чеків за період.
chargedMoneyтакКопійки десятковим рядком (numeric(14,4)); ніколи не число з рухомою комою.
tariffobjectтак
plan_idstring (uuid)так
price_per_receiptMoneyтакКопійки десятковим рядком (numeric(14,4)); ніколи не число з рухомою комою.

Invoice object

Поле Тип Обовʼязковий Опис
idstring (uuid)так
period_startstring (date)так
period_endstring (date)такВключно.
amountMoneyтакКопійки десятковим рядком (numeric(14,4)); ніколи не число з рухомою комою.
currencystringтак
statusstringтакdraftissuedpaidoverdue
created_atstring (date-time)так

DPSStatus object

Знімок супервізора доступності ДПС плюс агрегати парку. Ефективний режим (effective) — це відповідь, на яку реагує конвеєр.

Поле Тип Обовʼязковий Опис
verdictstringтакДумка детектора незалежно від override.onlinedegradedoffline
overridestringтакРучний режим оператора.noneforced_offlineforced_online
effectivestringтакПідсумковий операційний режим (override переважає вердикт).onlineoffline
manualbooleanтакЧи діє зараз ручний override.
sincestring (date-time)так
override_reasonstring
override_bystring
override_expiresstring (date-time)Коли TTL override повертає режим у auto (якщо заданий).
last_probe_atstring (date-time)
last_ok_atstring (date-time)
last_errorstring
flap_countintegerтакПереходи у поточному вікні flap-damping.
probe_latency_msinteger (int64)
clock_drift_msinteger (int64)
tunablesobjectПороги, за якими судять числа вище (те саме, що у DPSPulse): ширина вікна, поріг degraded і крок перевірок.
window_secondsinteger (int64)
degraded_latency_msinteger (int64)
probe_interval_secondsinteger (int64)
windowobjectтакВікно детектора цієї репліки (по реальних викликах ДПС).
samplesintegerтак
failuresintegerтак
degradedbooleanтак
latency_msinteger (int64)так
by_classobject
offline_registersintegerтакКас, що зараз в офлайн-сесії.
oldest_offline_age_secondsinteger (int64)так