PRRO.cloud

OpenAPI v0.2.2

Документація 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, доки баланс не поповнено. Операції зі змінами при цьому доступні. Перед тим приходить вебхук client.balance_low — єдине попередження, що кошти добігають кінця: у data баланс, мʼякий ліміт, ціна чека і скільки чеків лишилося.

  • Час продажу.

    Якщо ваша інтеграція дійшла до нас пізніше за касу (автомат, що годину тримав замовлення в черзі), передайте sold_at — і на чеку зʼявиться окремий рядок «Продаж від 03.09.2026 18:11», перед приміткою comment, якщо вона є. Фіскальним часом документа він не стає: ДПС приймає його лише в межах хвилини від власного годинника, тож документ завжди позначено моментом подання. Час у майбутньому або старіший за 31 день — 422.

  • Форма оплати й засіб.

    payments[].type — одна з форм, закритих законом (cash, card, certificate, bank_transfer, direct_debit); фіскальний код і назву за неї підставляє сервіс. Коли надрукувати треба точніше — «ПЕРЕКАЗ З КАРТКИ», талон, сертифікат мережі — назву задає payments[].means, а код форми лишається за type, тож лічильник готівки та розбивка Z-звіту не розходяться з чеком. Реквізити еквайрингу (ідентифікатор і податковий номер еквайра, платіжний пристрій, код авторизації, комісія) — у payments[].card.

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

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

{
  "task_id": "0197a2c1-…",
  "type": "receipt",
  "status": "succeeded",
  "result": {
    "receipt": {
      "document_id": "0197a2c3-…",
      "local_number": 42,
      "fiscal_number": "7466800082",
      "register_fiscal_number": "4001063533",
      "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 (типово), png (сам чек картинкою завширшки 576 px — це растрова ширина стрічки 80 мм, тож на термопринтер вона йде як є, разом із QR) і qr (PNG з адресою цієї ж сторінки). Назовні віддається лише людиночитаний чек — ні XML, ні CMS, ні квитанції ДПС. Невідомий код і документ, який не можна показати, відповідають однаково — 404.

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

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

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

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

  • register_fiscal_number — ФН ПРРО.

    Фіскальний номер каси, на якій видано документ, — той самий «ФН ПРРО», що друкується на чеку. Присутній завжди й однаковий у будь-якому режимі, на відміну від fiscal_number. Це те, за чим інтеграція зіставляє свої записи з касою: діставати номер із параметра fn= посилання tax_url не треба — саме його в офлайн-документа й немає.

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

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

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

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

Вебхуки

Замість опитування задач підпишіться на події: зареєструйте endpoint через POST /api/v1/webhooks — і сервіс сам постукає у ваш бекенд.

  • Події.

    Завдання — 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 (виправлення не тримаються — на касу має поглянути людина). Баланс — client.balance_low (передплачених коштів лишилося менше ніж на поріг чеків); ця подія стосується клієнта, а не каси, тож cash_register_id у ній немає.

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

    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такТег збірки: dev у локальній збірці, інакше версія релізу.
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 віддає 202 одразу. Idempotency-Key обов'язковий: повтор із тим самим ключем повертає те саме завдання, а не реєструє другий чек.

Параметри

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

Тіло запиту 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)

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

Відповіді

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

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

Параметри

Параметр Тип Обовʼязковий Опис
id path string (uuid) так Ідентифікатор каси — uuid із GET /api/v1/cash-registers.

Відповіді

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

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

Параметри

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

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

Поле Тип Обовʼязковий Опис
cashierstringІм'я касира, яке друкують у документі відкриття зміни.
modestringРежим доставки результату; параметр запиту ?mode= має перевагу над цим полем.syncasync

Відповіді

  • 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) так Ідентифікатор каси — uuid із GET /api/v1/cash-registers.
Idempotency-Key header string так Ключ операції, який обирає клієнт. Повтор запиту з тим самим ключем поверне початкове завдання, а не виконає фіскальну операцію вдруге.
mode query string Режим доставки результату; має перевагу над однойменним полем у тілі. sync (типовий) чекає на результат у межах синхронного очікування; async одразу віддає 202 і номер завдання.

Відповіді

  • 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) так Ідентифікатор каси — uuid із GET /api/v1/cash-registers.
