> For the complete documentation index, see [llms.txt](https://navixy.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://navixy.com/docs/navixy-api/user-api/resources/commons/report/report_tracker.md).

# Report tracker

Generate, poll, retrieve, and download the account's tracker reports.

A report turns a period of tracking data into tables and graphs: distance travelled, stops made, fuel used, geofences visited. Which report is produced is decided by the plugin named in `plugin.plugin_id`, and most of the `plugin` object is specific to that plugin.

Generation is asynchronous, so a caller runs a sequence rather than a single call: `generate` queues the report and returns its ID, `status` reports progress, and `retrieve` or `download` fetches the result. For a walkthrough, see [how to obtain report information](/docs/navixy-api/user-api/guides/data-retrieval/obtain-reports.md).

## API actions

API base path: `/report/tracker`.

Every operation on this page requires the `reports` sub-user right.

The `geocoder` parameter chooses which [geocoder](/docs/navixy-api/user-api/resources/tracking/geocoder.md) resolves addresses. The plugin-specific parameters are documented in [report plugins](/docs/navixy-api/user-api/resources/commons/plugin/report_plugins.md). A plugin object looks like this:

```json
{
  "details_interval_seconds": 300,
  "plugin_id": 9,
  "show_seconds": false,
  "graph_type": "time",
  "smoothing": false,
  "sensors": [
    {
      "tracker_id": 123456,
      "sensor_id": 123456
    }
  ]
}
```

{% hint style="info" %}
`include_places_in_address` and `include_zones_in_address` both default to `true`, preserving the historical behaviour of prefixing an address with the name of the place or geofence containing the point. They apply to report plugins that render an address column, such as trips or stops. The values are echoed back in [`list`](#post-report-tracker-list) under `parameters`, and are stored with [scheduled reports](/docs/navixy-api/user-api/resources/commons/report/report_schedule.md).
{% endhint %}

***

## Generate report

> Queue a report for generation and return its ID. Generation is asynchronous: poll \`report/tracker/status\`, then fetch the result with \`report/tracker/retrieve\` or \`report/tracker/download\`.\
> \
> Which report is produced is decided by \`plugin.plugin\_id\`, and most of the \`plugin\` object is plugin-specific. See the tracker report plugins reference for what each one accepts.\
> \
> Report by trackers takes \`trackers\`; a report by employees takes \`employees\` instead.\
> \
> \*\*Error 211 carries extra data.\*\* When the period is too long the error body includes \`max\_time\_span\`, a human-readable English string such as \`120 days\` rather than an ISO 8601 duration, so a caller can retry with a period that fits rather than guessing.\
> \
> Requires the \`reports\` right.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Reports","description":"Generating tracker reports, fetching them as JSON or as files, and scheduling them to be emailed regularly. All resources under the /report/ path."}],"servers":[{"url":"https://api.eu.navixy.com/v2","description":"Navixy production server on European platform"},{"url":"https://api.us.navixy.com/v2","description":"Navixy production server on American platform"},{"url":"https://api.me.navixy.com/v2","description":"Navixy production server on Middle East platform"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","description":"Either a user session hash or an API key, with the \"NVX \" prefix, for example \"NVX 22eac1c27af4be7b9d04da2ce1af111b\". Obtain a session hash from the userAuth operation, or create an API key from the API keys operations. A small number of operations accept a session hash only and reject an API key with error code 4; each says so in its description.","name":"Authorization","in":"header"}},"schemas":{"ReportTimeFilter":{"type":"object","description":"Which part of each day, and which days of the week, the report should cover.","properties":{"from":{"type":"string","description":"Start time of day, such as `00:00:00`."},"to":{"type":"string","description":"End time of day, such as `23:59:59`."},"weekdays":{"type":"array","description":"Days of the week to include, where 1 is Monday and 7 is Sunday.","items":{"type":"integer","minimum":1,"maximum":7}}}}},"responses":{"ResponseError":{"description":"Error response object","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"Always false."},"status":{"type":"object","description":"Error status. Present only when an error occurred.","properties":{"code":{"type":"integer","description":"An error code in this API, not an HTTP code."},"description":{"type":"string","description":"An error description."}}},"errors":{"type":"array","description":"Per-parameter detail, returned with validation failures such as error code 7. A parameter name here may be an internal field name rather than the documented parameter name.","items":{"type":"object","properties":{"parameter":{"type":"string","description":"Name of the parameter that failed validation."},"error":{"type":"string","description":"What was wrong with it."}}}}}}}}}}},"paths":{"/report/tracker/generate":{"post":{"tags":["Reports"],"summary":"Generate report","description":"Queue a report for generation and return its ID. Generation is asynchronous: poll `report/tracker/status`, then fetch the result with `report/tracker/retrieve` or `report/tracker/download`.\n\nWhich report is produced is decided by `plugin.plugin_id`, and most of the `plugin` object is plugin-specific. See the tracker report plugins reference for what each one accepts.\n\nReport by trackers takes `trackers`; a report by employees takes `employees` instead.\n\n**Error 211 carries extra data.** When the period is too long the error body includes `max_time_span`, a human-readable English string such as `120 days` rather than an ISO 8601 duration, so a caller can retry with a period that fits rather than guessing.\n\nRequires the `reports` right.","operationId":"reportTrackerGenerate","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"from":{"type":"string","description":"Start of the reporting period."},"to":{"type":"string","description":"End of the reporting period. Must be after `from`."},"title":{"type":"string","description":"Report title. A default title is used when null."},"geocoder":{"type":"string","description":"Which geocoder to use for resolving addresses."},"trackers":{"type":"array","description":"Trackers to include, for a report by trackers.","items":{"type":"integer"}},"employees":{"type":"array","description":"Employees to include, for a report by employees.","items":{"type":"integer"}},"time_filter":{"$ref":"#/components/schemas/ReportTimeFilter"},"plugin":{"type":"object","description":"Which report to generate, and how. `plugin_id` selects the report type and the rest of the object is plugin-specific.","properties":{"plugin_id":{"type":"integer","description":"ID of the tracker report plugin that generates the report."},"show_seconds":{"type":"boolean","description":"Whether time values in the report include seconds."}},"additionalProperties":true},"include_places_in_address":{"type":"boolean","description":"Optional. Default `true`. Prepend the name of the place a point falls inside to the address in report columns. Set `false` for the geocoded address alone."},"include_zones_in_address":{"type":"boolean","description":"Optional. Default `true`. Prepend the name of the geofence a point falls inside to the address in report columns. Set `false` for the geocoded address alone."}},"required":["from","to","plugin"]}}}},"responses":{"200":{"description":"The queued report","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"id":{"type":"integer","description":"ID of the report queued for generation. Use it to poll status and to fetch the result."}}}}}},"400":{"description":"Bad request. The response body carries the API-level error code in `status.code`. Validation failures also include an `errors` array naming each offending parameter.","$ref":"#/components/responses/ResponseError"},"402":{"description":"Error 236: one of the trackers is on a plan with reports disabled.","$ref":"#/components/responses/ResponseError"},"403":{"description":"Error 211: the period from `from` to `to` is longer than the maximum allowed. **The response body carries `max_time_span`**, a human-readable English string such as `120 days`, not an ISO 8601 duration. Error 217: one or more tracker IDs do not exist or belong to another user. Error 222: the report plugin was not found.","$ref":"#/components/responses/ResponseError"},"429":{"description":"Error 15: too many requests. The number of reports one user may generate in parallel is limited.","$ref":"#/components/responses/ResponseError"},"default":{"$ref":"#/components/responses/ResponseError"}}}}}}
```

#### Errors

These errors come in addition to the [general error codes](/docs/navixy-api/general/errors.md#error-codes):

* 15 - Too many requests. One user can only have so many reports generating in parallel.
* 211 - Requested time span is too big, when the interval from `from` to `to` exceeds the maximum allowed.
* 217 - List contains nonexistent entities, when a tracker ID belongs to no tracker or to another user's.
* 222 - Plugin not found, when no report plugin has the given ID.
* 236 - Feature unavailable due to tariff restrictions, when one of the trackers is on a tariff with reports disabled, meaning `has_reports` is false.

Error 211 carries the maximum allowed period in the response body, so a caller can retry with a period that fits:

```json
{
  "success": false,
  "status": {
    "code": 211,
    "description": "Requested time span is too big"
  },
  "max_time_span": "120 days"
}
```

`max_time_span` is a human-readable English phrase such as `120 days` or `26 hours`. It is **not** an ISO 8601 duration, so parse it as text rather than as a duration literal.

***

## Get report status

> Return how far along a report's generation is.\
> \
> Requires the \`reports\` right.\
> \
> Also accepts GET with the same parameters as query-string values.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Reports","description":"Generating tracker reports, fetching them as JSON or as files, and scheduling them to be emailed regularly. All resources under the /report/ path."}],"servers":[{"url":"https://api.eu.navixy.com/v2","description":"Navixy production server on European platform"},{"url":"https://api.us.navixy.com/v2","description":"Navixy production server on American platform"},{"url":"https://api.me.navixy.com/v2","description":"Navixy production server on Middle East platform"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","description":"Either a user session hash or an API key, with the \"NVX \" prefix, for example \"NVX 22eac1c27af4be7b9d04da2ce1af111b\". Obtain a session hash from the userAuth operation, or create an API key from the API keys operations. A small number of operations accept a session hash only and reject an API key with error code 4; each says so in its description.","name":"Authorization","in":"header"}},"responses":{"ResponseError":{"description":"Error response object","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"Always false."},"status":{"type":"object","description":"Error status. Present only when an error occurred.","properties":{"code":{"type":"integer","description":"An error code in this API, not an HTTP code."},"description":{"type":"string","description":"An error description."}}},"errors":{"type":"array","description":"Per-parameter detail, returned with validation failures such as error code 7. A parameter name here may be an internal field name rather than the documented parameter name.","items":{"type":"object","properties":{"parameter":{"type":"string","description":"Name of the parameter that failed validation."},"error":{"type":"string","description":"What was wrong with it."}}}}}}}}}}},"paths":{"/report/tracker/status":{"post":{"tags":["Reports"],"summary":"Get report status","description":"Return how far along a report's generation is.\n\nRequires the `reports` right.\n\nAlso accepts GET with the same parameters as query-string values.","operationId":"reportTrackerStatus","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"report_id":{"type":"integer","description":"ID of the report.","minimum":1}},"required":["report_id"]}}}},"responses":{"200":{"description":"The generation progress","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"percent_ready":{"type":"integer","description":"Report readiness, as a percentage."}}}}}},"400":{"description":"Bad request. The response body carries the API-level error code in `status.code`. Validation failures also include an `errors` array naming each offending parameter.","$ref":"#/components/responses/ResponseError"},"404":{"description":"Error 204: no report with this ID was found.","$ref":"#/components/responses/ResponseError"},"default":{"$ref":"#/components/responses/ResponseError"}}}}}}
```

#### Errors

These errors come in addition to the [general error codes](/docs/navixy-api/general/errors.md#error-codes):

* 204 - Entity not found, when no report has the given ID.

***

## Retrieve report

> Return a generated report as JSON.\
> \
> The body of \`report\` is \*\*plugin-dependent\*\*: its shape follows whichever report plugin generated it.\
> \
> A report that is still generating returns error 229 rather than partial data, so poll \`report/tracker/status\` first.\
> \
> Requires the \`reports\` right.\
> \
> Also accepts GET with the same parameters as query-string values.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Reports","description":"Generating tracker reports, fetching them as JSON or as files, and scheduling them to be emailed regularly. All resources under the /report/ path."}],"servers":[{"url":"https://api.eu.navixy.com/v2","description":"Navixy production server on European platform"},{"url":"https://api.us.navixy.com/v2","description":"Navixy production server on American platform"},{"url":"https://api.me.navixy.com/v2","description":"Navixy production server on Middle East platform"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","description":"Either a user session hash or an API key, with the \"NVX \" prefix, for example \"NVX 22eac1c27af4be7b9d04da2ce1af111b\". Obtain a session hash from the userAuth operation, or create an API key from the API keys operations. A small number of operations accept a session hash only and reject an API key with error code 4; each says so in its description.","name":"Authorization","in":"header"}},"schemas":{"ReportBody":{"type":"object","description":"A generated report, rendered as data rather than as a file.\n\nThe outer structure is the same whatever plugin produced the report: a report holds sheets, a sheet holds sections, and a section is either a table or a block of text. **What varies by plugin is the column set**, so the cells inside a row are keyed by column name and are not fixed here.","properties":{"id":{"type":"integer","description":"Report ID."},"title":{"type":"string","description":"Report title."},"created":{"type":"string","description":"When the report was created."},"from":{"type":"string","description":"Start of the reporting period."},"to":{"type":"string","description":"End of the reporting period."},"time_filter":{"$ref":"#/components/schemas/ReportTimeFilter"},"sheets":{"type":"array","description":"The sheets of the report, normally one per tracker or per entity covered.","items":{"type":"object","properties":{"header":{"type":"string","description":"Sheet heading, such as the employee and vehicle it covers."},"entity_ids":{"type":"array","description":"IDs of the entities this sheet covers.","items":{"type":"integer"}},"additional_field":{"type":"string","description":"Extra text carried with the sheet. Often empty."},"sections":{"type":"array","description":"The sections making up the sheet.","items":{"$ref":"#/components/schemas/ReportSection"}}}}}},"additionalProperties":true},"ReportTimeFilter":{"type":"object","description":"Which part of each day, and which days of the week, the report should cover.","properties":{"from":{"type":"string","description":"Start time of day, such as `00:00:00`."},"to":{"type":"string","description":"End time of day, such as `23:59:59`."},"weekdays":{"type":"array","description":"Days of the week to include, where 1 is Monday and 7 is Sunday.","items":{"type":"integer","minimum":1,"maximum":7}}}},"ReportSection":{"type":"object","description":"One block of a report sheet. `type` says which shape it takes: a `table` carries `columns` and `data`, while a `text` block carries `rows` and a `style`.","properties":{"type":{"type":"string","description":"What kind of section this is.","enum":["table","text"]},"header":{"type":"string","description":"Section heading, such as \"Trips\"."},"style":{"type":"string","description":"Rendering style for a text section, such as `small_print`."},"columns":{"type":"array","description":"Column definitions, for a table section. The `field` of each column is the key its cells use in a row.","items":{"type":"object","properties":{"field":{"type":"string","description":"Key this column uses in a row object."},"title":{"type":"string","description":"Column heading as rendered, which may contain a line break."},"align":{"type":"string","description":"How the column is aligned.","enum":["left","right","center"]},"width":{"type":"integer","description":"Relative width of the column."},"weight":{"type":"integer","description":"Relative weight used when laying the table out."},"highlight_min_max":{"type":"boolean","description":"Whether the smallest and largest values in this column are highlighted."}}}},"column_groups":{"type":"array","description":"Groupings applied over the columns. Often empty.","items":{"type":"object","additionalProperties":true}},"data":{"type":"array","description":"The table body, in groups. Each group carries its own `header` and a list of rows.","items":{"type":"object","properties":{"header":{"type":"string","description":"Heading for this group of rows, such as a date."},"rows":{"type":"array","description":"The rows. **Each row is keyed by column `field` name**, so its properties depend on the plugin. Every cell is a `ReportCell`.","items":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/ReportCell"}}}}}},"rows":{"type":"array","description":"Summary rows, for a text section. Unlike table rows these are a flat list, each naming what it measures.","items":{"type":"object","properties":{"name":{"type":"string","description":"What this row measures, such as \"Total trips length, km\"."},"v":{"type":"string","description":"The value as rendered for display."},"raw":{"type":"number","description":"The same value unformatted, for calculation."},"highlight":{"type":"boolean","description":"Whether this row is highlighted."}}}}},"additionalProperties":true},"ReportCell":{"type":"object","description":"One cell of a report table. **`v` is for display and `raw` is for calculation**: `v` is already formatted to the report locale and units, while `raw` carries the underlying number or timestamp.","properties":{"v":{"type":"string","description":"The value as rendered for display."},"raw":{"type":"number","description":"The same value unformatted: a number, or a timestamp in milliseconds."},"type":{"type":"string","description":"What kind of cell this is, such as `value`."},"location":{"type":"object","description":"Where the value happened, on cells that carry a position.","properties":{"lat":{"type":"number","description":"Latitude."},"lng":{"type":"number","description":"Longitude."}}}},"additionalProperties":true}},"responses":{"ResponseError":{"description":"Error response object","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"Always false."},"status":{"type":"object","description":"Error status. Present only when an error occurred.","properties":{"code":{"type":"integer","description":"An error code in this API, not an HTTP code."},"description":{"type":"string","description":"An error description."}}},"errors":{"type":"array","description":"Per-parameter detail, returned with validation failures such as error code 7. A parameter name here may be an internal field name rather than the documented parameter name.","items":{"type":"object","properties":{"parameter":{"type":"string","description":"Name of the parameter that failed validation."},"error":{"type":"string","description":"What was wrong with it."}}}}}}}}}}},"paths":{"/report/tracker/retrieve":{"post":{"tags":["Reports"],"summary":"Retrieve report","description":"Return a generated report as JSON.\n\nThe body of `report` is **plugin-dependent**: its shape follows whichever report plugin generated it.\n\nA report that is still generating returns error 229 rather than partial data, so poll `report/tracker/status` first.\n\nRequires the `reports` right.\n\nAlso accepts GET with the same parameters as query-string values.","operationId":"reportTrackerRetrieve","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"report_id":{"type":"integer","description":"ID of the report.","minimum":1}},"required":["report_id"]}}}},"responses":{"200":{"description":"The generated report","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"report":{"$ref":"#/components/schemas/ReportBody"}}}}}},"400":{"description":"Bad request. The response body carries the API-level error code in `status.code`. Validation failures also include an `errors` array naming each offending parameter.","$ref":"#/components/responses/ResponseError"},"404":{"description":"Error 204: no report with this ID was found. Error 229: the report exists but is still being generated.","$ref":"#/components/responses/ResponseError"},"default":{"$ref":"#/components/responses/ResponseError"}}}}}}
```

#### Errors

These errors come in addition to the [general error codes](/docs/navixy-api/general/errors.md#error-codes):

* 204 - Entity not found, when no report has the given ID.
* 229 - Requested data is not ready yet, when the report exists but is still generating.

***

## Download report

> Return a generated report as a file.\
> \
> The response is the file itself, not a JSON envelope. A report that is still generating returns error 229.\
> \
> Requires the \`reports\` right.\
> \
> Also accepts GET with the same parameters as query-string values.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Reports","description":"Generating tracker reports, fetching them as JSON or as files, and scheduling them to be emailed regularly. All resources under the /report/ path."}],"servers":[{"url":"https://api.eu.navixy.com/v2","description":"Navixy production server on European platform"},{"url":"https://api.us.navixy.com/v2","description":"Navixy production server on American platform"},{"url":"https://api.me.navixy.com/v2","description":"Navixy production server on Middle East platform"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","description":"Either a user session hash or an API key, with the \"NVX \" prefix, for example \"NVX 22eac1c27af4be7b9d04da2ce1af111b\". Obtain a session hash from the userAuth operation, or create an API key from the API keys operations. A small number of operations accept a session hash only and reject an API key with error code 4; each says so in its description.","name":"Authorization","in":"header"}},"responses":{"ResponseError":{"description":"Error response object","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"Always false."},"status":{"type":"object","description":"Error status. Present only when an error occurred.","properties":{"code":{"type":"integer","description":"An error code in this API, not an HTTP code."},"description":{"type":"string","description":"An error description."}}},"errors":{"type":"array","description":"Per-parameter detail, returned with validation failures such as error code 7. A parameter name here may be an internal field name rather than the documented parameter name.","items":{"type":"object","properties":{"parameter":{"type":"string","description":"Name of the parameter that failed validation."},"error":{"type":"string","description":"What was wrong with it."}}}}}}}}}}},"paths":{"/report/tracker/download":{"post":{"tags":["Reports"],"summary":"Download report","description":"Return a generated report as a file.\n\nThe response is the file itself, not a JSON envelope. A report that is still generating returns error 229.\n\nRequires the `reports` right.\n\nAlso accepts GET with the same parameters as query-string values.","operationId":"reportTrackerDownload","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"report_id":{"type":"integer","description":"ID of the report.","minimum":1},"format":{"type":"string","description":"Format to render the report in.","enum":["xls","xlsx","pdf"]},"headless":{"type":"boolean","description":"Optional. Default `false`. When `true`, omit the title page and the table of contents."}},"required":["report_id","format"]}}}},"responses":{"200":{"description":"The rendered report file","content":{"application/pdf":{"schema":{"type":"string","format":"binary"}},"application/vnd.ms-excel":{"schema":{"type":"string","format":"binary"}},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Bad request. The response body carries the API-level error code in `status.code`. Validation failures also include an `errors` array naming each offending parameter.","$ref":"#/components/responses/ResponseError"},"404":{"description":"Error 204: no report with this ID was found. Error 229: the report exists but is still being generated.","$ref":"#/components/responses/ResponseError"},"default":{"$ref":"#/components/responses/ResponseError"}}}}}}
```

#### Errors

These errors come in addition to the [general error codes](/docs/navixy-api/general/errors.md#error-codes):

* 204 - Entity not found, when no report has the given ID.
* 229 - Requested data is not ready yet, when the report exists but is still generating.

***

## List reports

> List every generated and in-progress report belonging to the user, with the parameters each was generated from.\
> \
> \`percent\` tells you which are finished without polling each one.\
> \
> Requires the \`reports\` right.\
> \
> Callable with an empty body. Also accepts GET.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Reports","description":"Generating tracker reports, fetching them as JSON or as files, and scheduling them to be emailed regularly. All resources under the /report/ path."}],"servers":[{"url":"https://api.eu.navixy.com/v2","description":"Navixy production server on European platform"},{"url":"https://api.us.navixy.com/v2","description":"Navixy production server on American platform"},{"url":"https://api.me.navixy.com/v2","description":"Navixy production server on Middle East platform"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","description":"Either a user session hash or an API key, with the \"NVX \" prefix, for example \"NVX 22eac1c27af4be7b9d04da2ce1af111b\". Obtain a session hash from the userAuth operation, or create an API key from the API keys operations. A small number of operations accept a session hash only and reject an API key with error code 4; each says so in its description.","name":"Authorization","in":"header"}},"schemas":{"ReportDescriptor":{"type":"object","description":"A generated or in-progress report, with the parameters it was generated from.","properties":{"id":{"type":"integer","description":"Report ID, used to retrieve, download or delete it."},"title":{"type":"string","description":"Report title."},"created":{"type":"string","description":"When the report was created."},"from":{"type":"string","description":"Start of the reporting period, as given to `generate`."},"to":{"type":"string","description":"End of the reporting period, as given to `generate`."},"time_filter":{"$ref":"#/components/schemas/ReportTimeFilter"},"percent":{"type":"integer","description":"How ready the report is, as a percentage."},"type":{"type":"string","description":"What kind of report this is."},"parameters":{"type":"object","description":"The parameters the report was generated from.","properties":{"geocoder":{"type":"string","description":"Geocoder used for addresses."},"trackers":{"type":"array","description":"Trackers the report covers.","items":{"type":"integer"}},"plugins":{"type":"array","description":"Parameters of every plugin used to generate the report.","items":{"type":"object","additionalProperties":true}},"include_places_in_address":{"type":"boolean","description":"Whether place names are prepended to addresses in this report."},"include_zones_in_address":{"type":"boolean","description":"Whether geofence names are prepended to addresses in this report."},"locale_info":{"type":"object","description":"The locale, timezone and measurement system the report was rendered with.","properties":{"locale":{"type":"string","description":"Locale used."},"time_zone":{"type":"string","description":"Timezone used."},"measurement_system":{"type":"string","description":"Measurement system used."}}}},"additionalProperties":true}}},"ReportTimeFilter":{"type":"object","description":"Which part of each day, and which days of the week, the report should cover.","properties":{"from":{"type":"string","description":"Start time of day, such as `00:00:00`."},"to":{"type":"string","description":"End time of day, such as `23:59:59`."},"weekdays":{"type":"array","description":"Days of the week to include, where 1 is Monday and 7 is Sunday.","items":{"type":"integer","minimum":1,"maximum":7}}}}},"responses":{"ResponseError":{"description":"Error response object","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"Always false."},"status":{"type":"object","description":"Error status. Present only when an error occurred.","properties":{"code":{"type":"integer","description":"An error code in this API, not an HTTP code."},"description":{"type":"string","description":"An error description."}}},"errors":{"type":"array","description":"Per-parameter detail, returned with validation failures such as error code 7. A parameter name here may be an internal field name rather than the documented parameter name.","items":{"type":"object","properties":{"parameter":{"type":"string","description":"Name of the parameter that failed validation."},"error":{"type":"string","description":"What was wrong with it."}}}}}}}}}}},"paths":{"/report/tracker/list":{"post":{"tags":["Reports"],"summary":"List reports","description":"List every generated and in-progress report belonging to the user, with the parameters each was generated from.\n\n`percent` tells you which are finished without polling each one.\n\nRequires the `reports` right.\n\nCallable with an empty body. Also accepts GET.","operationId":"reportTrackerList","responses":{"200":{"description":"The reports","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"list":{"type":"array","items":{"$ref":"#/components/schemas/ReportDescriptor"}}}}}}},"400":{"description":"Bad request. The response body carries the API-level error code in `status.code`. Validation failures also include an `errors` array naming each offending parameter.","$ref":"#/components/responses/ResponseError"},"default":{"$ref":"#/components/responses/ResponseError"}}}}}}
```

***

## Delete report

> Delete a generated report.\
> \
> Requires the \`reports\` right.\
> \
> Also accepts GET with the same parameters as query-string values.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Reports","description":"Generating tracker reports, fetching them as JSON or as files, and scheduling them to be emailed regularly. All resources under the /report/ path."}],"servers":[{"url":"https://api.eu.navixy.com/v2","description":"Navixy production server on European platform"},{"url":"https://api.us.navixy.com/v2","description":"Navixy production server on American platform"},{"url":"https://api.me.navixy.com/v2","description":"Navixy production server on Middle East platform"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","description":"Either a user session hash or an API key, with the \"NVX \" prefix, for example \"NVX 22eac1c27af4be7b9d04da2ce1af111b\". Obtain a session hash from the userAuth operation, or create an API key from the API keys operations. A small number of operations accept a session hash only and reject an API key with error code 4; each says so in its description.","name":"Authorization","in":"header"}},"responses":{"OK":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true}}}}}},"ResponseError":{"description":"Error response object","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"Always false."},"status":{"type":"object","description":"Error status. Present only when an error occurred.","properties":{"code":{"type":"integer","description":"An error code in this API, not an HTTP code."},"description":{"type":"string","description":"An error description."}}},"errors":{"type":"array","description":"Per-parameter detail, returned with validation failures such as error code 7. A parameter name here may be an internal field name rather than the documented parameter name.","items":{"type":"object","properties":{"parameter":{"type":"string","description":"Name of the parameter that failed validation."},"error":{"type":"string","description":"What was wrong with it."}}}}}}}}}}},"paths":{"/report/tracker/delete":{"post":{"tags":["Reports"],"summary":"Delete report","description":"Delete a generated report.\n\nRequires the `reports` right.\n\nAlso accepts GET with the same parameters as query-string values.","operationId":"reportTrackerDelete","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"report_id":{"type":"integer","description":"ID of the report to delete.","minimum":1}},"required":["report_id"]}}}},"responses":{"200":{"description":"Report deleted","$ref":"#/components/responses/OK"},"400":{"description":"Bad request. The response body carries the API-level error code in `status.code`. Validation failures also include an `errors` array naming each offending parameter.","$ref":"#/components/responses/ResponseError"},"403":{"description":"Error 101: the current user has the demo flag, and this operation is disabled in demo mode.","$ref":"#/components/responses/ResponseError"},"default":{"$ref":"#/components/responses/ResponseError"}}}}}}
```

#### Errors

These errors come in addition to the [general error codes](/docs/navixy-api/general/errors.md#error-codes):

* 101 - In demo mode this function is disabled.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://navixy.com/docs/navixy-api/user-api/resources/commons/report/report_tracker.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
