---
title: "Стан реєстратора (зміна, режим, лічильники)"
method: GET
path: "/v1/cash-registers/{id}"
tags: ["fiscal"]
---

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

`GET /v1/cash-registers/{id}`

## Request

- Base URL: `https://prro.cloud` (the document declares no server; this is the origin it was published from)
- URL: `https://prro.cloud/v1/cash-registers/{id}`
- Auth: HTTP bearer

## Path parameters

- `id` string, uuid, required

## Response `200`

Поточний стан реєстратора.

- CashRegisterState: Поточний стан реєстратора: режим, зміна, готівка, офлайн-сесія.
  - `id` string, uuid, required: Ідентифікатор каси в цьому API — те саме значення, що cash_register_id чека.
  - `fiscal_number` string, required: Фіскальний номер ПРРО, присвоєний ДПС, — «ФН ПРРО» на чеку.
  - `local_number` string, required: CASHDESKNUM: власний номер каси у клієнта.
  - `mode` 'production' | 'test', required: production — бойовий режим; test — документи позначені як тестові. Документи зміни мають режим, у якому її відкрито; змінити режим можна лише при закритій зміні.
  - `state` 'closed' | 'opened' | 'offline', required: closed — зміна закрита; opened — відкрита; offline — триває офлайн-сесія.
  - `offline_ready` boolean: Чи має реєстратор видані ДПС офлайн-реквізити (приходять із квитанцією на відкриття зміни).
  - `shift_mode` 'manual' | 'round_the_clock' | 'working_hours': Як керують змінами реєстратора. `manual` — клієнт відкриває і закриває їх сам. `round_the_clock` — зміна закривається в кожен із shift_close_times, наступний чек відкриває нову. `working_hours` — денне вікно, задане двома межами у shift_close_times. В обох керованих режимах зміну відкриває перший же чек.
  - `shift_close_times` string[]: Час щоденного закриття зміни за київським часом; порожній рівно тоді, коли 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.
    - `amount` string, required: Гривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках; Money натомість рахує копійки і належить тарифікації.
    - `as_of` string, date-time, nullable: Коли залишок рухався востаннє. Null — рухів ще не було, тож нуль означає «немає даних», а не «каса порожня».
  - `current_shift` object: Поточна зміна каси; після закриття поле зникає.
    - `id` string, uuid: Ідентифікатор зміни.
    - `number` integer: Наскрізний номер зміни в межах каси («Зміна №147»). Присвоюється локально: ДПС номера зміни не видає.
    - `status` 'opening' | 'opened' | 'closing' | 'closed': opening і closing — операція ще в роботі; opened і closed — завершена.
    - `testing` boolean: Зміну відкрито на касі в режимі test — усі її документи тестові.
    - `opened_at` string, date-time: Коли зміну відкрито.
    - `documents` integer: Скільки документів створила зміна — усіх видів, не лише розрахункових. Відсутнє, якщо підрахунок не вдався.
  - `shift_totals` ShiftTotals: Поточні підсумки відкритої зміни — те саме накопичення, з якого буде побудований Z-звіт. Сторно віднімається з боку реалізації, а не додається до повернень. Службові внесення й видачі не належать до жодного боку. Розкладу за податковими літерами тут немає — він є лише в Z-звіті.
    - `realiz` ShiftTotalsSide, required: Один бік підсумків зміни — реалізація або повернення: кількість документів, сума і розклад за формами оплати.
      - `count` integer, required: Кількість розрахункових документів цього боку.
      - `sum` string, required: Гривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках; Money натомість рахує копійки і належить тарифікації.
      - `pay_forms` object[]: Накопичено за формами оплати. code/name — пара PAYFORMCD / PAYFORMNM, яка піде в Z-звіт; масиву немає, поки бік порожній.
        - `code` integer, required: PAYFORMCD — фіскальний код форми оплати.
        - `name` string, required: PAYFORMNM — назва форми оплати, як її друкують.
        - `sum` string, required: Гривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках; Money натомість рахує копійки і належить тарифікації.
    - `return` ShiftTotalsSide, required: Один бік підсумків зміни — реалізація або повернення: кількість документів, сума і розклад за формами оплати.
      - `count` integer, required: Кількість розрахункових документів цього боку.
      - `sum` string, required: Гривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках; Money натомість рахує копійки і належить тарифікації.
      - `pay_forms` object[]: Накопичено за формами оплати. code/name — пара PAYFORMCD / PAYFORMNM, яка піде в Z-звіт; масиву немає, поки бік порожній.
        - `code` integer, required: PAYFORMCD — фіскальний код форми оплати.
        - `name` string, required: PAYFORMNM — назва форми оплати, як її друкують.
        - `sum` string, required: Гривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках; Money натомість рахує копійки і належить тарифікації.
    - `service_in` string, required: Гривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках; Money натомість рахує копійки і належить тарифікації.
    - `service_out` string, required: Гривні з копійками десятковим рядком — у тій самій формі, що й суми в чеках; Money натомість рахує копійки і належить тарифікації.
  - `offline_session` object: Присутня, поки реєстратор працює офлайн.
    - `id` string, uuid: Ідентифікатор сесії в сервісі.
    - `dps_session_id` integer: Номер сесії, виданий ДПС; входить у фіскальний номер офлайн- документа.
    - `started_at` string, date-time: Початок сесії — від нього рахують 36-годинну межу.
    - `documents` integer: Скільки документів видано в цій сесії.
    - `last_significant_at` string, date-time, nullable: Останній документ, що продовжує сесію; за ним рахують витрачений місячний час.
  - `offline_limits` object, required: Законодавчі межі офлайн-роботи в секундах: 36 годин на одну сесію і 168 годин на календарний місяць. Витрачене рахують від offline_session.started_at і offline_month_used_seconds.
    - `session_seconds` integer, required: Межа однієї сесії — 36 годин у секундах.
    - `month_seconds` integer, required: Межа на календарний місяць — 168 годин у секундах.
  - `offline_month_used_seconds` integer: Час, відпрацьований офлайн у цьому календарному місяці (за київським часом).
  - `attention` object: Присутня, коли реєстратор позначено як такий, що потребує уваги (див. CashRegister.attention_reason). Знімається через DELETE .../attention; зупинене надсилання офлайн-пакетів додатково відновлюють через POST .../offline-session/retry.
    - `reason` 'recurring_remediation' | 'offline_submission_paused' | 'auto_close_failing', required: recurring_remediation — розбіжності з ДПС усуваються знову і знову; offline_submission_paused — надсилання офлайн-пакетів зупинено; auto_close_failing — не вдається автоматичне закриття зміни.
    - `since` string, date-time, nullable: Коли позначку поставлено.

## Other responses

- `401`: Немає облікових даних, або вони недійсні, протерміновані чи відкликані.
- `404`: Конверт помилки.

---

[API](https://skmtc.dev/prro/apis/prro-service-api.md) · [All operations](https://skmtc.dev/prro/apis/prro-service-api/llms.txt) · [OpenAPI document](https://skmtc.dev/prro/apis/prro-service-api/revisions/a8904b68057f?raw)