Idempotency-Key header string так Ключ операції, який обирає клієнт. Повтор запиту з тим самим ключем поверне початкове завдання, а не виконає фіскальну операцію вдруге.
mode query string Режим доставки результату; має перевагу над однойменним полем у тілі. sync (типовий) чекає на результат у межах синхронного очікування; async одразу віддає 202 і номер завдання.

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

Поле Тип Обовʼязковий Опис
cashierstringІм'я касира, яке друкують у документі завершення сесії.
modestringРежим доставки результату; параметр запиту ?mode= має перевагу над цим полем.syncasync

Відповіді

  • 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) так Ідентифікатор каси — uuid із GET /api/v1/cash-registers.

Відповіді

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

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

Параметри

Параметр Тип Обовʼязковий Опис
id path string (uuid) так Ідентифікатор каси — uuid із GET /api/v1/cash-registers.

Відповіді

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

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

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

Параметри

Параметр Тип Обовʼязковий Опис
id path string (uuid) так Ідентифікатор каси — uuid із GET /api/v1/cash-registers.

Тіло запиту 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) Початок періоду, включно (дата за UTC); типово — перше число поточного місяця.
to query string (date) Кінець періоду, не включно; типово — перше число наступного місяця. Понад 366 днів — 422.

Відповіді

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

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

Рахунок — підсумок одного розрахункового періоду, а не окремий платіж: один рядок на період.

Параметри

Параметр Тип Обовʼязковий Опис
limit query integer Скільки рахунків повернути: 1–200, типово 50.
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. Події одного реєстратора приходять по порядку.

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

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

Відповіді

  • 201 Створено; секрет повертається рівно один раз.
    Поле Тип Обовʼязковий Опис
    idstring (uuid)такІдентифікатор вебхука.
    urlstringтакАбсолютний http(s)-URL приймача.
    eventsarray<WebhookEvent>такПорожній список означає підписку на всі події.task.completedtask.failedshift.openedshift.closedkey.expiringregister.offlineregister.onlineregister.offline_limitregister.remediatedregister.needs_attentionclient.balance_low
    activebooleanтакДоставка ввімкнена; false призупиняє її, не втрачаючи черги.
    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Новий абсолютний http(s)-URL приймача.
eventsarray<WebhookEvent>Новий перелік подій; порожній список означає всі.task.completedtask.failedshift.openedshift.closedkey.expiringregister.offlineregister.onlineregister.offline_limitregister.remediatedregister.needs_attentionclient.balance_low
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 Скільки доставок повернути: 1–200, типово 50.

Відповіді

  • 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)такІдентифікатор каси в цьому API — те саме значення, що cash_register_id чека.
