# ZReport. Z-отчёты

> Источник: https://wiki.virtualpos.ru/hc/api/zreport  
> Обновлено: 2026-10-05

Метод возвращает электронные Z-отчёты — итоги закрытых смен фискальных регистраторов: суммы и количество чеков продаж, возвратов, покупок, внесений и выплат, налоги, данные о кассирах. Отчёты можно только читать.

> **Примечание:**
> Как получить ключ, как формируются запросы и какие бывают ответы и ошибки — в статье [Общие сведения](https://wiki.virtualpos.ru/hc/api/overview). Здесь описаны только особенности метода `zreport`.

## Запрос

Все параметры, кроме ключа `apikey` и формата `format`, принимаются и в адресной строке, и в теле POST.

```
GET https://[компания].myvirtualpos.ru/api/zreport?apikey=MySecret&warehouse_id=2&date=20260925
```

## Параметры запроса

- **warehouse_id** — Число. Ид точки продаж: отчёты всех её касс
- **ext_warehouse_id** — Строка. Код точки продаж во внешней системе. Действует, если не указан `warehouse_id`. Если точки с таким кодом нет, возвращается пустой список
- **terminal_id** — Число. Ид кассового места
- **fiscal_number** — Строка. Серийный номер фискального регистратора. Действует, если не указан `terminal_id`
- **session** — Число. Номер смены на фискальном регистраторе
- **date** — Дата `ГГГГММДД`. Отчёты смен, закрытых в этот день
- **format** — `json` (по умолчанию) или `xml`

Условия объединяются по «и». Отчёты возвращаются по убыванию `id`: новые первыми. Даты передаются строго в формате `ГГГГММДД`, иначе метод вернёт ошибку `Incorrect date format`.

> **Важно:**
> **Только закрытые смены за последние 30 дней.** Метод возвращает отчёты смен, закрытых не более 30 дней назад; изменить глубину нельзя. Смена, которая ещё не закрыта, в выдачу не попадает. Если нужны более давние отчёты, они доступны в панели управления.

## Структура ответа

- **success** — `1` — данные получены
- **type** — Тип данных, всегда `zreport`
- **count** — Количество отчётов в ответе
- **zreports** — Список отчётов. Каждый обёрнут в объект `zreport`

### Поля отчёта

Пустые значения в JSON приходят как `null`, в XML — как пустой элемент.

**Смена и касса**

- **id** — Число. Ид отчёта
- **guid** — Строка. Уникальный идентификатор отчёта (GUID)
- **session** — Число. Номер смены
- **open_datetime**, **close_datetime** — Строка. Дата и время открытия и закрытия смены, формат `гггг-мм-дд чч:мм:сс`
- **terminal_id** — Число. Ид кассового места
- **terminal_number** — Число. Номер кассы в зале
- **warehouse_external_id** — Строка. Код точки продаж во внешней системе
- **fiscal_number** — Строка. Серийный номер фискального регистратора
- **short_fiscal_serial_number** — Строка. Краткий серийный номер
- **device_model_name**, **device_model_version** — Строка. Модель и версия ККТ
- **open_user_id**, **close_user_id** — Число. Ид кассиров, открывшего и закрывшего смену
- **open_user_corp_code**, **close_user_corp_code** — Строка. Их корпоративные коды
- **open_user_fio**, **close_user_fio** — Строка. Их фамилии и инициалы

**Итоги продаж**

- **salesamount** — Строка. Сумма продаж за смену
- **saleschecks** — Число. Количество чеков продаж
- **discount_misc** — Строка. Скидки, оплаченные купонами и сертификатами

**Регистры фискального регистратора.** Названия полей построены по схеме `fp_reg_<что>_<вид операции>_<...>`: `oper` — количество операций, `cash` — денежные суммы; вид операции — `sale` (продажи), `saleret` (возвраты продаж), `buy` (покупки), `buyret` (возвраты покупок). Значения `-1` означают, что регистратор не передаёт этот регистр.

- **fp_reg_oper_sale_counts**, **fp_reg_oper_saleret_counts**, **fp_reg_oper_buy_counts**, **fp_reg_oper_buyret_counts** — Число. Количество чеков продаж, возвратов продаж, покупок и возвратов покупок
- **fp_reg_cash_sale_sum**, **fp_reg_cash_saleret_sum**, **fp_reg_cash_buy_sum**, **fp_reg_cash_buyret_sum** — Строка. Общая сумма по этим чекам
- **fp_reg_cash_<вид>_sum_cash**, **_card**, **_credit**, **_tare** — Строка. Та же сумма по способам оплаты: наличными, банковской картой, в кредит, тарой (кредит и тара не используются)
- **fp_reg_oper_moneyinput_count**, **fp_reg_oper_moneyinput_count_global** — Число. Количество внесений за смену и с начала работы регистратора
- **fp_reg_cash_moneyinput_sum** — Строка. Сумма внесений
- **fp_reg_oper_moneyoutput_count**, **fp_reg_oper_moneyoutput_count_global** — Число. Количество выплат за смену и с начала работы регистратора
- **fp_reg_cash_moneyoutput_sum** — Строка. Сумма выплат
- **fp_reg_oper_annulate_count_global**, **fp_reg_oper_annulate_<вид>_count** — Число. Количество аннулированных чеков (общее и по видам операций)
- **fp_reg_cash_annulate_<вид>_sum** — Строка. Сумма аннулированных чеков по видам операций
- **fp_reg_cash_allcash_sum** — Строка. Сумма наличных по данным регистратора
- **fp_reg_cash_sale_sum_discount**, **fp_reg_oper_sale_counts_discount** — Сумма и количество чеков продаж со скидкой
- **fp_reg_cash_total_sale_sum** — Строка. Итоговая сумма продаж по данным регистратора

**Налоги**

- **vat** — Объект. Суммы НДС по ставкам: отдельно для чеков продаж (`sale`) и возвратов (`return`), поля `vat10_sum`, `vat18_sum`, `vat20_sum`
- **sum_with_vat** — Объект. Суммы с разбивкой по ставкам НДС для продаж (`sale`) и возвратов (`return`): `sum_with_vat_none` (без НДС), `sum_with_vat0`, `sum_with_vat10`, `sum_with_vat18`, `sum_with_vat20`

### Пример ответа

```json
{
  "success": 1,
  "type": "zreport",
  "count": 1,
  "zreports": [
    {
      "zreport": {
        "id": 19046,
        "terminal_id": 36,
        "terminal_number": 1,
        "warehouse_external_id": "WH-2",
        "fiscal_number": "00106701382709",
        "guid": "CC2CDC05-B0DB-9BE5-6CDD-57AC2726E91E",
        "salesamount": "1429.00",
        "saleschecks": 2,
        "session": 1,
        "open_user_id": 6,
        "close_user_id": 6,
        "open_user_corp_code": "",
        "close_user_corp_code": "",
        "open_user_fio": "Иванов И. И.",
        "close_user_fio": "Иванов И. И.",
        "open_datetime": "2026-09-25 09:04:01",
        "close_datetime": "2026-09-25 20:11:37",
        "device_model_name": "",
        "device_model_version": "",
        "short_fiscal_serial_number": "138270",
        "fp_reg_oper_sale_counts": 2,
        "fp_reg_cash_sale_sum": "1429.00",
        "fp_reg_cash_sale_sum_cash": "1429.00",
        "fp_reg_cash_sale_sum_card": "0.00",
        "fp_reg_oper_saleret_counts": 0,
        "fp_reg_cash_saleret_sum": "0.00",
        "fp_reg_cash_allcash_sum": "1429.00",
        "vat": {
          "sale": { "vat10_sum": "0.00", "vat18_sum": "0.00", "vat20_sum": "0.00" },
          "return": { "vat10_sum": null, "vat18_sum": null, "vat20_sum": null }
        },
        "sum_with_vat": {
          "sale": { "sum_with_vat_none": "1080.00", "sum_with_vat0": null, "sum_with_vat10": null, "sum_with_vat18": null, "sum_with_vat20": null },
          "return": { "sum_with_vat_none": null, "sum_with_vat0": null, "sum_with_vat10": null, "sum_with_vat18": null, "sum_with_vat20": null }
        },
        "discount_misc": "0.00"
      }
    }
  ]
}
```

В примере для краткости опущены часть регистров фискального регистратора: покупки, возвраты покупок, внесения, выплаты, аннулирования. Структура и названия полей — как в таблице выше. Тот же ответ при `format=xml` (сокращённо):

```xml
<?xml version="1.0" encoding="UTF-8"?>
<root>
  <success>1</success>
  <type>zreport</type>
  <count>1</count>
  <zreports>
    <zreport>
      <id>19046</id>
      <terminal_id>36</terminal_id>
      <session>1</session>
      <open_datetime>2026-09-25 09:04:01</open_datetime>
      <close_datetime>2026-09-25 20:11:37</close_datetime>
      <salesamount>1429.00</salesamount>
      <!-- остальные поля отчёта -->
      <vat>
        <sale><vat10_sum>0.00</vat10_sum><vat18_sum>0.00</vat18_sum><vat20_sum>0.00</vat20_sum></sale>
        <return><vat10_sum/><vat18_sum/><vat20_sum/></return>
      </vat>
    </zreport>
  </zreports>
</root>
```

## Примеры запросов

| Задача | Запрос |
| --- | --- |
| Отчёты за последние 30 дней | `/api/zreport?apikey=MySecret` |
| Отчёты точки продаж за день | `/api/zreport?apikey=MySecret&warehouse_id=2&date=20260925` |
| Отчёты точки по её коду в 1С | `/api/zreport?apikey=MySecret&ext_warehouse_id=WH-2` |
| Отчёты одной кассы | `/api/zreport?apikey=MySecret&terminal_id=36` |
| Отчёт по регистратору и смене | `/api/zreport?apikey=MySecret&fiscal_number=00106701382709&session=1` |

## Ошибки

Ошибка авторизации и общие ошибки описаны в статье [Общие сведения](https://wiki.virtualpos.ru/hc/api/overview).

| Сообщение | Причина | Что делать |
| --- | --- | --- |
| Incorrect date format date='…'. Valid format is: YYYYMMDD | Дата не в формате `ГГГГММДД` | Передайте дату как `20260925` |

Если по условиям ничего не найдено, метод возвращает успешный ответ с `count` равным `0` и пустым списком `zreports`.

## Связанные разделы

- [Общие сведения](https://wiki.virtualpos.ru/hc/api/overview) — Ключ доступа, вызов методов, форматы ответов и ошибки
- [Receipt. Продажи](https://wiki.virtualpos.ru/hc/api/receipt) — Чеки, оформленные в смене
- [CashFlow. Движение денежных средств на кассе](https://wiki.virtualpos.ru/hc/api/cashflow) — Наличные операции на кассе, в том числе закрытие смены
- [Закрытие смены и сверка выручки](https://wiki.virtualpos.ru/hc/cashflow/shift) — Z-отчёты в панели управления
