/v1/version Версія збірки сервісу
Відповіді
-
200Версія, зашита у збірку.Поле Тип Обовʼязковий Опис version string так Тег збірки: dev у локальній збірці, інакше версія релізу.
OpenAPI v0.6.0
REST API сервісу PRRO.cloud: реєстрація чеків, керування змінами, білінг і вебхуки. Джерело правди — специфікація OpenAPI 3.1; цю сторінку згенеровано з неї під час збірки, тож довідник не розходиться з контрактом.
https://api.prro.cloud Усі шляхи на цій сторінці — відносні до базової адреси. Тіла запитів і відповідей — JSON (application/json), кодування UTF-8.
Машинні запити автентифікуються довгоживучим Bearer-токеном (JWT). Випустіть його в кабінеті PRRO.cloud у розділі токенів — значення показується рівно один раз, збережіть його одразу. Токен передається в заголовку Authorization: Bearer <token>; відкликання в кабінеті набирає чинності на всіх репліках протягом ~2 секунд. Перевірити токен можна запитом:
curl -H "Authorization: Bearer $PRRO_TOKEN" \
"$BASE_URL/v1/whoami" Разовий виклик, щоб узяти id каси, і три запити фіскального циклу — перший чек зареєстровано. На касі в режимі test цей цикл безкоштовний: ДПС перевіряє документи, але не фіскалізує їх. Пишете на Go — той самий цикл є в клієнті prro-go: ключі ідемпотентності, повтори та перевірку підпису вебхуків він бере на себе.
Токен показує ті каси, на які він діє. id з відповіді — те саме значення, що далі йде у cash_register_id чека і в шляхи /cash-registers/{id}; фіскальний номер для цього не годиться. Виклик разовий — збережіть id у налаштуваннях інтеграції.
curl -H "Authorization: Bearer $PRRO_TOKEN" \
"$BASE_URL/v1/cash-registers" Якщо каса не в режимі shift_mode: manual, цей крок можна пропустити — перший чек відкриє зміну сам.
curl -X POST "$BASE_URL/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": "Каса самообслуговування"}' Суми — десяткові рядки, а не числа. У синхронному режимі (за замовчуванням) фіскальний номер — одразу у відповіді, а поруч із ним — посилання на чек для покупця.
curl -X POST "$BASE_URL/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" }
]
}' Z-звіт і закриття зміни — одна операція (або налаштуйте shift_close_times на касі, і день закриватиметься сам).
curl -X DELETE "$BASE_URL/v1/cash-registers/$REGISTER_ID/shifts/current" \
-H "Authorization: Bearer $PRRO_TOKEN" \
-H "Idempotency-Key: close-2026-07-14" Цю документацію не обовʼязково читати вручну — віддайте її своєму ШІ-асистенту (Claude, ChatGPT, Copilot тощо), і він напише код інтеграції за вас. Для цього сайт публікує машиночитані версії за конвенцією llms.txt:
— індекс для ШІ-агентів: короткий опис сервісу та посилання на машиночитані документи. Почніть звідси.
— уся ця сторінка одним markdown-файлом: автентифікація, швидкий старт, чек для покупця, вебхуки, повний довідник ендпоінтів і схем. Вміщується в контекст моделі — цього файла достатньо, щоб написати інтеграцію без жодного іншого джерела.
— специфікація OpenAPI 3.1, з якої згенеровано довідник: джерело правди для кодогенерації та валідації.
Усі три файли генеруються під час збірки з тих самих джерел, що й ця сторінка, тож не розходяться з нею.
Заголовок Idempotency-Key обовʼязковий для всіх фіскальних операцій. Повтор запиту з тим самим ключем повертає оригінальну задачу, а не другий чек — мережеві збої та ретраї безпечні. Той самий ключ з іншою операцією — 409.
За замовчуванням запит тримає зʼєднання до відповіді ДПС (до 30 с); якщо не встигли — 202 із задачею для опитування. mode=async повертає 202 одразу, а результат приходить через GET /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.
Повернення (type: return) звіряється з чеком з original.fiscal_number, якщо той видано в нашому сервісі: це має бути продаж у тому самому режимі (test чи production), не сторнований, і всі повернення за ним разом не перевищують суми продажу до заокруглення. Чек з іншої каси шукається за original.register_fiscal_number. Не зійшлося — задача завершується помилкою з кодом return.*, документ не реєструється й до ДПС не йде. Чек, виданий іншим ПРРО, приймається без звірки — тоді в результаті result.receipt.original.verified: false.
Інших кодувань ДПС не приймає, але символ поза ним чек не валить — сервіс замінює його сам: поширені мають заміну (апостроф ʼ → ’, × → x, ₴ → грн, мінус → -), знаки з діакритикою й індекси спрощуються (é → e, ² → 2, ½ → 1/2), літери інших абеток стають ?, а емодзі та невидимі символи відкидаються. Текст, що вже вкладається в кодування, не змінюється. Що надруковано насправді, видно в receipt.registered і на receipt_url.
Відповідь на фіскалізацію несе не лише фіскальний номер: у 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"
}
}
} Сторінка відкривається без авторизації: 16-символьний код і є доступом, як паперовий чек у кишені. Подання обирає параметр ?format=: html (типово), png (сам чек картинкою завширшки 576 px — це растрова ширина стрічки 80 мм, тож на термопринтер вона йде як є, разом із QR) і qr (PNG з адресою цієї ж сторінки). Назовні віддається лише людиночитаний чек — ні XML, ні CMS, ні квитанції ДПС. Невідомий код і документ, який не можна показати, відповідають однаково — 404.
Той самий документ у кабінеті платника податків — підтвердження, яке покупець читає, не довіряючи нам. Доказ фіскалізації — це fiscal_number і tax_url; receipt_url лише показує чек.
У документа з offline: true фіскальний номер обчислено локально (<sid>.<n>.<crc>), тож tax_url зʼявиться лише після того, як пакет сесії прийме фіскальний сервер. receipt_url є одразу — копія віддається з нашого журналу.
Коли ДПС відхиляє пакети сесії, каса зупиняється: нові документи відповідають кодом state.offline_backlog_undeliverable. Усунувши причину, надсилання відновлюють (.../offline-session/retry) або від сесії відмовляються (.../offline-session/abandon). Документи, яких ДПС так і не отримала, стають abandoned: їхнього фіскального номера в ДПС не існує, tax_url не зʼявиться, а receipt_url відповідає 404. Перелік таких документів приходить у результаті задачі та в події register.offline_abandoned; чи видавати ці продажі знову, вирішує інтеграція.
Фіскальний номер каси, на якій видано документ, — той самий «ФН ПРРО», що друкується на чеку. Присутній завжди й однаковий у будь-якому режимі, на відміну від fiscal_number. Це те, за чим інтеграція зіставляє свої записи з касою: діставати номер із параметра fn= посилання tax_url не треба — саме його в офлайн-документа й немає.
Z-звіт, відкриття та закриття зміни друкованої форми не мають, тож посилань у їхніх DocResult не буде.
Код зберігається разом із документом, а не перераховується, тож ротація ключів сервісу не ламає адрес, які вже в руках у покупців. Сторінку не індексують пошукові системи.
Замість опитування задач підпишіться на події: зареєструйте endpoint через POST /v1/webhooks — і сервіс сам постукає у ваш бекенд.
Завдання — task.completed і task.failed. Чеки — receipt.registered (див. нижче). Зміни — shift.opened і shift.closed. Ключ КЕП — key.expiring (раз на добу про сертифікат, що спливає протягом 30 днів). Стан каси — register.offline і register.online, register.offline_limit (наближення до законних меж офлайн-сесії, 36 і 168 годин), register.offline_abandoned (від офлайн-сесії відмовлено — у data документи, яких ДПС не отримала), register.remediated (сервіс сам усунув розбіжність із ДПС) і register.needs_attention (виправлення не тримаються — на касу має поглянути людина). Баланс — client.balance_low (передплачених коштів лишилося менше ніж на поріг чеків); ця подія стосується клієнта, а не каси, тож cash_register_id у ній немає.
receipt.registered приходить на кожен зареєстрований чек — продаж, повернення, сторно, службове внесення й видачу, онлайн і офлайн — і зокрема на ті, що касир провів у кабінеті PRRO.cloud, а не через API. У data — документ у тому вигляді, в якому його отримала ДПС: позиції, оплати, податки, сума й заокруглення, касир, номери, зміна, оригінал повернення чи сторно, receipt_url і tax_url (у офлайн-чека — лише після прийняття ДПС). Звідки подано чек, каже source: api чи cabinet (тоді user_id — обліковий запис кабінету). Поля — у схемі ReceiptRegisteredData (розділ «Схеми даних»). Тож обліку не треба опитувати журнал, щоб бачити продажі, проведені в кабінеті.
POST на ваш URL з тілом {delivery_id, event, attempt, sequence, occurred_at, data}; у data — корисне навантаження події, sequence — номер події в межах каси (у подій рівня клієнта його немає).
Заголовок X-Signature: sha256=<hex> — HMAC-SHA256 від тіла запиту під секретом endpoint'а. Секрет видається один раз при створенні; перевіряйте підпис перед обробкою.
Доставка at-least-once — дедуплікуйте за delivery_id. Невдалі доставки ретраяться, вичерпані потрапляють у DLQ (status=dead) і можуть бути повторені вручну через replay.
Доставлені зберігаються 30 днів, невдалі (dead) — 14 днів від останньої спроби, потім зникають з історії. Replay доступний, поки доставка в ній є: щоб повторити невдалу, у вас два тижні.
Події однієї каси надсилаються по одній і по порядку, але подія, яку ваш приймач не прийняв, наступних не затримує: після ретраю чи replay вона прийде пізніше за них. Упорядковуйте події каси за sequence — він зростає, пропуски можливі. Актуальний стан каси завжди дає GET /v1/cash-registers/{id}.
У журналі доставок last_error каже, чим скінчилася остання невдала спроба: код і початок відповіді вашого приймача або причина збою зʼєднання — зокрема TLS (прострочений чи чужий сертифікат, звичайний HTTP на https-адресі).
Не більше, ніж кас у клієнта, плюс один; призупинені теж рахуються, видалені — ні. Понад ліміт POST /v1/webhooks відповідає 409 з кодом webhook_limit_reached і details {limit, used}; ті самі limit і used повертає GET /v1/webhooks, тож інтеграція бачить ліміт заздалегідь.
active: false призупиняє доставку, не втрачаючи черги: увімкнете назад — накопичене піде далі. Видалення endpoint'а переводить усе недоставлене в dead, тож на час ремонту свого бекенду вимикайте вебхук, а не видаляйте його.
Те, що має побачити людина, сервіс дублює поштою клієнта: client.balance_low, key.expiring, register.needs_attention і завершене поповнення рахунку. Адресу сповіщень і перемикачі окремих листів задають у кабінеті; на доставку вебхуків це не впливає, тож інтеграції нічого не треба міняти. Покупцеві сервіс не пише ніколи — копію чека надсилає інтеграція.
POST https://example.com/prro-hook
X-Signature: sha256=2b7e9f…
{
"delivery_id": "0197a2c4-…",
"event": "task.completed",
"attempt": 1,
"sequence": 17,
"occurred_at": "2026-07-14T10:15:04Z",
"data": { "task_id": "0197a2c1-…", "status": "succeeded" }
} Згенеровано зі специфікації OpenAPI. Кабінетні ендпоінти (cookie-сесія панелі) сюди не входять — інтеграції працюють лише з машинним API.
/v1/version Версія збірки сервісу
200 Версія, зашита у збірку. | Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| version | string | так | Тег збірки: dev у локальній збірці, інакше версія релізу. |
/v1/whoami Bearer Клієнт і дозволи наданого токена
200 Клієнт, дозволи (scopes) та обмеження за касами. | Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| client_id | string (uuid) | так | Клієнт, від імені якого діє токен. |
| scopes | array<string> | так | Дозволи, видані токену. |
| all_cash_registers | boolean | так | true — токен діє на всі каси клієнта (поточні й майбутні); false — лише на перелічені у cash_registers. |
| cash_registers | array<string (uuid)> | — | Присутнє лише для обмеженого токена — перелік uuid кас, до яких він прив'язаний. Відсутнє, коли all_cash_registers. |
| jti | string (uuid) | так | Ідентифікатор токена — за ним його відкликають у кабінеті. |
| expires_at | string (date-time) | — | Коли токен спливає; у безстрокового відсутнє. |
/v1/system/dps Bearer Поточний режим роботи з ДПС (онлайн/офлайн)
Режим, у якому сервіс зараз працює з ДПС; доступний будь-якому машинному токену.
/v1/receipts Bearer Зареєструвати розрахунковий документ
Типи документів: sale — реалізація, return — повернення, storno — сторно, service_in — службове внесення, service_out — інкасація. Сервіс проходить повний фіскальний цикл: локальний номер, XML за check01, підпис КЕП (CAdES-T), надсилання до ДПС, квитанція. Режим sync (типовий) чекає на результат до 30 секунд і віддає 202 з номером завдання, якщо не дочекався; async віддає 202 одразу. Idempotency-Key обов'язковий: повтор із тим самим ключем повертає те саме завдання, а не реєструє другий документ.
| Параметр | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| Idempotency-Key header | string | так | Ключ операції, який обирає клієнт. Повтор запиту з тим самим ключем поверне початкове завдання, а не виконає фіскальну операцію вдруге. |
| mode query | string | — | Режим доставки результату; має перевагу над однойменним полем у тілі. sync (типовий) чекає на результат у межах синхронного очікування; async одразу віддає 202 і номер завдання. |
/v1/tasks/{id} Bearer Статус і результат завдання
| Параметр | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| id path | string (uuid) | так | Ідентифікатор завдання з відповіді на фіскальну операцію. |
/v1/cash-registers Bearer Каси, доступні токену
Токен без обмежень бачить усі каси клієнта, обмежений — лише свої. Звідси беруть cash_register_id для решти маршрутів. Поточний стан каси — у GET /v1/cash-registers/{id}.
200 Каси в межах токена, від найстаріших. | Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| cash_registers | array<CashRegisterListItem> | так | Каси в межах токена, від найстаріших. |
/v1/cash-registers/{id} Bearer Стан реєстратора (зміна, режим, лічильники)
| Параметр | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| id path | string (uuid) | так | Ідентифікатор каси — uuid із GET /v1/cash-registers. |
/v1/cash-registers/{id}/shifts Bearer Відкрити зміну
Завдання, режими доставки та Idempotency-Key — як у POST /v1/receipts.
| Параметр | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| id path | string (uuid) | так | Ідентифікатор каси — uuid із GET /v1/cash-registers. |
| Idempotency-Key header | string | так | Ключ операції, який обирає клієнт. Повтор запиту з тим самим ключем поверне початкове завдання, а не виконає фіскальну операцію вдруге. |
| mode query | string | — | Режим доставки результату; має перевагу над однойменним полем у тілі. sync (типовий) чекає на результат у межах синхронного очікування; async одразу віддає 202 і номер завдання. |
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| cashier | string | — | Ім'я касира, яке друкують у документі відкриття зміни. |
| mode | string | — | Режим доставки результату; параметр запиту ?mode= має перевагу над цим полем.syncasync |
/v1/cash-registers/{id}/shifts/current Bearer Закрити поточну зміну
Однією операцією формує Z-звіт і документ закриття зміни.
| Параметр | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| id path | string (uuid) | так | Ідентифікатор каси — uuid із GET /v1/cash-registers. |
| Idempotency-Key header | string | так | Ключ операції, який обирає клієнт. Повтор запиту з тим самим ключем поверне початкове завдання, а не виконає фіскальну операцію вдруге. |
| mode query | string | — | Режим доставки результату; має перевагу над однойменним полем у тілі. sync (типовий) чекає на результат у межах синхронного очікування; async одразу віддає 202 і номер завдання. |
/v1/cash-registers/{id}/offline-session/close Bearer Передати й завершити офлайн-сесію зараз
Передає пакети сесії до ДПС і завершує її, не чекаючи фонової передачі. Каса повертається онлайн лише після того, як ДПС прийняла всі документи сесії. Якщо ДПС недоступна, операція відхиляється з кодом state.offline_close_needs_dps — сесію буде передано й завершено автоматично, щойно зв'язок відновиться.
| Параметр | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| id path | string (uuid) | так | Ідентифікатор каси — uuid із GET /v1/cash-registers. |
| Idempotency-Key header | string | так | Ключ операції, який обирає клієнт. Повтор запиту з тим самим ключем поверне початкове завдання, а не виконає фіскальну операцію вдруге. |
| mode query | string | — | Режим доставки результату; має перевагу над однойменним полем у тілі. sync (типовий) чекає на результат у межах синхронного очікування; async одразу віддає 202 і номер завдання. |
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| cashier | string | — | Ім'я касира, яке друкують у документі завершення сесії. |
| mode | string | — | Режим доставки результату; параметр запиту ?mode= має перевагу над цим полем.syncasync |
/v1/cash-registers/{id}/offline-session/retry Bearer Відновити надсилання офлайн-пакетів
Сервіс зупиняє надсилання, коли ДПС відхиляє пакет сесії. Спершу усуньте причину, потім викликайте цей маршрут. Сесію, яку ДПС не прийме ніколи, закривають через .../offline-session/abandon.
| Параметр | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| id path | string (uuid) | так | Ідентифікатор каси — uuid із GET /v1/cash-registers. |
/v1/cash-registers/{id}/offline-session/abandon Bearer Відмовитися від офлайн-сесії, яку не приймає ДПС
Доступно лише для сесії, надсилання якої зупинено (state.offline_backlog_undeliverable), і лише коли ДПС відповідає; інакше — state.offline_session_not_paused або state.offline_abandon_needs_dps. Документи сесії, яких ДПС не отримала, позначаються abandoned: їхні офлайн-фіскальні номери в ДПС не існують, а локальні номери переходять до наступних документів. Сесію завершують у ДПС на тому, що вона вже має, і каса отримує нові офлайн-ключі. Перелік покинутих документів — у результаті та в події register.offline_abandoned; чи видавати їх знову, вирішує інтеграція.
| Параметр | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| id path | string (uuid) | так | Ідентифікатор каси — uuid із GET /v1/cash-registers. |
| Idempotency-Key header | string | так | Ключ операції, який обирає клієнт. Повтор запиту з тим самим ключем поверне початкове завдання, а не виконає фіскальну операцію вдруге. |
| mode query | string | — | Режим доставки результату; має перевагу над однойменним полем у тілі. sync (типовий) чекає на результат у межах синхронного очікування; async одразу віддає 202 і номер завдання. |
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| mode | string | — | Режим доставки результату; параметр запиту ?mode= має перевагу над цим полем.syncasync |
/v1/cash-registers/{id}/attention Bearer Зняти позначку «потребує уваги» з реєстратора
| Параметр | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| id path | string (uuid) | так | Ідентифікатор каси — uuid із GET /v1/cash-registers. |
/v1/cash-registers/{id}/cash-balance Bearer Заявити фактичний залишок готівки
Переставляє лічильник готівки на перераховану суму — коли касу підключили з непорожнім ящиком або лічильник розійшовся з фактом. Операція не фіскальна: заявлений залишок не потрапляє в документи і не змінює підсумків зміни. Рух готівки реєструють чеком service_in або service_out. Від'ємне значення — 422.
| Параметр | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| id path | string (uuid) | так | Ідентифікатор каси — uuid із GET /v1/cash-registers. |
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| amount | CashAmount | так | Перерахований залишок; не може бути від'ємним. |
/v1/billing/usage Bearer Передплачений баланс і підсумок тарифікації за період
Суми — копійки десятковим рядком. Типовий період — поточний календарний місяць за UTC, межа to не включається; період понад 366 днів — 422. Тарифікація асинхронна, тож підсумок може відставати від останнього чека на кілька секунд.
| Параметр | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| from query | string (date) | — | Початок періоду, включно (дата за UTC); типово — перше число поточного місяця. |
| to query | string (date) | — | Кінець періоду, не включно; типово — перше число наступного місяця. Понад 366 днів — 422. |
/v1/invoices Bearer Рахунки клієнта, від найновішого періоду
Один рядок на розрахунковий період, а не на окремий платіж.
| Параметр | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| limit query | integer | — | Скільки рахунків повернути: 1–200, типово 50. |
| offset query | integer | — | Скільки рахунків пропустити — посторінковий обхід. |
200 Рахунки клієнта. | Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| invoices | array<Invoice> | так | Рахунки, від найновішого періоду. |
/v1/webhooks Bearer Перелік вебхуків клієнта (без секретів)
200 Точки доставки клієнта. | Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| webhooks | array<WebhookEndpoint> | так | Точки доставки клієнта; секрети не повертаються. |
| limit | integer | так | Скільки вебхуків дозволено — кількість кас клієнта плюс один. |
| used | integer | так | Скільки вебхуків зареєстровано, включно з призупиненими. |
/v1/webhooks Bearer Зареєструвати вебхук
Доставка — POST з тілом {delivery_id, event, attempt, sequence, occurred_at, data} і заголовком X-Signature вигляду "sha256=<HMAC-SHA256 тіла у hex>", порахованим на секреті цієї точки доставки. Гарантія — «щонайменше один раз»: приймач має відкидати повтори за delivery_id. Події одного реєстратора надсилаються по одній і по порядку. Подія, яку приймач не прийняв, не затримує наступні: після повтору чи replay вона може прийти пізніше за них. Упорядковуйте події реєстратора за sequence — номером події в межах реєстратора, що зростає (пропуски можливі). Актуальний стан каси — GET /v1/cash-registers/{id}.
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| url | string | так | Абсолютний http(s)-URL приймача. |
| events | array<WebhookEvent> | — | Події, на які підписані; порожній список або відсутнє поле означає всі події.task.completedtask.failedshift.openedshift.closedkey.expiringregister.offlineregister.onlineregister.offline_limitregister.offline_abandonedregister.remediatedregister.needs_attentionclient.balance_lowreceipt.registered |
| secret | string | — | Секрет HMAC; якщо не вказати, згенерує сервер. |
201 Створено; секрет повертається рівно один раз. | Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| id | string (uuid) | так | Ідентифікатор вебхука. |
| url | string | так | Абсолютний http(s)-URL приймача. |
| events | array<WebhookEvent> | так | Порожній список означає підписку на всі події.task.completedtask.failedshift.openedshift.closedkey.expiringregister.offlineregister.onlineregister.offline_limitregister.offline_abandonedregister.remediatedregister.needs_attentionclient.balance_lowreceipt.registered |
| active | boolean | так | Доставка ввімкнена; false призупиняє її, не втрачаючи черги. |
| created_at | string (date-time) | так | Коли вебхук створено. |
| updated_at | string (date-time) | так | Коли його востаннє змінювали. |
| secret | string | так | Отримати повторно неможливо. |
409 Ліміт вебхуків вичерпано (код webhook_limit_reached): дозволено не більше, ніж кас у клієнта, плюс один; призупинені теж рахуються. У details — limit і used. Error /v1/webhooks/{id} Bearer Змінити URL, підписку або активність вебхука
| Параметр | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| id path | string (uuid) | так | Ідентифікатор вебхука. |
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| url | string | — | Новий абсолютний http(s)-URL приймача. |
| events | array<WebhookEvent> | — | Новий перелік подій; порожній список означає всі.task.completedtask.failedshift.openedshift.closedkey.expiringregister.offlineregister.onlineregister.offline_limitregister.offline_abandonedregister.remediatedregister.needs_attentionclient.balance_lowreceipt.registered |
| active | boolean | — | false призупиняє доставку, не втрачаючи черги. |
/v1/webhooks/{id} Bearer Видалити вебхук
| Параметр | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| id path | string (uuid) | так | Ідентифікатор вебхука. |
/v1/webhooks/{id}/deliveries Bearer Історія доставок вебхука
Доставлені зберігаються 30 днів, невдалі (dead) — 14 днів від останньої спроби; старіші зникають з історії.
| Параметр | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| id path | string (uuid) | так | Ідентифікатор вебхука. |
| status query | string | — | Показати лише доставки в цьому стані. |
| limit query | integer | — | Скільки доставок повернути: 1–200, типово 50. |
200 Доставки. | Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| deliveries | array<WebhookDelivery> | так | Доставки, від найновішої. |
/v1/webhooks/{id}/deliveries/{deliveryId}/replay Bearer Повторити доставку
Повертає доставку — зазвичай невдалу — в чергу з новим запасом спроб. Доступно, поки доставка є в історії: невдалу — 14 днів від останньої спроби.
| Параметр | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| id path | string (uuid) | так | Ідентифікатор вебхука. |
| deliveryId path | string (uuid) | так | Ідентифікатор доставки з історії. |
200 Повернуто в чергу; спроба — одразу. Події, доставлені тим часом, не повторюються: ця прийде після них. WebhookDelivery Обʼєкти, на які посилаються ендпоінти довідника. Обовʼязкові поля позначено «так».
Error object Конверт помилки: машинний код, текст для людини і подробиці, якщо вони є.
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| code | string | так | Стабільний машинний код помилки; саме на нього реагує інтеграція. |
| message | string | так | Пояснення для людини; покладатися на його текст програмно не можна. |
| details | any | — | Подробиці помилки, коли вони є, — наприклад перелік полів, які не пройшли валідацію. |
CashRegisterState object Поточний стан реєстратора: режим, зміна, готівка, офлайн-сесія.
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| id | string (uuid) | так | Ідентифікатор каси в цьому API — те саме значення, що cash_register_id чека. |
| fiscal_number | string | так | Фіскальний номер ПРРО, присвоєний ДПС, — «ФН ПРРО» на чеку. |
| local_number | string | так | CASHDESKNUM: власний номер каси у клієнта. |
| mode | string | так | production — бойовий режим; test — документи позначені як тестові. Документи зміни мають режим, у якому її відкрито; змінити режим можна лише при закритій зміні.productiontest |
| state | string | так | closed — зміна закрита; opened — відкрита; offline — триває офлайн-сесія.closedopenedoffline |
| offline_ready | boolean | — | Чи має реєстратор видані ДПС офлайн-реквізити (приходять із квитанцією на відкриття зміни). |
| shift_mode | ShiftMode | — | Як керують змінами реєстратора. manual — клієнт відкриває і закриває їх сам. round_the_clock — зміна закривається в кожен із shift_close_times, наступний чек відкриває нову. working_hours — денне вікно, задане двома межами у shift_close_times. В обох керованих режимах зміну відкриває перший же чек. |
| shift_close_times | ShiftCloseTimes | — | Час щоденного закриття зміни за київським часом; порожній рівно тоді, коли shift_mode — manual. Час прив'язаний до годинника, а не до моменту відкриття зміни. Потрібно щонайменше два значення з проміжком не більше 20 годин (рахуючи через опівніч). round_the_clock — два або більше за зростанням; working_hours — рівно два: початок і кінець дня саме в цьому порядку (вікно через опівніч — "08:00", потім "02:00"). |
| cash_balance | CashBalance | — | Готівка в касі реєстратора. Це лічильник, а не фіскальна величина: він стартує з нуля при створенні реєстратора і враховує лише документи, що пройшли через цей сервіс. Рухають його готівкові рядки оплат — додають на реалізації, віднімають на поверненні та сторно — і службові документи; безготівкові форми не рухають нічого. Береться sum рядка оплати, решта вже врахована. Лічильник належить реєстратору, а не зміні, і Z-звіт його не скидає. Від'ємне значення означає, що в касі було більше, ніж побачив сервіс. Переставити лічильник: PUT /v1/cash-registers/{id}/cash-balance. |
| current_shift | object | — | Поточна зміна каси; після закриття поле зникає. |
| id | string (uuid) | — | Ідентифікатор зміни. |
| number | integer (int64) | — | Наскрізний номер зміни в межах каси («Зміна №147»). Присвоюється локально: ДПС номера зміни не видає. |
| status | string | — | opening і closing — операція ще в роботі; opened і closed — завершена.openingopenedclosingclosed |
| testing | boolean | — | Зміну відкрито на касі в режимі test — усі її документи тестові. |
| opened_at | string (date-time) | — | Коли зміну відкрито. |
| documents | integer | — | Скільки документів створила зміна — усіх видів, не лише розрахункових. Відсутнє, якщо підрахунок не вдався. |
| shift_totals | ShiftTotals | — | Поточні підсумки відкритої зміни — те саме накопичення, з якого буде побудований Z-звіт. Сторно віднімається з боку реалізації, а не додається до повернень. Службові внесення й видачі не належать до жодного боку. Розкладу за податковими літерами тут немає — він є лише в Z-звіті. |
| offline_session | object | — | Присутня, поки реєстратор працює офлайн. |
| id | string (uuid) | — | Ідентифікатор сесії в сервісі. |
| dps_session_id | integer (int64) | — | Номер сесії, виданий ДПС; входить у фіскальний номер офлайн- документа. |
| started_at | string (date-time) | — | Початок сесії — від нього рахують 36-годинну межу. |
| documents | integer (int64) | — | Скільки документів видано в цій сесії. |
| last_significant_at | string (date-time) | — | Останній документ, що продовжує сесію; за ним рахують витрачений місячний час. |
| offline_limits | object | так | Законодавчі межі офлайн-роботи в секундах: 36 годин на одну сесію і 168 годин на календарний місяць. Витрачене рахують від offline_session.started_at і offline_month_used_seconds. |
| session_seconds | integer (int64) | так | Межа однієї сесії — 36 годин у секундах. |
| month_seconds | integer (int64) | так | Межа на календарний місяць — 168 годин у секундах. |
| offline_month_used_seconds | integer (int64) | — | Час, відпрацьований офлайн у цьому календарному місяці (за київським часом). |
| attention | object | — | Присутня, коли реєстратор позначено як такий, що потребує уваги (див. CashRegister.attention_reason). Знімається через DELETE .../attention; зупинене надсилання офлайн-пакетів додатково відновлюють через POST .../offline-session/retry. |
| reason | string | так | recurring_remediation — розбіжності з ДПС усуваються знову і знову; offline_submission_paused — надсилання офлайн-пакетів зупинено; auto_close_failing — не вдається автоматичне закриття зміни.recurring_remediationoffline_submission_pausedauto_close_failing |
| since | string (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 | string (uuid) | так | Ідентифікатор каси в цьому API — те саме значення, що йде в cash_register_id чека і в {id} решти маршрутів. |
| fiscal_number | string | так | Фіскальний номер ПРРО, присвоєний ДПС. |
| local_number | string | так | CASHDESKNUM: власний номер каси у клієнта. |
| org_name | string | — | Назва суб'єкта господарювання. |
| point_name | string | — | Назва господарської одиниці — точки продажу. |
| point_address | string | — | Адреса господарської одиниці. |
| mode | string | так | production — бойовий режим; test — документи позначені як тестові. Документи зміни мають режим, у якому її відкрито; змінити режим можна лише при закритій зміні.productiontest |
| state | string | так | closed — зміна закрита; opened — відкрита; offline — триває офлайн-сесія.closedopenedoffline |
Task object Завдання фіскального конвеєра: у нього перетворюється кожен запит до ДПС.
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| task_id | string (uuid) | так | Ідентифікатор завдання — за ним опитують GET /v1/tasks/{id}. |
| type | string | так | Операція завдання: receipt — розрахунковий документ; open_shift і close_shift — зміна; close_offline_session — завершення офлайн-сесії; abandon_offline_session — відмова від офлайн-сесії, яку не приймає ДПС; verify_key — перевірка ключа КЕП; sync_register — звіряння з ДПС; dps_objects — запит об'єктів власника ключа.receiptopen_shiftclose_shiftclose_offline_sessionabandon_offline_sessionverify_keysync_registerdps_objects |
| status | string | так | pending — у черзі; processing — виконується; succeeded і failed — завершено, результат у result або fault.pendingprocessingsucceededfailed |
| created_at | string (date-time) | так | Коли завдання створено. |
| finished_at | string (date-time) | — | Коли завдання завершилося; поки воно в роботі — відсутнє. |
| error | string | — | Текст помилки завдання; структурований опис того самого збою — у fault. |
| fault | Fault | — | Структурований опис збою завдання. Простори імен коду: dps.* — відмова фіскального сервера, fiscal.* — валідація документа, return.* — звірка повернення з початковим чеком, signer.* — рівень КЕП, state.* — стан реєстратора. Мову message задає Accept-Language, типово українська. |
| result | TaskResult | — | Фіскальні поля (prro_id/shift_id/testing/…) стосуються завдань на чек, зміну та офлайн-сесію; key_verification — єдиний результат завдання verify_key. |
Fault object Структурований опис збою завдання. Простори імен коду: dps.* — відмова фіскального сервера, fiscal.* — валідація документа, return.* — звірка повернення з початковим чеком, signer.* — рівень КЕП, state.* — стан реєстратора. Мову message задає Accept-Language, типово українська.
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| code | string | так | Стабільний ідентифікатор, напр. dps.check_local_number_invalid. |
| class | string | так | Що може зарадити: resync — звірити стан із ДПС; config — виправити налаштування реєстратора; precursor — виконати пропущений попередній крок; user_action — потрібне рішення людини; transient — тимчасова недоступність, допоможе повтор; request — виправити запит; internal — збій сервісу.resyncconfigprecursoruser_actiontransientrequestinternal |
| params | object | — | Значення для підстановки в message. |
| message | string | — | Текст для людини, локалізований із каталогу помилок. |
| upstream_message | string | — | Дослівне повідомлення фіскального сервера. |
| remediation | array<string> | — | Автоматичні виправлення, застосовані під час обробки завдання.local_number_syncedshift_adoptedshift_abandonedzreport_recoveredzreport_autofiledregister_config_filled |
TaskResult object Фіскальні поля (prro_id/shift_id/testing/…) стосуються завдань на чек, зміну та офлайн-сесію; key_verification — єдиний результат завдання verify_key.
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| prro_id | string (uuid) | — | Каса, на якій виконано завдання. |
| shift_id | string (uuid) | — | Зміна, у межах якої видано документи завдання. |
| shift_number | integer (int64) | — | Наскрізний номер зміни в межах каси. Присвоюється локально: ДПС номера зміни не видає (у квитанції такого поля немає). |
| testing | boolean | — | Документи завдання тестові — каса в режимі test. |
| receipt | DocResult | — | Розрахунковий документ, який видало завдання receipt. |
| shift_open | DocResult | — | Документ відкриття зміни. |
| zreport | DocResult | — | Z-звіт, яким закрито зміну. |
| shift_close | DocResult | — | Документ закриття зміни. |
| offline_end | DocResult | — | Документ завершення офлайн-сесії. |
| offline_abandon | OfflineAbandonResult | — | Результат відмови від офлайн-сесії (abandon_offline_session). |
| key_verification | KeyVerificationResult | — | Вердикт перевірки ключа КЕП — результат завдання verify_key. |
| key_password_check | KeyPasswordCheckResult | — | Результат швидкої перевірки пароля контейнера: контейнер лише розшифровується, без звернень до мережі. Завдання успішне і при ok=false — воно дійшло до вердикту. При внутрішньому збої вердикту немає і завдання повторюється. |
| reconcile | ReconcileReport | — | Підсумок звіряння реєстратора з ДПС (sync_register): який стан побачили на боці сервера і що виправили в себе. |
| dps_objects | array<DPSTaxObject> | — | Господарські одиниці власника ключа — результат завдання dps_objects. |
OfflineAbandonResult object Результат відмови від офлайн-сесії (abandon_offline_session).
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| session_id | string (uuid) | так | Сесія, від якої відмовлено. |
| dps_session_id | integer (int64) | так | Номер сесії, виданий ДПС. |
| held_documents | integer (int64) | так | Скільки документів сесії ДПС отримала; вони лишаються зареєстрованими. |
| abandoned | array<AbandonedDocument> | так | Документи сесії, яких ДПС не отримала. |
| closure_session_id | string (uuid) | — | Сесія, якою відмовлену сесію завершують у ДПС. Відсутня, якщо ДПС не отримала жодного документа сесії або вже завершила її сама. |
| closed | boolean | так | Сесію завершено в ДПС, каса знову онлайн. false — завершення ще передається; документи каси до того чекають. |
AbandonedDocument object Документ відмовленої офлайн-сесії — те, що отримав покупець. Його фіскального номера в ДПС не існує.
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| document_id | string (uuid) | так | Ідентифікатор документа в сервісі. |
| task_id | string (uuid) | — | Завдання, яке видало документ. |
| class | string | так | Вид документа.checkzreportopen_shiftclose_shiftoffline_beginoffline_end |
| kind | string | — | Що саме оформив чек; лише для class = check.salereturnstornoservice_inservice_out |
| local_number | integer (int64) | так | Локальний номер, який мав документ. |
| fiscal_number | string | — | Офлайн-фіскальний номер, надрукований на документі. |
| total | string | — | Сума документа в гривнях; лише для чеків. |
| pay_form | string | — | Форма оплати; лише для чеків.cashcashlessmixed |
| created_at | string (date-time) | так | Коли документ видано. |
ReconcileReport object Підсумок звіряння реєстратора з ДПС (sync_register): який стан побачили на боці сервера і що виправили в себе.
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| fiscal_number | string | так | Реєстратор, який звіряли. |
| dps_shift_opened | boolean | так | Чи вважає ДПС зміну відкритою. |
| dps_next_local_number | integer (int64) | так | Локальний номер, якого ДПС чекає від наступного документа. |
| dps_testing | boolean | — | Чи вважає ДПС реєстратор тестовим. |
| counter_old | integer (int64) | — | Наш лічильник локальних номерів до звіряння. |
| counter_new | integer (int64) | — | Наш лічильник після звіряння. |
| shift_adopted | boolean | — | Ми прийняли як свою зміну, відкриту на боці ДПС. |
| shift_abandoned | boolean | — | Ми закрили в себе зміну, якої на боці ДПС немає. |
| offline_credentials_refreshed | boolean | — | Офлайн-ключі реєстратора оновлено з даних ДПС. |
| cash | object | — | Скільки готівки зрушила поточна зміна за нашим підрахунком і за підсумками зміни на боці ДПС. Присутнє лише тоді, коли на сервері справді триває зміна. Довідкове поле: за розбіжністю нічого не виправляється. |
| ours | CashAmount | так | Гривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках; Money натомість рахує копійки і належить тарифікації. |
| dps | CashAmount | так | Гривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках; Money натомість рахує копійки і належить тарифікації. |
| match | boolean | так | Чи збіглися обидва підрахунки. |
| totals | object | — | Підсумки поточної зміни за нашим обліком і за даними ДПС. Присутнє лише тоді, коли зміна триває і на сервері, і в нас. Якщо підсумки розходяться, Z-звіт зміни подається з підсумками ДПС — інших сервер не приймає. |
| ours | ShiftTotalsBrief | так | Суми й кількості чеків зміни, за якими ДПС звіряє Z-звіт. |
| dps | ShiftTotalsBrief | — | Відсутнє, якщо ДПС не повернула підсумки. |
| match | boolean | так | Чи збіглися обидва підсумки. |
| z_report_source | string | так | З яких підсумків буде подано Z-звіт зміни.localdps |
| forced | boolean | — | Це звіряння перевело Z-звіт зміни на підсумки ДПС. |
| held | string | — | Чому підсумки не звірено або розбіжність не виправлено: dps_totals_unavailable — ДПС не повернула підсумки, звірити не вдалося (match тоді false, dps відсутнє); shift_closing — Z-звіт зміни вже подано; offline_backlog — офлайн-документи ще не доставлено до ДПС.dps_totals_unavailableshift_closingoffline_backlog |
| attention_cleared | boolean | — | Знято позначку auto_close_failing — автоматичне закриття зміни відновлено. |
| skipped | string | — | Чому нічого не чіпали (офлайн-сесію звіряння не торкається).offline_session |
ShiftTotalsBrief object Суми й кількості чеків зміни, за якими ДПС звіряє Z-звіт.
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| sales | CashAmount | так | Гривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках; Money натомість рахує копійки і належить тарифікації. |
| sales_count | integer | так | Кількість чеків продажу. |
| returns | CashAmount | так | Гривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках; Money натомість рахує копійки і належить тарифікації. |
| returns_count | integer | так | Кількість чеків повернення. |
| service_input | CashAmount | так | Гривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках; Money натомість рахує копійки і належить тарифікації. |
| service_output | CashAmount | так | Гривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках; Money натомість рахує копійки і належить тарифікації. |
DPSTaxObject object Одна господарська одиниця власника ключа (dps_objects).
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| name | string | так | Назва господарської одиниці. |
| address | string | — | Адреса господарської одиниці. |
| tin | string | так | Податковий номер власника — ЄДРПОУ або РНОКПП. |
| ipn | string | — | Індивідуальний податковий номер платника ПДВ. |
| org_name | string | так | Назва суб'єкта господарювання. |
| registrars | array<DPSRegistrar> | так | ПРРО, зареєстровані за цією господарською одиницею. |
DPSRegistrar object Один ПРРО, зареєстрований за господарською одиницею.
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| fiscal_number | string | так | Фіскальний номер ПРРО, присвоєний ДПС. |
| local_number | string | так | Локальний номер ПРРО у власника. |
| name | string | — | Назва ПРРО з реєстрації. |
| closed | boolean | — | ПРРО скасовано в ДПС. |
KeyPasswordCheckResult object Результат швидкої перевірки пароля контейнера: контейнер лише розшифровується, без звернень до мережі. Завдання успішне і при ok=false — воно дійшло до вердикту. При внутрішньому збої вердикту немає і завдання повторюється.
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| signing_key_id | string (uuid) | так | Ключ, пароль якого перевіряли. |
| ok | boolean | так | Пароль підійшов — контейнер розшифровано. |
| verify_code | string | — | Присутній завжди при ok=false (напр. wrong_password). |
| verify_error | string | — | Дослівна помилка бібліотеки підпису. |
KeyVerificationResult object Вердикт повної перевірки ключа КЕП: чи можна ним підписувати документи ПРРО і чий він.
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| signing_key_id | string (uuid) | так | Ключ, який перевіряли. При deleted=true запису вже немає. |
| status | string | так | active — ключем можна користуватися; invalid — відхилено, причина у verify_code.activeinvalid |
| verify_code | string | — | Причина відхилення. not_prro можна перекрити через POST /cabinet/signing-keys/{id}/activate.wrong_passwordcert_not_foundcert_expirednot_prroverify_failedca_unreachable |
| verify_error | string | — | Дослівна помилка перевірки. |
| key_type | string | — | Тип власника, визначений із сертифіката.individuallegal |
| prro_capable | boolean | так | Сертифікат придатний для підпису документів ПРРО. |
| cert_subject | string | — | Поле subject сертифіката, як його видав АЦСК. |
| org_name | string | — | Назва організації (або ім'я особи) власника з сертифіката. |
| edrpou | string | — | ЄДРПОУ юридичної особи з сертифіката, лише цифри. |
| drfo | string | — | РНОКПП (ДРФО) фізичної особи з сертифіката, лише цифри. |
| deleted | boolean | — | Запис ключа видалено; так буває при будь-якому відхиленні, крім not_prro. |
DocResult object Документ, який видало завдання: номери в журналі та в ДПС і посилання для покупця.
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| document_id | string (uuid) | так | Ідентифікатор документа в сервісі. |
| local_number | integer | так | Наскрізний номер документа в межах каси (ORDERNUM). |
| fiscal_number | string | так | Присвоєний фіскальним сервером ДПС. |
| register_fiscal_number | string | так | Фіскальний номер ПРРО, на якому видано документ, — «ФН ПРРО» на чеку (CASHREGISTERNUM). Це номер каси, а не документа: він однаковий у будь-якому режимі, на відміну від fiscal_number. Присутнє завжди. |
| offline | boolean | — | Документ підписано в межах офлайн-сесії: його фіскальний номер обчислено локально (<sid>.<n>.<crc>), і на фіскальному сервері він з'явиться лише після надсилання пакета сесії. |
| receipt_url | string (uri) | — | Копія чека для покупця на короткому домені сервісу (https://r.prro.cloud/<код>): її пересилають листом або перетворюють на QR. Сторінка відкривається без авторизації — код і є доступом. Формат задає параметр запиту: ?format=html (типово), png (чек картинкою завширшки 576 px — стрічка 80 мм для термопринтера, з QR усередині) або qr (PNG з адресою цієї ж сторінки). Є лише в розрахункових документів і працює одразу, в офлайн-сесії теж. Це подання чека, а не доказ фіскалізації: доказ — fiscal_number і tax_url. |
| tax_url | string (uri) | — | Той самий документ у кабінеті платника податків — незалежне підтвердження. Відсутнє, доки документ не потрапив на фіскальний сервер: в офлайн-чека до надсилання пакета сесії є лише локально обчислений номер. |
| original | ReturnOriginal | — | Початковий чек повернення. Є лише в документа повернення. |
ReturnOriginal object Початковий чек повернення. Є лише в документа повернення.
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| fiscal_number | string | так | Фіскальний номер початкового чека. |
| document_id | string (uuid) | — | Початковий чек у журналі сервісу; відсутній разом із verified. |
| verified | boolean | так | true — початковий чек видано в цьому сервісі, і повернення звірено із залишком за ним. false — чека в сервісі немає (виданий іншим ПРРО), повернення прийнято без звірки. |
ReceiptInput oneOf Дві форми документа, які розрізняє поле type: розрахунок за товари несе позиції та оплати, рух готівки — лише суму. Поля чужої форми не ігноруються, а відхиляються з 422.
type SettlementReceiptInput object Розрахунок за товари — реалізація, повернення або сторно.
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| cash_register_id | string (uuid) | — | Реєстратор, на якому реєструють документ. Обов'язковий для POST /v1/receipts; у маршрутах, де касу вже задано в URL, поле або відсутнє, або збігається з нею, інакше 422. |
| type | string | так | sale — реалізація; return — повернення; storno — сторно.salereturnstorno |
| cashier | string | — | Ім'я касира, яке друкують у чеку (CASHIER); без нього рядка на чеку не буде. |
| comment | string | — | Вільна примітка, яку друкують на самому документі (CHECKHEAD/COMMENT) — наприклад номер замовлення. |
| sold_at | string (date-time) | — | Момент фактичного продажу, якщо документ дійшов до сервісу пізніше за касу. Це не фіскальний час документа: ДПС приймає ORDERDATE/ORDERTIME лише в межах приблизно хвилини від власного годинника, тож документ позначено моментом подання. Поле друкує на документі рядок «Продаж від 03.09.2026 18:11» — перед приміткою з comment, якщо вона є. Час у майбутньому або старіший за 31 день — 422. |
| mode | string | — | Режим доставки результату; параметр запиту ?mode= має перевагу над цим полем.syncasync |
| original | object | — | Зв'язок із початковим чеком; обов'язковий для повернення та сторно. Повернення звіряється з початковим чеком, якщо той видано в цьому сервісі: це має бути чек продажу в тому самому режимі (тестовому чи фіскальному), не сторнований, а сума всіх повернень за ним не може перевищувати суму продажу до заокруглення. Інакше завдання завершується помилкою з кодом return.* і документ не реєструється. Чек, виданий поза сервісом, приймається без звірки — див. result.receipt.original.verified. |
| fiscal_number | string | так | Фіскальний номер початкового чека. |
| register_fiscal_number | string | — | Фіскальний номер ПРРО, на якому видано початковий чек, якщо це інший реєстратор. Без нього чек шукається на реєстраторі повернення. |
| date | string (date) | — | У форматі РРРР-ММ-ДД. |
| items | array<ReceiptItem> | так | Позиції чека; щонайменше одна. |
| payments | array<ReceiptPayment> | так | Форми оплати чека; щонайменше одна. |
| rounding_step | string | — | Крок заокруглення готівки десятковим рядком ("0.10" за правилами НБУ); без цього поля заокруглення не застосовується. |
ServiceReceiptInput object Рух готівки повз продаж: service_in — службове внесення (DOCSUBTYPE 2), service_out — службова видача, тобто інкасація (DOCSUBTYPE 4). Обробляється як звичайний розрахунковий документ: автоматичне відкриття зміни в керованих режимах, офлайн-сесія, журнал і тарифікація як за чек. У підсумках зміни сума йде окремо в service_input/service_output і потрапляє до ZREPBODY Z-звіту; cash_balance зсувається на всю суму. Отримання підкріплення (DOCSUBTYPE 3) не підтримується.
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| cash_register_id | string (uuid) | — | Реєстратор, на якому реєструють документ. Обов'язковий для POST /v1/receipts; у маршрутах, де касу вже задано в URL, поле або відсутнє, або збігається з нею, інакше 422. |
| type | string | так | service_in — службове внесення; service_out — службова видача (інкасація).service_inservice_out |
| cashier | string | — | Ім'я касира, яке друкують у документі (CASHIER); без нього рядка не буде. |
| comment | string | — | Вільна примітка, яку друкують на документі (CHECKHEAD/COMMENT). Для руху готівки це єдине місце, де сказано, за що гроші: «Інкасація», «Розмінна монета». |
| sold_at | string (date-time) | — | Момент фактичного продажу, якщо документ дійшов до сервісу пізніше за касу. Це не фіскальний час документа: ДПС приймає ORDERDATE/ORDERTIME лише в межах приблизно хвилини від власного годинника, тож документ позначено моментом подання. Поле друкує на документі рядок «Продаж від 03.09.2026 18:11» — перед приміткою з comment, якщо вона є. Час у майбутньому або старіший за 31 день — 422. |
| mode | string | — | Режим доставки результату; параметр запиту ?mode= має перевагу над цим полем.syncasync |
| sum | string | так | Сума руху — додатний десятковий рядок, до 2 знаків після коми; позицій у такого документа немає. |
ReceiptItem object Грошові величини — десяткові рядки ("259.90"); кількість допускає до 3 знаків після коми, ціни — до 2.
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| code | string | — | Внутрішній код товару. |
| barcode | string | — | Штрихкод товару. |
| uktzed | string | — | Код УКТЗЕД; взаємовиключний з dkpp. |
| dkpp | string | — | Взаємовиключний з uktzed. |
| name | string | так | Назва позиції, як її друкують у чеку. |
| unit_code | integer | — | Код одиниці виміру (UNITCD). |
| unit_name | string | — | Назва одиниці виміру: «шт», «кг». |
| quantity | string | так | Кількість — десятковий рядок, до 3 знаків після коми. |
| price | string | так | Ціна за одиницю — десятковий рядок, до 2 знаків після коми. |
| tax_letters | string | — | Податкові літери з tax_rates реєстратора, напр. "А" або "АГ". Порожнє значення застосовує default_tax_letter реєстратора (а якщо типової літери немає — позиція лишається без податку); "-" примусово робить позицію неоподаткованою. |
| discount | object | — | Знижка на позицію. |
| percent | string | — | Позначає відсоткову знижку; суму все одно вказують у sum. |
| sum | string | так | Сума знижки десятковим рядком — її вказують і для відсоткової знижки. |
| excise_labels | array<string> | — | Коди марок акцизного податку. |
| comment | string | — | Примітка до позиції. |
PaymentType string Форма оплати; фіскальний код і назву, які потраплять у чек, визначає сервіс: cash — 0 ГОТІВКА, card — 301 КАРТКА, certificate — 305 СЕРТИФІКАТ, bank_transfer — 306 ПЕРЕКАЗ З ПОТОЧНОГО РАХУНКУ, direct_debit — 100000 ПРЯМИЙ ДЕБЕТ. Залишок готівки реєстратора рухає лише cash.
cashcardcertificatebank_transferdirect_debit ReceiptPayment object Одна оплата чека: форма, сума і — для картки — реквізити еквайрингу.
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| type | PaymentType | так | Форма оплати; фіскальний код і назву, які потраплять у чек, визначає сервіс: cash — 0 ГОТІВКА, card — 301 КАРТКА, certificate — 305 СЕРТИФІКАТ, bank_transfer — 306 ПЕРЕКАЗ З ПОТОЧНОГО РАХУНКУ, direct_debit — 100000 ПРЯМИЙ ДЕБЕТ. Залишок готівки реєстратора рухає лише cash. |
| sum | string | так | Сума, віднесена на цю форму оплати. |
| provided | string | — | Отримано готівкою; решта = provided − sum. |
| means | string | — | Засіб оплати — чим саме внесено кошти; Положення № 13 (розд. II п.2, рядок 19) вимагає його окремо від форми оплати. Словник — той самий, що в прикладах ДПС: «Картка», «Переказ з поточного рахунку», «Подарунковий сертифікат», «Попередня оплата», «Прямий дебет», а також те, чого немає в type: «ПЕРЕКАЗ З КАРТКИ», «ТАЛОН», «ЖЕТОН». Заміняє лише назву, що друкується (PAYFORMNM); фіскальний код форми (PAYFORMCD) визначає type. Для cash не приймається. |
| card | object | — | Реквізити еквайрингу (рядки 12–17). Усі три поля acquirer_* описують еквайра торговця, а не самого торговця. |
| system_name | string | — | Назва платіжної системи (рядок 17). |
| acquirer_id | string | — | Ідентифікатор еквайра (рядок 12). |
| acquirer_tax_id | string | — | Податковий номер еквайра (рядок 12). |
| acquirer_name | string | — | Найменування еквайра (рядок 12). |
| transaction_date | string (date-time) | — | Дата й час транзакції на платіжному пристрої (POSTRANSDATE). |
| transaction_number | string | — | Номер транзакції на платіжному пристрої (POSTRANSNUM). |
| device_id | string | — | Ідентифікатор платіжного пристрою (рядок 13). |
| epz_details | string | — | Замаскований номер картки. |
| auth_code | string | — | Код авторизації (рядок 17). |
| commission | string | — | Сума комісійної винагороди еквайра за цим платежем — рядок 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.offline_abandoned — від офлайн-сесії відмовлено, у події перелік документів, яких ДПС не отримала; register.remediated — автоматичне усунення розбіжності з ДПС; register.needs_attention — розбіжності не усуваються самі, потрібне втручання людини; client.balance_low — баланс опустився нижче порога, попередження перед тим, як чеки почнуть відхилятися з 402; receipt.registered — зареєстровано чек (продаж, повернення, сторно, службове внесення чи видача) з повним вмістом; схема даних — ReceiptRegisteredData.
task.completedtask.failedshift.openedshift.closedkey.expiringregister.offlineregister.onlineregister.offline_limitregister.offline_abandonedregister.remediatedregister.needs_attentionclient.balance_lowreceipt.registered ReceiptRegisteredData object Дані події receipt.registered: документ у тому вигляді, в якому його отримала ДПС. Суми — десяткові рядки в гривнях, як у запиті чека.
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| cash_register_id | string (uuid) | так | Каса. |
| register_fiscal_number | string | так | Фіскальний номер ПРРО. |
| document_id | string (uuid) | так | Документ у журналі. |
| task_id | string (uuid) | так | Завдання, яке його зареєструвало. |
| type | string | так | Вид документа.salereturnstornoservice_inservice_out |
| source | string | так | Звідки подано чек — через API чи з панелі.apicabinet |
| user_id | string (uuid) | — | Обліковий запис панелі, з якого подано чек; лише для source cabinet. Власник бачить його в переліку команди. |
| cashier | string | — | Ім’я касира, надруковане на чеку. |
| local_number | integer (int64) | так | Локальний номер документа. |
| fiscal_number | string | так | Фіскальний номер документа; в офлайні — обчислений локально. |
| offline | boolean | так | Чек подано в офлайн-сесії. |
| testing | boolean | так | Тестовий документ. |
| shift_id | string (uuid) | так | Зміна. |
| shift_number | integer (int64) | — | Номер зміни на касі. |
| issued_at | string (date-time) | так | Дата й час документа, як їх надруковано. |
| total | string | так | Сума до сплати; для службових документів — сума руху готівки. |
| rounding | string | — | Заокруглення готівки, якщо було. |
| items | array<object> | — | Рядки чека. |
| code | string | — | |
| barcode | string | — | |
| uktzed | string | — | |
| dkpp | string | — | |
| name | string | так | |
| unit_name | string | — | |
| quantity | string | так | |
| price | string | так | |
| cost | string | — | Вартість рядка до знижки. |
| tax_letters | string | — | |
| discount | string | — | Сума знижки. |
| payments | array<object> | — | Форми оплати. |
| type | string | — | Форма оплати, як у запиті чека. |
| name | string | так | Назва, надрукована на чеку. |
| sum | string | так | |
| taxes | array<object> | — | Податки чека. |
| letter | string | — | |
| name | string | так | |
| rate | string | так | Ставка, відсотки. |
| turnover | string | так | Оборот за ставкою. |
| sum | string | так | Сума податку. |
| excluded | boolean | — | Податок нараховано понад ціну. |
| comment | string | — | Коментар, надрукований на чеку. |
| original | object | — | Чек, який повертає повернення чи скасовує сторно. |
| fiscal_number | string | так | |
| document_id | string (uuid) | — | Оригінал у журналі, якщо він там є. |
| verified | boolean | так | Лише для повернення: оригінал знайдено в журналі й перевірено залишок. |
| receipt_url | string | — | Копія чека для покупця. |
| tax_url | string | — | Чек у кабінеті платника ДПС; відсутнє, доки офлайн-чек не прийнято ДПС. |
WebhookEndpoint object Точка доставки подій: куди слати й на які саме.
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| id | string (uuid) | так | Ідентифікатор вебхука. |
| url | string | так | Абсолютний http(s)-URL приймача. |
| events | array<WebhookEvent> | так | Порожній список означає підписку на всі події.task.completedtask.failedshift.openedshift.closedkey.expiringregister.offlineregister.onlineregister.offline_limitregister.offline_abandonedregister.remediatedregister.needs_attentionclient.balance_lowreceipt.registered |
| active | boolean | так | Доставка ввімкнена; false призупиняє її, не втрачаючи черги. |
| created_at | string (date-time) | так | Коли вебхук створено. |
| updated_at | string (date-time) | так | Коли його востаннє змінювали. |
WebhookDelivery object Одна доставка події та її стан.
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| id | string (uuid) | так | Ідентифікатор доставки — його ж передають у replay. |
| event | string | так | Тип події доставки. Крім значень WebhookEvent, доставка може нести зарезервовані типи, на які не можна підписатися: webhook.ping (тестова відправка) і system.dps_* (події доступності ДПС). |
| status | string | так | pending — у черзі; delivering — триває спроба; delivered — доставлено; failed — спроба невдала, буде повтор; dead — спроби вичерпано.pendingdeliveringdeliveredfaileddead |
| attempts | integer | так | Скільки спроб уже зроблено. |
| cash_register_id | string (uuid) | — | Каса, якої стосується подія; у подій рівня клієнта відсутня. |
| sequence | integer (int64) | — | Номер події в межах каси (поле sequence конверта); за ним упорядковують події. У подій рівня клієнта відсутній. |
| data | any | так | Корисне навантаження події (поле data конверта). |
| last_error | string | — | Чим завершилася остання невдала спроба: код і початок відповіді приймача або причина збою з’єднання (зокрема TLS). |
| next_attempt_at | string (date-time) | — | Коли буде наступна спроба; у завершених відсутнє. |
| created_at | string (date-time) | так | Коли подію поставлено в чергу. |
| delivered_at | string (date-time) | — | Коли приймач відповів успіхом. |
Money string Копійки десятковим рядком (numeric(14,4)); ніколи не число з рухомою комою.
CashAmount string Гривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках; Money натомість рахує копійки і належить тарифікації.
CashBalance object Готівка в касі реєстратора. Це лічильник, а не фіскальна величина: він стартує з нуля при створенні реєстратора і враховує лише документи, що пройшли через цей сервіс. Рухають його готівкові рядки оплат — додають на реалізації, віднімають на поверненні та сторно — і службові документи; безготівкові форми не рухають нічого. Береться sum рядка оплати, решта вже врахована. Лічильник належить реєстратору, а не зміні, і Z-звіт його не скидає. Від'ємне значення означає, що в касі було більше, ніж побачив сервіс. Переставити лічильник: PUT /v1/cash-registers/{id}/cash-balance.
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| amount | CashAmount | так | Гривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках; Money натомість рахує копійки і належить тарифікації. |
| as_of | string (date-time) | — | Коли залишок рухався востаннє. Null — рухів ще не було, тож нуль означає «немає даних», а не «каса порожня». |
ShiftTotalsSide object Один бік підсумків зміни — реалізація або повернення: кількість документів, сума і розклад за формами оплати.
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| count | integer | так | Кількість розрахункових документів цього боку. |
| sum | CashAmount | так | Гривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках; Money натомість рахує копійки і належить тарифікації. |
| pay_forms | array<object> | — | Накопичено за формами оплати. code/name — пара PAYFORMCD / PAYFORMNM, яка піде в Z-звіт; масиву немає, поки бік порожній. |
| code | integer | так | PAYFORMCD — фіскальний код форми оплати. |
| name | string | так | PAYFORMNM — назва форми оплати, як її друкують. |
| sum | CashAmount | так | Гривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках; Money натомість рахує копійки і належить тарифікації. |
ShiftTotals object Поточні підсумки відкритої зміни — те саме накопичення, з якого буде побудований Z-звіт. Сторно віднімається з боку реалізації, а не додається до повернень. Службові внесення й видачі не належать до жодного боку. Розкладу за податковими літерами тут немає — він є лише в Z-звіті.
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| realiz | ShiftTotalsSide | так | Один бік підсумків зміни — реалізація або повернення: кількість документів, сума і розклад за формами оплати. |
| return | ShiftTotalsSide | так | Один бік підсумків зміни — реалізація або повернення: кількість документів, сума і розклад за формами оплати. |
| service_in | CashAmount | так | Гривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках; Money натомість рахує копійки і належить тарифікації. |
| service_out | CashAmount | так | Гривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках; Money натомість рахує копійки і належить тарифікації. |
CashBalanceDeclaration object Лічильник до заяви, після неї і поправка між ними.
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| amount | CashAmount | так | Гривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках; Money натомість рахує копійки і належить тарифікації. |
| previous | CashAmount | так | Гривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках; Money натомість рахує копійки і належить тарифікації. |
| adjustment | CashAmount | так | Гривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках; Money натомість рахує копійки і належить тарифікації. |
BillingUsage object Баланс і підсумок тарифікації за період.
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| balance | Money | так | Копійки десятковим рядком (numeric(14,4)); ніколи не число з рухомою комою. |
| soft_limit | Money | так | Нижня межа балансу: поки balance < soft_limit, чеки заблоковані. |
| blocked | boolean | так | Чеки зараз заблоковано — балансом або рішенням оператора. |
| period | object | так | Період, за який пораховано підсумок. |
| from | string (date) | так | Включно. |
| to | string (date) | так | Не включно. |
| receipts | integer (int64) | так | Кількість тарифікованих чеків за період. |
| charged | Money | так | Копійки десятковим рядком (numeric(14,4)); ніколи не число з рухомою комою. |
| tariff | object | так | Тариф, за яким рахували. |
| plan_id | string (uuid) | так | Ідентифікатор тарифного плану. |
| price_per_receipt | Money | так | Копійки десятковим рядком (numeric(14,4)); ніколи не число з рухомою комою. |
Invoice object Рахунок за один розрахунковий період.
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| id | string (uuid) | так | Ідентифікатор рахунка. |
| period_start | string (date) | так | Включно. |
| period_end | string (date) | так | Включно. |
| amount | Money | так | Копійки десятковим рядком (numeric(14,4)); ніколи не число з рухомою комою. |
| currency | string | так | Валюта рахунка за ISO 4217 — UAH. |
| status | string | так | draft — чернетка; issued — виставлено; paid — оплачено; overdue — прострочено.draftissuedpaidoverdue |
| created_at | string (date-time) | так | Коли рахунок сформовано. |
DPSPulse object Режим роботи з ДПС і телеметрія, що його пояснює. Конвеєр реагує на effective.
| Поле | Тип | Обовʼязковий | Опис |
|---|---|---|---|
| effective | string | так | Підсумковий операційний режим, якого дотримується конвеєр.onlineoffline |
| verdict | string | так | Вердикт детектора — відрізняє «повільно» від «недоступно».onlinedegradedoffline |
| since | string (date-time) | так | Відколи діє поточний effective-режим. |
| latency_ms | integer (int64) | так | Затримка успішних викликів у вікні детектора, мс. |
| samples | integer | так | Скільки викликів у вікні. |
| failures | integer | так | Скільки з них невдалих. |
| last_ok_at | string (date-time) | — | Остання успішна відповідь ДПС. |
| last_probe_at | string (date-time) | — | Остання перевірка доступності ДПС. |
| tunables | object | так | Пороги, за якими судять числа вище: ширина вікна, поріг degraded і крок перевірок. |
| window_seconds | integer (int64) | так | Ширина вікна детектора, с. |
| degraded_latency_ms | integer (int64) | так | Затримка, від якої відповідь вважають повільною, мс. |
| probe_interval_seconds | integer (int64) | так | Крок перевірок, с. |