fiscal_numberstringтакФіскальний номер ПРРО, присвоєний ДПС, — «ФН ПРРО» на чеку.
local_numberstringтакCASHDESKNUM: власний номер каси у клієнта.
modestringтакproduction — бойовий режим; test — документи позначені як тестові.productiontest
statestringтакclosed — зміна закрита; opened — відкрита; offline — триває офлайн-сесія.closedopenedoffline
offline_readybooleanЧи має реєстратор видані ДПС офлайн-реквізити (приходять із квитанцією на відкриття зміни).
shift_modeShiftModeЯк керують змінами реєстратора. manual — клієнт відкриває і закриває їх сам. round_the_clock — зміна закривається в кожен із shift_close_times, наступний чек відкриває нову. working_hours — денне вікно, задане двома межами у shift_close_times. В обох керованих режимах зміну відкриває перший же чек.
shift_close_timesShiftCloseTimesЧас щоденного закриття зміни за київським часом; порожній рівно тоді, коли shift_mode — manual. Часи прив'язані до годинника, а не до моменту відкриття зміни, тож точка закриття не повзе. Потрібно щонайменше два значення з проміжком не більше 20 годин (рахуючи через опівніч). round_the_clock приймає два або більше за зростанням; working_hours — рівно два, початок і кінець дня саме в цьому порядку, щоб вікно через опівніч ("08:00", потім "02:00") зберігало напрямок.
cash_balanceCashBalanceСкільки готівки в касі реєстратора. Це лічильник, а не налаштування і не фіскальна величина: він стартує з нуля при створенні реєстратора і бачить лише документи, що пройшли через цей сервіс. Рухають його готівкові рядки оплат — додають на реалізації, віднімають на поверненні та сторно — і службові документи; безготівкові форми не рухають нічого. Береться sum рядка оплати, тож решта вже врахована. Лічильник живе на реєстраторі, а не на зміні: готівка переживає Z-звіт. Значення може бути від'ємним — це означає, що в касі було більше, ніж бачив сервіс. Переставити лічильник на справжню суму: PUT .../cash-balance.
current_shiftobjectЗміна, з якою каса працює зараз; після закриття поле зникає.
idstring (uuid)Ідентифікатор зміни.
numberinteger (int64)Наскрізний номер зміни в межах каси («Зміна №147»). Присвоюється локально: ДПС номера зміни не видає.
statusstringopening і closing — операція ще в роботі; opened і closed — завершена.openingopenedclosingclosed
testingbooleanЗміну відкрито на касі в режимі test — усі її документи тестові.
opened_atstring (date-time)Коли зміну відкрито.
documentsintegerСкільки документів створила зміна — усіх видів, не лише розрахункових. Відсутнє, якщо порахувати не вдалося.
shift_totalsShiftTotalsПоточні підсумки відкритої зміни — те саме накопичення, з якого буде побудований Z-звіт; сервіс складає його чек за чеком у тій самій транзакції, що реєструє документ. Сторно віднімається з боку реалізації, а не додається до повернень. Службові внесення й видачі не належать до жодного боку. Розкладу за податковими літерами тут немає — він належить Z-звіту.
offline_sessionobjectПрисутня, поки реєстратор працює офлайн.
idstring (uuid)Ідентифікатор сесії в сервісі.
dps_session_idinteger (int64)Номер сесії, виданий ДПС; входить у фіскальний номер офлайн- документа.
started_atstring (date-time)Початок сесії — від нього рахують 36-годинну межу.
documentsinteger (int64)Скільки документів видано в цій сесії.
last_significant_atstring (date-time)Останній документ, що продовжує сесію; за ним рахують витрачений місячний час.
offline_limitsobjectтакЗаконодавчі межі офлайн-роботи в секундах: 36 годин на одну сесію і 168 годин на календарний місяць. Витрачене рахують від offline_session.started_at і offline_month_used_seconds.
session_secondsinteger (int64)такМежа однієї сесії — 36 годин у секундах.
month_secondsinteger (int64)такМежа на календарний місяць — 168 годин у секундах.
offline_month_used_secondsinteger (int64)Час, відпрацьований офлайн у цьому календарному місяці (за київським часом).
attentionobjectПрисутня, коли реєстратор позначено як такий, що потребує уваги (див. CashRegister.attention_reason). Знімається через DELETE .../attention; зупинене надсилання офлайн-пакетів додатково відновлюють через POST .../offline-session/retry.
reasonstringтакrecurring_remediation — розбіжності з ДПС усуваються знову і знову; offline_submission_paused — надсилання офлайн-пакетів зупинено; auto_close_failing — не вдається автоматичне закриття зміни.recurring_remediationoffline_submission_pausedauto_close_failing
sincestring (date-time)Коли позначку поставлено.

ShiftMode string

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

manualround_the_clockworking_hours

ShiftCloseTimes array

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

CashRegisterListItem object

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

