# Reports: Totals, Details, and Shifts

This guide explains how to retrieve operational reports from an Integrated POS using the `GetReports` operation. It applies to both the SDK (USB / HTTP) and Cloud2Cloud connection modes; only the connector creation method differs.

## What are GetReports

The **GetReports** function allows the automation system to request consolidated or detailed report data directly from the POS terminal. You specify the report type; the terminal returns the data and can optionally print it. Report types are **Totals** (aggregated transaction totals), **Detailed** (individual transaction records), and **Shift** (transactions grouped by shift).

<Callout type="warning">

The report must be requested at least **two minutes** after the last sale or shift change to ensure synchronization.

</Callout>

## Before you begin

Before retrieving reports:

* A Connector must be created and validated using `Polling`
* Integrated POS Mode must be active

## Step 1: Execute a report request

To retrieve an operational report, call the `GetReports` operation with the desired `Type`. 

> For technical reasons, reports must be requested at least **two minutes** after the last sale or shift change to ensure all transaction data is correctly synchronized on the terminal.

The following parameters are available for the `GetReports` operation:

| Parameter | Type | Required | Description |
| :--- | :--- | :--- | :--- |
| `Type` | Enum | Yes | Report type: `Totals` (summary), `Detailed` (itemized), or `Shift` (by operational period). |
| `PrintOnPos` | Boolean | No | If `true`, the report is printed on the POS terminal. If `false`, the data is returned in the `ReportDetails` field. |

The following example demonstrates how to request a summary report to be printed directly on the device:

```csharp
var reportRequest = new ReportsRequest
{
    Type = ReportType.Totals,
    PrintOnPos = true
};

var reportResult = await connector.GetReportsAsync(reportRequest);
```

The following example demonstrates how to retrieve itemized transaction data to be processed by your automation system:

```csharp
var reportRequest = new ReportsRequest
{
    Type = ReportType.Details,
    PrintOnPos = false
};

var reportResult = await connector.GetReportsAsync(reportRequest);
```

## Step 2: Handle the response

The POS returns a structured response matching the requested report type. If `PrintOnPos` was set to `false`, the `ReportDetails` field will contain the JSON data.

Below is an example of a successful response for a detailed report request:

```json
{
  "Code": 0,
  "Message": "APPROVED",
  "CommerceCode": "1234567890",
  "TerminalId": "GET00123",
  "ReportDetails": [
    {
      "authorizationCode": "551437",
      "paymentId": "789456123",
      "opReasonMessageStatus": "APPROVED",
      "timestamp": "2025-08-25T16:11:23.000Z",
      "brandType": "Mastercard",
      "cardLastNumber": "1234",
      "operationValue": "5000",
      "operation": "Credit"
    }
  ]
}
```

Always verify the `Code` and `Message` before parsing the `ReportDetails` structure.

## Next steps

* [Shift Management](/en/integrated-pos/operational-guides/shift-management) — Shift operations and reports.
* [Printing Responsibility](/en/integrated-pos/core-concepts-pos/printing-responsibility) — PrintOnPos and receipt handling.