# Using reports

The purpose of the Reports API is to collect and analyze all the relevant event data generated by all the devices of the project. This guide assumes that suitable event history exist.

## Prerequisites

To be able to generate reports, the user must have at least the following in place:

• A Tracking device
• At least one of the following rules created and associated to the device:
• Dwelling rule
• Utilization rule
• Detention rule
• In case of a dwelling rule, at least one geofence needs to be associated with the device
• Event history related to the rule

## Start report creation

Start report creation by defining a rule and a time range. In this example, for simplicity, let's assume that the rule is a dwelling rule. The same logic applies for other rule types as well, unless stated otherwise.

In some of the reports the metrics are grouped by an interval, which can be a day, a week or a month. The start parameter defines additionally which day is the first day of the week and which hour is the first hour of the day.

NOTE: The format of start and end parameters is a date-time string in UTC timezone.

For example, if the user wants to get a report from the week 1 of 2021, starting on Monday midnight until the end of February 2021, and the user is in the UTC+01 timezone, the start and end parameters would be defined as the following:

curl -X POST \
https://tracking.api.here.com/reports/v4 \
-H 'authorization: Bearer {userToken}' \
-H 'content-type: application/json' \
-d '{
"start": "2021-01-03T23:00:00.000Z",
"end": "2021-02-27T23:00:00.000Z",
"ruleId": {ruleId}
}'


This will return a reportId upon a successful report creation. The same reportId can be used for various reports queries within the specified time range and for the specified rule. The report is available for one week after which it needs to be recreated.

If you are a member of multiple projects, please specify the project ID in the projectId query parameter.

## Check the status of the report creation

Reports are created asyncronously. To get the report creation status, make the following request specifying the reportId without any extra parameters:

curl -X GET \
https://tracking.api.here.com/reports/v4/{reportId} \
-H 'authorization: Bearer {userToken}' \
-H 'content-type: application/json'


This will return the status of the report creation. When status is pending or started, check it later again. Only when the status is completed, one can fetch the actual reports.

## Get a simple interval report for a device

Make a GET request specifying the interval, trackingId and measure query parameters. The latter is the target metric to be calculated. In the example below, you will get a report on how long the specified device was dwelling during each week.

curl -X GET \
https://tracking.api.here.com/reports/v4/{reportId}?measure=duration&interval=week&trackingId={trackingId} \
-H 'authorization: Bearer {userToken}' \
-H 'content-type: application/json'


The response body will contain an array of timestamp-value pairs. The timestamp defines the start of each interval and the value is the metric calculated over this interval. The unit of the value depends on the metric. When the metric is duration, the value will be in seconds.

## Get a combined interval report for all devices

Make a GET request specifying the interval, measure, groupBy and method query parameters. In the example below, you will get a report on how long a device dwelled on average during each week.

curl -X GET \
https://tracking.api.here.com/reports/v4/{reportId}?measure=duration&interval=week&groupBy=asset&method=average \
-H 'authorization: Bearer {userToken}' \
-H 'content-type: application/json'


## Get a combined interval report for all geofences

Make a GET request specifying the interval, measure, groupBy and method query parameters. In the example below, you will get a report on how long a device dwelled on average in a geofence during each week.

curl -X GET \
https://tracking.api.here.com/reports/v4/{reportId}?measure=duration&interval=week&groupBy=geofence&method=cumulative \
-H 'authorization: Bearer {userToken}' \
-H 'content-type: application/json'


NOTE: Getting geofence-specific reports is applicable only for a reportId created with a dwelling rule.

## Get a top list of devices

Make a GET request specifying the measure and groupBy query parameters. In the example below, you will get a report on a list of devices with the respective cumulative dwelling durations for the whole report time period.

curl -X GET \
https://tracking.api.here.com/reports/v4/{reportId}?measure=duration&groupBy=asset \
-H 'authorization: Bearer {userToken}' \
-H 'content-type: application/json'


The response body will contain an array of trackingId-value pairs, sorted in descending order. In case you want to change the sorting, you can define an additional query parameter sort=value:asc.