Поле Тип Обовʼязковий Опис
idstring (uuid)такІдентифікатор каси в цьому API — те саме значення, що йде в cash_register_id чека і в {id} решти маршрутів.
fiscal_numberstringтакФіскальний номер ПРРО, присвоєний ДПС; за ним касу впізнає людина.
local_numberstringтакCASHDESKNUM: власний номер каси у клієнта.
org_namestringНазва суб'єкта господарювання.
point_namestringНазва господарської одиниці — точки продажу.
point_addressstringАдреса господарської одиниці.
modestringтакproduction — бойовий режим; test — документи позначені як тестові.productiontest
statestringтакclosed — зміна закрита; opened — відкрита; offline — триває офлайн-сесія.closedopenedoffline

Task object

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

Поле Тип Обовʼязковий Опис
task_idstring (uuid)такІдентифікатор завдання — за ним опитують GET /api/v1/tasks/{id}.
typestringтакОперація завдання: receipt — розрахунковий документ; open_shift і close_shift — зміна; close_offline_session — завершення офлайн-сесії; verify_key — перевірка ключа КЕП; sync_register — звіряння з ДПС; dps_objects — запит об'єктів власника ключа.receiptopen_shiftclose_shiftclose_offline_sessionverify_keysync_registerdps_objects
statusstringтакpending — у черзі; processing — виконується; succeeded і failed — завершено, результат у result або fault.pendingprocessingsucceededfailed
created_atstring (date-time)такКоли завдання створено.
finished_atstring (date-time)Коли завдання завершилося; поки воно в роботі — відсутнє.
errorstringТекст помилки завдання; структурований опис того самого збою — у fault.
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такЩо може зарадити: resync — звірити стан із ДПС; config — виправити налаштування реєстратора; precursor — виконати пропущений попередній крок; user_action — потрібне рішення людини; transient — тимчасова недоступність, допоможе повтор; request — виправити запит; internal — збій сервісу.resyncconfigprecursoruser_actiontransientrequestinternal
paramsobjectЗначення для підстановки в message.
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Документи завдання тестові — каса в режимі test.
receiptDocResultРозрахунковий документ, який видало завдання receipt.
shift_openDocResultДокумент відкриття зміни.
zreportDocResultZ-звіт, яким закрито зміну.
shift_closeDocResultДокумент закриття зміни.
offline_endDocResultДокумент завершення офлайн-сесії.
key_verificationKeyVerificationResultВердикт перевірки ключа КЕП — результат завдання verify_key.
key_password_checkKeyPasswordCheckResultНаслідок швидкої локальної перевірки пароля контейнера, яку кабінет проганяє синхронно під час завантаження ключа: контейнер лише розшифровується, без CMP і без мережі. Завдання вважається успішним і при ok=false — воно дійшло до вердикту. Інфраструктурні збої (БД, KEK, слот підпису) вердиктом не є: там завдання повторюється.
reconcileReconcileReportПідсумок звіряння реєстратора з ДПС (sync_register): який стан побачили на боці сервера і що виправили в себе.
dps_objectsarray<DPSTaxObject>Господарські одиниці власника ключа — результат завдання dps_objects.

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

Наслідок швидкої локальної перевірки пароля контейнера, яку кабінет проганяє синхронно під час завантаження ключа: контейнер лише розшифровується, без 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такactive — ключем можна користуватися; invalid — відхилено, причина у verify_code.activeinvalid
verify_codestringПричина відхилення. not_prro можна перекрити через POST /cabinet/signing-keys/{id}/activate.wrong_passwordcert_not_foundcert_expirednot_prroverify_failedca_unreachable
verify_errorstringДослівна помилка перевірки.
key_typestringТип власника, визначений із сертифіката.individuallegal
prro_capablebooleanтакСертифікат придатний для підпису документів ПРРО.
cert_subjectstringПоле subject сертифіката, як його видав АЦСК.
org_namestringНазва організації (або ім'я особи) власника з сертифіката.
edrpoustringЄДРПОУ юридичної особи з сертифіката, лише цифри.
drfostringРНОКПП (ДРФО) фізичної особи з сертифіката, лише цифри.
deletedbooleanЗапис ключа остаточно видалено — так буває при будь-якому відхиленні, крім not_prro.

DocResult object

Документ, який видало завдання: його номери в журналі та в ДПС і посилання для покупця.

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

ReceiptInput oneOf

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

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

SettlementReceiptInput object

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

Поле Тип Обовʼязковий Опис
cash_register_idstring (uuid)Реєстратор. Обов'язковий для POST /api/v1/receipts. Кабінетний маршрут бере реєстратор з URL: там поле або відсутнє, або збігається з ним, інакше 422.
typestringтакsale — реалізація; return — повернення; storno — сторно.salereturnstorno
cashierstringІм'я касира, яке друкують у чеку (CASHIER); без нього рядка на чеку не буде.
commentstringВільна примітка, яку друкують на самому документі (CHECKHEAD/COMMENT) — наприклад номер замовлення.
sold_atstring (date-time)Коли продаж справді відбувся, якщо інтеграція дійшла до нас пізніше за касу. Це не фіскальний час документа: ДПС приймає ORDERDATE/ORDERTIME лише в межах приблизно хвилини від власного годинника, тож документ завжди позначено моментом подання. Поле лише друкує на документі окремий рядок «Продаж від 03.09.2026 18:11» — перед приміткою з comment, якщо вона є. Час у майбутньому та старіший за 31 день — 422.
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_in — службове внесення; service_out — службова видача (інкасація).service_inservice_out
cashierstringІм'я касира, яке друкують у документі (CASHIER); без нього рядка не буде.
commentstringВільна примітка, яку друкують на документі (CHECKHEAD/COMMENT). Для руху готівки це єдине місце, де сказано, за що гроші: «Інкасація», «Розмінна монета».
sold_atstring (date-time)Коли продаж справді відбувся, якщо інтеграція дійшла до нас пізніше за касу. Це не фіскальний час документа: ДПС приймає ORDERDATE/ORDERTIME лише в межах приблизно хвилини від власного годинника, тож документ завжди позначено моментом подання. Поле лише друкує на документі окремий рядок «Продаж від 03.09.2026 18:11» — перед приміткою з comment, якщо вона є. Час у майбутньому та старіший за 31 день — 422.
modestringРежим доставки результату; параметр запиту ?mode= має перевагу над цим полем.syncasync
sumstringтакСума руху — додатний десятковий рядок, до 2 знаків після коми. Це весь документ: підсумовувати тут нічого, позицій немає.

ReceiptItem object

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

Поле Тип Обовʼязковий Опис
codestringВнутрішній код товару.
barcodestringШтрихкод товару.
uktzedstringКод УКТЗЕД; взаємовиключний з dkpp.
dkppstringВзаємовиключний з uktzed.
namestringтакНазва позиції, як її друкують у чеку.
unit_codeintegerКод одиниці виміру (UNITCD).
unit_namestringНазва одиниці виміру: «шт», «кг».
quantitystringтакКількість — десятковий рядок, до 3 знаків після коми.
pricestringтакЦіна за одиницю — десятковий рядок, до 2 знаків після коми.
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.
meansstringЗасіб оплати — чим саме внесено кошти. Положення № 13 (розд. II п.2, рядок 19) вимагає його окремо від форми оплати. Словник — той самий, що в прикладах ДПС: «Картка», «Переказ з поточного рахунку», «Подарунковий сертифікат», «Попередня оплата», «Прямий дебет»; сюди ж те, чого немає в type: «ПЕРЕКАЗ З КАРТКИ», «ТАЛОН», «ЖЕТОН». Заміняє лише назву, що друкується (PAYFORMNM); фіскальний код форми (PAYFORMCD) визначає type. Для cash не приймається.
cardobjectРеквізити еквайрингу (рядки 12–17). Усі три поля acquirer_* описують еквайра торговця, а не самого торговця.
system_namestringНазва платіжної системи (рядок 17).
acquirer_idstringІдентифікатор еквайра (рядок 12).
acquirer_tax_idstringПодатковий номер еквайра (рядок 12).
acquirer_namestringНайменування еквайра (рядок 12).
transaction_datestring (date-time)Дата й час транзакції на платіжному пристрої (POSTRANSDATE).
transaction_numberstringНомер транзакції на платіжному пристрої (POSTRANSNUM).
device_idstringІдентифікатор платіжного пристрою (рядок 13).
epz_detailsstringЗамаскований номер картки.
auth_codestringКод авторизації (рядок 17).
commissionstringСума комісійної винагороди еквайра за цим платежем — рядок 14 форми ФКЧ-1, «у разі наявності». У звичайному продажу лишається порожнім: комісію еквайра платить продавець, а не покупець. Заповнюють там, де її справді платить платник — приймання коштів для подальшого переказу та видача готівки держателям карток (розділи VI і VII Положення № 13). Нуль означає, що комісії немає, і рядок не друкується.

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 — виправлення не тримаються, на реєстратор має поглянути людина; client.balance_low — передплачений баланс добігає кінця (лишилося менше за поріг чеків), єдине попередження перед тим, як чеки почнуть відхилятися з 402.

task.completedtask.failedshift.openedshift.closedkey.expiringregister.offlineregister.onlineregister.offline_limitregister.remediatedregister.needs_attentionclient.balance_low

WebhookEndpoint object

Точка доставки: куди слати події й на які саме.

Поле Тип Обовʼязковий Опис
idstring (uuid)такІдентифікатор вебхука.
urlstringтакАбсолютний http(s)-URL приймача.
eventsarray<WebhookEvent>такПорожній список означає підписку на всі події.task.completedtask.failedshift.openedshift.closedkey.expiringregister.offlineregister.onlineregister.offline_limitregister.remediatedregister.needs_attentionclient.balance_low
activebooleanтакДоставка ввімкнена; false призупиняє її, не втрачаючи черги.
created_atstring (date-time)такКоли вебхук створено.
updated_atstring (date-time)такКоли його востаннє змінювали.

WebhookDelivery object

Одна доставка події: що слали, чим це скінчилося і що буде далі.

Поле Тип Обовʼязковий Опис
idstring (uuid)такІдентифікатор доставки — його ж передають у replay.
eventstringтакТип події доставки. Крім значень WebhookEvent, доставка може нести зарезервовані типи, на які не можна підписатися: webhook.ping (тестова відправка) і system.dps_* (події доступності ДПС).
statusstringтакpending — у черзі; delivering — триває спроба; delivered — доставлено; failed — спроба невдала, буде повтор; dead — спроби вичерпано.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 рядка оплати, тож решта вже врахована. Лічильник живе на реєстраторі, а не на зміні: готівка переживає 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такPAYFORMCD — фіскальний код форми оплати.
namestringтакPAYFORMNM — назва форми оплати, як її друкують.
sumCashAmountтакГривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках (на відміну від Money, який рахує копійки і належить тарифікації).

ShiftTotals object

Поточні підсумки відкритої зміни — те саме накопичення, з якого буде побудований 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такВалюта рахунка за ISO 4217 — UAH.
statusstringтакdraft — чернетка; issued — виставлено; paid — оплачено; overdue — прострочено.draftissuedpaidoverdue
created_atstring (date-time)такКоли рахунок сформовано.

DPSStatus object

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

Поле Тип Обовʼязковий Опис
verdictstringтакДумка детектора незалежно від override.onlinedegradedoffline
overridestringтакРучний режим оператора.noneforced_offlineforced_online
effectivestringтакПідсумковий операційний режим (override переважає вердикт).onlineoffline
manualbooleanтакЧи діє зараз ручний override.
sincestring (date-time)такВідколи діє поточний effective-режим.
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)такВік найдавнішої з відкритих зараз офлайн-сесій, с.