> 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/tracking/tracker.md).

# Tracker

The device registered in the Navixy platform, and the operations that register, read, configure, and command it.

A tracker is a device registered in the Navixy platform: the physical unit fitted to a vehicle or carried by a person, together with everything the platform knows about it. It is the central entity of this API, and most other resources hang off it.

The operations here cover the tracker as a whole. Registering one and replacing its hardware, reading its current state and last readings, sending commands to it, and deleting it. Everything narrower lives on its own page: [sensors](/docs/navixy-api/user-api/resources/tracking/tracker/sensor.md), [counters](/docs/navixy-api/user-api/resources/tracking/tracker/counter.md), [rules](/docs/navixy-api/user-api/resources/tracking/tracker/rules/rule.md), [settings](/docs/navixy-api/user-api/resources/tracking/tracker/settings.md), [groups](/docs/navixy-api/user-api/resources/tracking/tracker/group.md), and the rest of this section.

{% hint style="warning" %}
The number of devices per account is restricted to 25,000, not including the deleted or hidden devices.
{% endhint %}

## Tracker object structure

## The Tracker object

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"components":{"schemas":{"Tracker":{"type":"object","description":"A tracking device registered in the platform. One of the central objects of this API.","properties":{"id":{"type":"integer","description":"Tracker ID, also known as the object ID."},"label":{"type":"string","description":"Tracker label."},"clone":{"type":"boolean","description":"`true` when this tracker is a clone of another."},"group_id":{"type":"integer","description":"Tracker group ID, `0` when the tracker is in no group."},"avatar_file_name":{"type":"string","description":"Avatar file name. Present only when the tracker has one."},"source":{"$ref":"#/components/schemas/TrackerSource"},"tag_bindings":{"type":"array","description":"Tags attached to the tracker. Returned by `tracker/list`, and by the registration and replacement calls.","items":{"$ref":"#/components/schemas/TagBinding"}}}},"TrackerSource":{"type":"object","description":"The physical device behind a tracker.","properties":{"id":{"type":"integer","description":"Source ID."},"device_id":{"type":"string","description":"Device ID, also called the source IMEI. Its accepted shape depends on the model's `id_type`."},"model":{"type":"string","description":"Model code, as returned by `tracker/list_models`."},"blocked":{"type":"boolean","description":"`true` when the tracker is blocked because its tariff ended."},"tariff_id":{"type":"integer","description":"ID of the tracker's tariff."},"status_listing_id":{"type":["integer","null"],"description":"ID of the working status list assigned to this tracker, or null."},"creation_date":{"type":"string","description":"Date the tracker was registered, `YYYY-MM-DD`."},"tariff_end_date":{"type":["string","null"],"description":"Date of the next tariff prolongation, `YYYY-MM-DD`, or null."},"phone":{"type":["string","null"],"description":"Phone number of the device. Null or empty when the device has no GSM module, or uses a bundled SIM whose number is hidden from the user."}}},"TagBinding":{"type":"object","description":"A tag attached to a tracker.","properties":{"tag_id":{"type":"integer","description":"ID of the tag. Unique within a tracker."},"ordinal":{"type":"integer","description":"Position or kind of the tag. Unique within a tracker, maximum 5.","minimum":1,"maximum":5}},"required":["tag_id","ordinal"]}}}}
```

## The TrackerSource object

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"components":{"schemas":{"TrackerSource":{"type":"object","description":"The physical device behind a tracker.","properties":{"id":{"type":"integer","description":"Source ID."},"device_id":{"type":"string","description":"Device ID, also called the source IMEI. Its accepted shape depends on the model's `id_type`."},"model":{"type":"string","description":"Model code, as returned by `tracker/list_models`."},"blocked":{"type":"boolean","description":"`true` when the tracker is blocked because its tariff ended."},"tariff_id":{"type":"integer","description":"ID of the tracker's tariff."},"status_listing_id":{"type":["integer","null"],"description":"ID of the working status list assigned to this tracker, or null."},"creation_date":{"type":"string","description":"Date the tracker was registered, `YYYY-MM-DD`."},"tariff_end_date":{"type":["string","null"],"description":"Date of the next tariff prolongation, `YYYY-MM-DD`, or null."},"phone":{"type":["string","null"],"description":"Phone number of the device. Null or empty when the device has no GSM module, or uses a bundled SIM whose number is hidden from the user."}}}}}}
```

## The TagBinding object

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"components":{"schemas":{"TagBinding":{"type":"object","description":"A tag attached to a tracker.","properties":{"tag_id":{"type":"integer","description":"ID of the tag. Unique within a tracker."},"ordinal":{"type":"integer","description":"Position or kind of the tag. Unique within a tracker, maximum 5.","minimum":1,"maximum":5}},"required":["tag_id","ordinal"]}}}}
```

### Tracker output info

## The TrackerOutput object

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"components":{"schemas":{"TrackerOutput":{"type":"object","description":"A named digital output on a tracker.","properties":{"number":{"type":"integer","description":"Output number."},"title":{"type":"string","description":"User-defined output name."}},"required":["number","title"]}}}}
```

### Tracker input types

A discrete input on a tracker carries one of these types:

* `ignition` - the vehicle's ignition. A tracker can have only one sensor of this type.
* `engine` - the engine's working status.
* `mass` - the vehicle's ground.
* `car_alarm` - expected to be on when the car alarm has triggered.
* `sos_button` - an emergency red button.
* `hood` - on when the engine hood is open.
* `door` - on when a door is open.
* `car_lock` - on when the central lock is open.
* `custom` - a user-defined type. It should normally carry a non-empty `name`.

## API actions

API base path: `/tracker`.

Operations that list no errors of their own return only the [general error codes](/docs/navixy-api/general/errors.md#error-codes).

***

## Read one tracker

> Get a tracker by ID. Reachable from a geo link session as well as a normal one.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Trackers","description":"Trackers, the devices the platform tracks, together with the geo links that share their live location with people outside the account. Resources under the /tracker/ 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":{"Tracker":{"type":"object","description":"A tracking device registered in the platform. One of the central objects of this API.","properties":{"id":{"type":"integer","description":"Tracker ID, also known as the object ID."},"label":{"type":"string","description":"Tracker label."},"clone":{"type":"boolean","description":"`true` when this tracker is a clone of another."},"group_id":{"type":"integer","description":"Tracker group ID, `0` when the tracker is in no group."},"avatar_file_name":{"type":"string","description":"Avatar file name. Present only when the tracker has one."},"source":{"$ref":"#/components/schemas/TrackerSource"},"tag_bindings":{"type":"array","description":"Tags attached to the tracker. Returned by `tracker/list`, and by the registration and replacement calls.","items":{"$ref":"#/components/schemas/TagBinding"}}}},"TrackerSource":{"type":"object","description":"The physical device behind a tracker.","properties":{"id":{"type":"integer","description":"Source ID."},"device_id":{"type":"string","description":"Device ID, also called the source IMEI. Its accepted shape depends on the model's `id_type`."},"model":{"type":"string","description":"Model code, as returned by `tracker/list_models`."},"blocked":{"type":"boolean","description":"`true` when the tracker is blocked because its tariff ended."},"tariff_id":{"type":"integer","description":"ID of the tracker's tariff."},"status_listing_id":{"type":["integer","null"],"description":"ID of the working status list assigned to this tracker, or null."},"creation_date":{"type":"string","description":"Date the tracker was registered, `YYYY-MM-DD`."},"tariff_end_date":{"type":["string","null"],"description":"Date of the next tariff prolongation, `YYYY-MM-DD`, or null."},"phone":{"type":["string","null"],"description":"Phone number of the device. Null or empty when the device has no GSM module, or uses a bundled SIM whose number is hidden from the user."}}},"TagBinding":{"type":"object","description":"A tag attached to a tracker.","properties":{"tag_id":{"type":"integer","description":"ID of the tag. Unique within a tracker."},"ordinal":{"type":"integer","description":"Position or kind of the tag. Unique within a tracker, maximum 5.","minimum":1,"maximum":5}},"required":["tag_id","ordinal"]}},"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":{"/tracker/read":{"post":{"tags":["Trackers"],"summary":"Read one tracker","description":"Get a tracker by ID. Reachable from a geo link session as well as a normal one.","operationId":"trackerRead","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tracker_id":{"type":"integer","description":"ID of the tracker, also known as the object ID. Must belong to the current account. **A blocked tracker is accepted here**, unlike most operations taking a tracker ID."}},"required":["tracker_id"]}}}},"responses":{"200":{"description":"The tracker","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"value":{"$ref":"#/components/schemas/Tracker"}}}}}},"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 201: no tracker with this ID belongs to the account.","$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):

* 201 - No tracker with this ID belongs to the account.

***

This call is walked through in [how to get a list of GPS trackers](/docs/navixy-api/user-api/guides/data-retrieval/get-tracker-list.md).

## List trackers

> Get the account's trackers, optionally filtered by label. This is the only call that returns \`tag\_bindings\` on every tracker. Reachable from a geo link session as well as a normal one.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Trackers","description":"Trackers, the devices the platform tracks, together with the geo links that share their live location with people outside the account. Resources under the /tracker/ 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":{"Tracker":{"type":"object","description":"A tracking device registered in the platform. One of the central objects of this API.","properties":{"id":{"type":"integer","description":"Tracker ID, also known as the object ID."},"label":{"type":"string","description":"Tracker label."},"clone":{"type":"boolean","description":"`true` when this tracker is a clone of another."},"group_id":{"type":"integer","description":"Tracker group ID, `0` when the tracker is in no group."},"avatar_file_name":{"type":"string","description":"Avatar file name. Present only when the tracker has one."},"source":{"$ref":"#/components/schemas/TrackerSource"},"tag_bindings":{"type":"array","description":"Tags attached to the tracker. Returned by `tracker/list`, and by the registration and replacement calls.","items":{"$ref":"#/components/schemas/TagBinding"}}}},"TrackerSource":{"type":"object","description":"The physical device behind a tracker.","properties":{"id":{"type":"integer","description":"Source ID."},"device_id":{"type":"string","description":"Device ID, also called the source IMEI. Its accepted shape depends on the model's `id_type`."},"model":{"type":"string","description":"Model code, as returned by `tracker/list_models`."},"blocked":{"type":"boolean","description":"`true` when the tracker is blocked because its tariff ended."},"tariff_id":{"type":"integer","description":"ID of the tracker's tariff."},"status_listing_id":{"type":["integer","null"],"description":"ID of the working status list assigned to this tracker, or null."},"creation_date":{"type":"string","description":"Date the tracker was registered, `YYYY-MM-DD`."},"tariff_end_date":{"type":["string","null"],"description":"Date of the next tariff prolongation, `YYYY-MM-DD`, or null."},"phone":{"type":["string","null"],"description":"Phone number of the device. Null or empty when the device has no GSM module, or uses a bundled SIM whose number is hidden from the user."}}},"TagBinding":{"type":"object","description":"A tag attached to a tracker.","properties":{"tag_id":{"type":"integer","description":"ID of the tag. Unique within a tracker."},"ordinal":{"type":"integer","description":"Position or kind of the tag. Unique within a tracker, maximum 5.","minimum":1,"maximum":5}},"required":["tag_id","ordinal"]}},"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":{"/tracker/list":{"post":{"tags":["Trackers"],"summary":"List trackers","description":"Get the account's trackers, optionally filtered by label. This is the only call that returns `tag_bindings` on every tracker. Reachable from a geo link session as well as a normal one.","operationId":"trackerList","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"labels":{"type":"array","description":"Optional. Label filters. A tracker is returned when its label contains any one of them, so `[\"aa\", \"b\"]` matches labels `aa1` and `bb2`. Between 1 and 1024 entries, no nulls and no duplicates, each 1 to 60 characters.","items":{"type":"string","description":"A label fragment to match.","minLength":1,"maxLength":60},"minItems":1,"maxItems":1024,"uniqueItems":true}}}}}},"responses":{"200":{"description":"The account's trackers","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/Tracker"}}}}}}},"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"}}}}}}
```

***

*Required sub-user rights:* `tracker_register`.

## Corrupt a tracker

> Mark a tracker deleted and corrupt its source, device ID and phone, freeing that device ID and phone number for reuse.\
> \
> This is not reversible. The tracker must not be currently connected to the server.\
> \
> Requires the \`tracker\_register\` right.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Trackers","description":"Trackers, the devices the platform tracks, together with the geo links that share their live location with people outside the account. Resources under the /tracker/ 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":{"/tracker/corrupt":{"post":{"tags":["Trackers"],"summary":"Corrupt a tracker","description":"Mark a tracker deleted and corrupt its source, device ID and phone, freeing that device ID and phone number for reuse.\n\nThis is not reversible. The tracker must not be currently connected to the server.\n\nRequires the `tracker_register` right.","operationId":"trackerCorrupt","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tracker_id":{"type":"integer","description":"ID of the tracker, also known as the object ID. Must belong to the current account and not be blocked."}},"required":["tracker_id"]}}}},"responses":{"200":{"description":"The tracker was corrupted","$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 13: the tracker is already connected to the server, or the user lacks the right. Error 201: no tracker with this ID belongs to the account. Error 208: the tracker exists but is blocked, normally because its tariff ended. Error 219: the tracker is itself a clone. Error 243: the device is already connected. Error 252: the device is already corrupted.","$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):

* 13 - The tracker is already connected to the server, or the user lacks the right.
* 201 - No tracker with this ID belongs to the account.
* 208 - The tracker exists but is blocked, normally because its tariff ended.
* 219 - The tracker is itself a clone.
* 243 - The device is already connected.
* 252 - The device is already corrupted.

***

*Required sub-user rights:* `admin`, available only to master users.

## Delete a clone

> Delete a tracker, but only when it is a clone. Passing the ID of an original tracker fails with error 249; use \`tracker/corrupt\` for those.\
> \
> Error 203 carries the blocking references in the response body, as a \`rules\` or \`vehicles\` array of IDs. Read it to find what to detach first.\
> \
> Requires the \`admin\` right.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Trackers","description":"Trackers, the devices the platform tracks, together with the geo links that share their live location with people outside the account. Resources under the /tracker/ 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":{"/tracker/delete":{"post":{"tags":["Trackers"],"summary":"Delete a clone","description":"Delete a tracker, but only when it is a clone. Passing the ID of an original tracker fails with error 249; use `tracker/corrupt` for those.\n\nError 203 carries the blocking references in the response body, as a `rules` or `vehicles` array of IDs. Read it to find what to detach first.\n\nRequires the `admin` right.","operationId":"trackerDelete","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tracker_id":{"type":"integer","description":"ID of the tracker, also known as the object ID. Must belong to the current account. **A blocked tracker is accepted here**, unlike most operations taking a tracker ID."}},"required":["tracker_id"]}}}},"responses":{"200":{"description":"The clone was 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 201: no tracker with this ID belongs to the account. Error 203: rules or vehicles are still associated with the tracker, and the body names them. Error 249: the tracker is not a clone.","$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):

* 201 - No tracker with this ID belongs to the account.
* 249 - The tracker is not a clone. This call deletes clones only.
* 203 - Delete entity associated with. The response body carries the blocking references, so a caller can detach them and retry:

```json
{
  "success": false,
  "status": {
    "code": 203,
    "description": "Delete entity associated with"
  },
  "rules": [10]
}
```

or

```json
{
  "success": false,
  "status": {
    "code": 203,
    "description": "Delete entity associated with"
  },
  "vehicles": [11]
}
```

`rules` lists the associated rule IDs and `vehicles` the associated vehicle IDs.

***

*Required sub-user rights:* `tracker_configure`.

## Change the SIM phone and APN

> Change the phone number of the SIM in the device and set the matching APN.\
> \
> Requires the \`tracker\_configure\` right.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Trackers","description":"Trackers, the devices the platform tracks, together with the geo links that share their live location with people outside the account. Resources under the /tracker/ 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":{"/tracker/change_phone":{"post":{"tags":["Trackers"],"summary":"Change the SIM phone and APN","description":"Change the phone number of the SIM in the device and set the matching APN.\n\nRequires the `tracker_configure` right.","operationId":"trackerChangePhone","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tracker_id":{"type":"integer","description":"ID of the tracker, also known as the object ID. Must belong to the current account. **A blocked tracker is accepted here**, unlike most operations taking a tracker ID."},"phone":{"type":"string","description":"Phone number of the SIM, in international format without a leading `+`."},"apn_name":{"type":"string","description":"GPRS APN name for the SIM.","maxLength":40},"apn_user":{"type":"string","description":"GPRS APN user. May be empty.","maxLength":40},"apn_password":{"type":"string","description":"GPRS APN password. May be empty.","maxLength":40}},"required":["tracker_id","phone"]}}}},"responses":{"200":{"description":"The phone and APN were changed","$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 201: no tracker with this ID belongs to the account. Error 208: the tracker exists but is blocked, normally because its tariff ended. Error 214: the device has no GSM module. Error 219: the tracker is a clone. Error 223: the phone number is already used by another device. Error 241: the number belongs to a SIM bundled with the device, which cannot be changed here.","$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):

* 201 - No tracker with this ID belongs to the account.
* 208 - The tracker exists but is blocked, normally because its tariff ended.
* 214 - The device has no GSM module.
* 219 - The tracker is a clone.
* 223 - The phone number is already used by another device.
* 241 - The number belongs to a SIM bundled with the device, which cannot be changed here.

***

## Read CAN and OBD values

> Get the last CAN and OBD sensor readings and state values received from the device. Available to demo accounts.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Trackers","description":"Trackers, the devices the platform tracks, together with the geo links that share their live location with people outside the account. Resources under the /tracker/ 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":{"SensorValue":{"type":"object","description":"The last reading of one sensor. Returned by the `get_fuel`, `get_readings` and `get_diagnostics` calls, which differ only in which sensors they select.","properties":{"label":{"type":"string","description":"Sensor label."},"name":{"type":"string","description":"Name of the sensor's raw input. The full set is available from `tracker/sensor/input_name/list`."},"type":{"type":"string","description":"Type of quantity the sensor measures."},"value":{"type":"number","description":"Reading, in the units named by `units_type`."},"units_type":{"type":"string","description":"Unit of measurement of the sensor input."},"units":{"type":"string","description":"User label for the sensor's units."},"converted_units_type":{"type":["string","null"],"description":"Unit of the measurement system the user prefers, from their account settings. Null when no conversion is needed, meaning `units_type` already belongs to that system."},"converted_value":{"type":["number","null"],"description":"The reading in `converted_units_type`. Null when no conversion is needed."}}}},"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":{"/tracker/get_diagnostics":{"post":{"tags":["Trackers"],"summary":"Read CAN and OBD values","description":"Get the last CAN and OBD sensor readings and state values received from the device. Available to demo accounts.","operationId":"trackerGetDiagnostics","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tracker_id":{"type":"integer","description":"ID of the tracker, also known as the object ID. Must belong to the current account and not be blocked."}},"required":["tracker_id"]}}}},"responses":{"200":{"description":"The diagnostic readings","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"user_time":{"type":"string","description":"Current time in the account timezone."},"inputs":{"type":"array","items":{"$ref":"#/components/schemas/SensorValue"}},"states":{"type":["object","null"],"description":"Last state values, keyed by state name, or null. The value types differ per state.","additionalProperties":true},"update_time":{"type":"string","description":"When this data was last updated."}}}}}},"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 201: no tracker with this ID belongs to the account. Error 208: the tracker exists but is blocked, normally because its tariff ended.","$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):

* 201 - No tracker with this ID belongs to the account.
* 208 - The tracker exists but is blocked, normally because its tariff ended.

#### Input names

These can appear in `inputs`:

* `obd_consumption`
* `obd_rpm`
* `obd_fuel`
* `obd_coolant_t`
* `obd_intake_air_t`
* `obd_throttle`
* `obd_speed`
* `obd_engine_load`
* `obd_absolute_load_value` (normalised air mass per intake stroke, in percent)
* `obd_control_module_voltage` (in volts)
* `obd_time_since_engine_start` (run time since engine start, in seconds)
* `obd_mil_run_time` (in minutes)
* `can_engine_temp`
* `can_engine_hours`
* `can_mileage`
* `can_throttle`
* `can_consumption`
* `can_rpm`
* `can_speed`
* `can_r_prefix`
* `can_coolant_t`
* `can_intake_air_t`
* `can_engine_load`
* `can_adblue_level`
* `can_fuel_rate` (instant fuel consumption, in litres per hour)
* `raw_can_x`, where x is 1 to 16
* `can_axle_load_x`, where x is 1 to 15

#### State names

These can appear in `states`:

* `obd_vin` (string)
* `obd_dtc_number` (integer, the number of DTC codes)
* `obd_dtc_codes` (string, the DTC codes)
* `obd_dtc_cleared_distance` (double, distance travelled since codes were cleared, in km)
* `obd_mil_activated_distance` (double, distance travelled with MIL on, in km)
* `hardware_key` (string, driver identification key)
* `external_power_state` (string, connected or disconnected)
* `driver_ident_state` (string, identified or not identified)
* `tacho_vin` (string)
* `tacho_card1_sn` (string)
* `tacho_card2_sn` (string)
* `tacho_vin_last_download` (string)
* `tacho_card1_last_download` (string)
* `tacho_card2_last_download` (string)
* `can_hood_state` (string, 0 for close or 1 for open)
* `can_airbag_state` (string, 0 for normal or 1 for malfunction)
* `can_trunk_state` (string, 0 for close or 1 for open)
* `can_seat_belt_driver_state` (string, 0 for untied or 1 for tied)
* `can_seat_belt_passenger_state` (string, 0 for untied or 1 for tied)
* `can_door_state` (string, 0 for close or 1 for open)
* `can_door_driver_state` (string, 0 for close or 1 for open)
* `can_door_passenger_state` (string, 0 for close or 1 for open)

Every input, state, and definition can also be looked up with [`tracker/sensor/input_name/list`](/docs/navixy-api/user-api/resources/tracking/tracker/sensor/input_name.md#post-tracker-sensor-input_name-list).

***

## Read fuel level

> Get the current fuel level of the tracker's tanks, from its fuel-related sensors. Available to demo accounts.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Trackers","description":"Trackers, the devices the platform tracks, together with the geo links that share their live location with people outside the account. Resources under the /tracker/ 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":{"SensorValue":{"type":"object","description":"The last reading of one sensor. Returned by the `get_fuel`, `get_readings` and `get_diagnostics` calls, which differ only in which sensors they select.","properties":{"label":{"type":"string","description":"Sensor label."},"name":{"type":"string","description":"Name of the sensor's raw input. The full set is available from `tracker/sensor/input_name/list`."},"type":{"type":"string","description":"Type of quantity the sensor measures."},"value":{"type":"number","description":"Reading, in the units named by `units_type`."},"units_type":{"type":"string","description":"Unit of measurement of the sensor input."},"units":{"type":"string","description":"User label for the sensor's units."},"converted_units_type":{"type":["string","null"],"description":"Unit of the measurement system the user prefers, from their account settings. Null when no conversion is needed, meaning `units_type` already belongs to that system."},"converted_value":{"type":["number","null"],"description":"The reading in `converted_units_type`. Null when no conversion is needed."}}}},"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":{"/tracker/get_fuel":{"post":{"tags":["Trackers"],"summary":"Read fuel level","description":"Get the current fuel level of the tracker's tanks, from its fuel-related sensors. Available to demo accounts.","operationId":"trackerGetFuel","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tracker_id":{"type":"integer","description":"ID of the tracker, also known as the object ID. Must belong to the current account and not be blocked."}},"required":["tracker_id"]}}}},"responses":{"200":{"description":"The fuel readings","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"user_time":{"type":"string","description":"Current time in the account timezone."},"inputs":{"type":"array","description":"Last readings of the fuel-related sensors.","items":{"$ref":"#/components/schemas/SensorValue"}},"update_time":{"type":["string","null"],"description":"When this data was last updated. Null when the tracker has no readings of this kind."}}}}}},"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 201: no tracker with this ID belongs to the account. Error 208: the tracker exists but is blocked, normally because its tariff ended.","$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):

* 201 - No tracker with this ID belongs to the account.
* 208 - The tracker exists but is blocked, normally because its tariff ended.

#### Input names

These can appear in `inputs`:

* `fuel_level`
* `fuel_frequency`
* `lls_level_x`, where x is 1 to 16
* `fuel_consumption`
* `rs232_x`, where x is 1 to 6
* `can_fuel` (fuel level in percent or in unknown units)
* `can_fuel_2` (fuel level in percent or in unknown units)
* `can_fuel_litres` (fuel level in litres)
* `can_fuel_economy` (fuel economy in km per litre)

***

## Read digital inputs

> Get the current state of a tracker's digital inputs, and of any semantic inputs bound to them, such as ignition, buttons or car alarms. Available to demo accounts.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Trackers","description":"Trackers, the devices the platform tracks, together with the geo links that share their live location with people outside the account. Resources under the /tracker/ 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":{"TrackerInputState":{"type":"object","description":"A semantic input bound to a digital input.","properties":{"type":{"type":"string","description":"One of the predefined semantic input types.","enum":["ignition","engine","mass","car_alarm","sos_button","hood","door","car_lock","custom"]},"name":{"type":["string","null"],"description":"User-defined name for the semantic input, or null."},"status":{"type":"boolean","description":"`true` when the input is active."},"input_number":{"type":"integer","description":"Number of the associated discrete input."}}}},"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":{"/tracker/get_inputs":{"post":{"tags":["Trackers"],"summary":"Read digital inputs","description":"Get the current state of a tracker's digital inputs, and of any semantic inputs bound to them, such as ignition, buttons or car alarms. Available to demo accounts.","operationId":"trackerGetInputs","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tracker_id":{"type":"integer","description":"ID of the tracker, also known as the object ID. Must belong to the current account and not be blocked."}},"required":["tracker_id"]}}}},"responses":{"200":{"description":"The input state","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"user_time":{"type":"string","description":"Current time in the account timezone."},"inputs":{"type":"array","description":"State of every digital input. `[true, true, false]` means inputs 1 and 2 are on and input 3 is off.","items":{"type":"boolean"}},"states":{"type":"array","description":"Semantic inputs bound to those digital inputs.","items":{"$ref":"#/components/schemas/TrackerInputState"}},"update_time":{"type":"string","description":"When this data was last updated."}}}}}},"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 201: no tracker with this ID belongs to the account. Error 208: the tracker exists but is blocked, normally because its tariff ended.","$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):

* 201 - No tracker with this ID belongs to the account.
* 208 - The tracker exists but is blocked, normally because its tariff ended.

***

## Read digital inputs for several trackers

> The many-tracker form of \`tracker/get\_inputs\`. Available to demo accounts.\
> \
> \`trackers\` is optional: \*\*omitting it returns every tracker on the account\*\*.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Trackers","description":"Trackers, the devices the platform tracks, together with the geo links that share their live location with people outside the account. Resources under the /tracker/ 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":{"TrackerInputInfo":{"type":"object","description":"Digital and semantic input state for one tracker.","properties":{"inputs":{"type":"array","description":"State of every digital input. `[true, true, false]` means inputs 1 and 2 are on and input 3 is off.","items":{"type":"boolean"}},"states":{"type":"array","description":"Semantic inputs bound to those digital inputs.","items":{"$ref":"#/components/schemas/TrackerInputState"}},"update_time":{"type":"string","description":"When this data was last updated."}}},"TrackerInputState":{"type":"object","description":"A semantic input bound to a digital input.","properties":{"type":{"type":"string","description":"One of the predefined semantic input types.","enum":["ignition","engine","mass","car_alarm","sos_button","hood","door","car_lock","custom"]},"name":{"type":["string","null"],"description":"User-defined name for the semantic input, or null."},"status":{"type":"boolean","description":"`true` when the input is active."},"input_number":{"type":"integer","description":"Number of the associated discrete input."}}}},"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":{"/tracker/batch_get_inputs":{"post":{"tags":["Trackers"],"summary":"Read digital inputs for several trackers","description":"The many-tracker form of `tracker/get_inputs`. Available to demo accounts.\n\n`trackers` is optional: **omitting it returns every tracker on the account**.","operationId":"trackerBatchGetInputs","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"trackers":{"type":"array","description":"Optional. Tracker IDs. Omit for every tracker on the account.","items":{"type":"integer"}}}}}}},"responses":{"200":{"description":"Input state per tracker","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"user_time":{"type":"string","description":"Current time in the account timezone."},"data":{"type":"object","description":"Input info keyed by tracker ID.","additionalProperties":{"$ref":"#/components/schemas/TrackerInputInfo"}}}}}}},"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 217: one of the listed trackers does not exist or is blocked. Error 221: too many IDs were passed.","$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):

* 217 - One of the listed trackers does not exist or is blocked.
* 221 - Too many IDs were passed.

***

## Read outputs

> Get a tracker's outputs and their user-defined names. Available to demo accounts.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Trackers","description":"Trackers, the devices the platform tracks, together with the geo links that share their live location with people outside the account. Resources under the /tracker/ 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":{"TrackerOutput":{"type":"object","description":"A named digital output on a tracker.","properties":{"number":{"type":"integer","description":"Output number."},"title":{"type":"string","description":"User-defined output name."}},"required":["number","title"]}},"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":{"/tracker/get_outputs":{"post":{"tags":["Trackers"],"summary":"Read outputs","description":"Get a tracker's outputs and their user-defined names. Available to demo accounts.","operationId":"trackerGetOutputs","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tracker_id":{"type":"integer","description":"ID of the tracker, also known as the object ID. Must belong to the current account and not be blocked."}},"required":["tracker_id"]}}}},"responses":{"200":{"description":"The outputs","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"result":{"type":"array","items":{"$ref":"#/components/schemas/TrackerOutput"}}}}}}},"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 201: no tracker with this ID belongs to the account. Error 208: the tracker exists but is blocked, normally because its tariff ended.","$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):

* 201 - No tracker with this ID belongs to the account.
* 208 - The tracker exists but is blocked, normally because its tariff ended.

***

## Read outputs for several trackers

> The many-tracker form of \`tracker/get\_outputs\`. Available to demo accounts.\
> \
> \`trackers\` is optional: \*\*omitting it returns every tracker on the account\*\*.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Trackers","description":"Trackers, the devices the platform tracks, together with the geo links that share their live location with people outside the account. Resources under the /tracker/ 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":{"TrackerOutput":{"type":"object","description":"A named digital output on a tracker.","properties":{"number":{"type":"integer","description":"Output number."},"title":{"type":"string","description":"User-defined output name."}},"required":["number","title"]}},"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":{"/tracker/batch_get_outputs":{"post":{"tags":["Trackers"],"summary":"Read outputs for several trackers","description":"The many-tracker form of `tracker/get_outputs`. Available to demo accounts.\n\n`trackers` is optional: **omitting it returns every tracker on the account**.","operationId":"trackerBatchGetOutputs","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"trackers":{"type":"array","description":"Optional. Tracker IDs. Omit for every tracker on the account.","items":{"type":"integer"}}}}}}},"responses":{"200":{"description":"Outputs per tracker","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"result":{"type":"object","description":"Output lists keyed by tracker ID.","additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/TrackerOutput"}}}}}}}},"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 217: one of the listed trackers does not exist or is blocked. Error 221: too many IDs were passed.","$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):

* 217 - One of the listed trackers does not exist or is blocked.
* 221 - Too many IDs were passed.

***

*Required sub-user rights:* `tracker_update`.

## Rename an output

> Change the user-defined name of one output. This renames it only; it does not switch the output on or off.\
> \
> Requires the \`tracker\_update\` right.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Trackers","description":"Trackers, the devices the platform tracks, together with the geo links that share their live location with people outside the account. Resources under the /tracker/ 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":{"TrackerOutput":{"type":"object","description":"A named digital output on a tracker.","properties":{"number":{"type":"integer","description":"Output number."},"title":{"type":"string","description":"User-defined output name."}},"required":["number","title"]}},"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":{"/tracker/output/update":{"post":{"tags":["Trackers"],"summary":"Rename an output","description":"Change the user-defined name of one output. This renames it only; it does not switch the output on or off.\n\nRequires the `tracker_update` right.","operationId":"trackerOutputUpdate","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tracker_id":{"type":"integer","description":"ID of the tracker, also known as the object ID. Must belong to the current account and not be blocked."},"tracker_output":{"allOf":[{"$ref":"#/components/schemas/TrackerOutput"}],"description":"The output to rename, identified by its `number`, carrying the new `title`."}},"required":["tracker_id","tracker_output"]}}}},"responses":{"200":{"description":"The output was renamed","$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 201: no tracker with this ID belongs to the account. Error 208: the tracker exists but is blocked, normally because its tariff ended.","$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):

* 201 - No tracker with this ID belongs to the account.
* 208 - The tracker exists but is blocked, normally because its tariff ended.

***

## Read the last GPS point

> Get the tracker's last point fixed by GPS. Points located by GSM LBS are excluded, so this can be older than the position in \`tracker/get\_state\`. Reachable from a geo link session as well as a normal one.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Trackers","description":"Trackers, the devices the platform tracks, together with the geo links that share their live location with people outside the account. Resources under the /tracker/ 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":{"/tracker/get_last_gps_point":{"post":{"tags":["Trackers"],"summary":"Read the last GPS point","description":"Get the tracker's last point fixed by GPS. Points located by GSM LBS are excluded, so this can be older than the position in `tracker/get_state`. Reachable from a geo link session as well as a normal one.","operationId":"trackerGetLastGpsPoint","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tracker_id":{"type":"integer","description":"ID of the tracker, also known as the object ID. Must belong to the current account and not be blocked."}},"required":["tracker_id"]}}}},"responses":{"200":{"description":"The last GPS point","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"value":{"type":"object","description":"A track point.","properties":{"get_time":{"type":"string","description":"GPS timestamp of the point, in the account timezone."},"heading":{"type":"integer","description":"Direction bearing in degrees, 0 to 360."},"lat":{"type":"number","description":"Latitude."},"lng":{"type":"number","description":"Longitude."},"satellites":{"type":"integer","description":"Number of satellites used for this fix."},"speed":{"type":"integer","description":"Speed in km/h."},"precision":{"type":"integer","description":"Precision in metres. Present only when it is not zero."}}}}}}}},"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 201: no tracker with this ID belongs to the account. Error 208: the tracker exists but is blocked, normally because its tariff ended.","$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):

* 201 - No tracker with this ID belongs to the account.
* 208 - The tracker exists but is blocked, normally because its tariff ended.

***

## Search tracker location

> Reverse geocoding for a tracker: return the address at its current GPS position. Same parameters and response as \`geocoder/search\_location\`, with \`tracker\_id\` in place of the coordinates. Reachable from a geo link session as well as a normal one.\
> \
> From a geo link session \`geocoder\` and \`goal\` are ignored: the account's geocoder is used, and a position outside the link's bounding zones counts as no position, the same rule as \`tracker/get\_last\_gps\_point\`.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Trackers","description":"Trackers, the devices the platform tracks, together with the geo links that share their live location with people outside the account. Resources under the /tracker/ 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":{"AddressDetails":{"type":"object","description":"An address broken into its parts. Returned only when `with_details` is set, and each part is present only when the geocoder resolved it.","properties":{"country":{"type":"string","description":"Optional. Country."},"province":{"type":"string","description":"Optional. Province, region or state."},"locality":{"type":"string","description":"Optional. City, town or village."},"street":{"type":"string","description":"Optional. Street."},"house":{"type":"string","description":"Optional. House number."},"postcode":{"type":"string","description":"Optional. Postal code."},"bounds":{"allOf":[{"$ref":"#/components/schemas/GeoBounds"}],"description":"Optional. The smallest box that fully contains the result."}}},"GeoBounds":{"type":"object","description":"A bounding box, given by its north-west and south-east corners.","properties":{"nw":{"type":"object","description":"North-west corner.","properties":{"lat":{"type":"number","description":"Latitude."},"lng":{"type":"number","description":"Longitude."}}},"se":{"type":"object","description":"South-east corner.","properties":{"lat":{"type":"number","description":"Latitude."},"lng":{"type":"number","description":"Longitude."}}}}}},"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":{"/tracker/search_location":{"post":{"tags":["Trackers"],"summary":"Search tracker location","description":"Reverse geocoding for a tracker: return the address at its current GPS position. Same parameters and response as `geocoder/search_location`, with `tracker_id` in place of the coordinates. Reachable from a geo link session as well as a normal one.\n\nFrom a geo link session `geocoder` and `goal` are ignored: the account's geocoder is used, and a position outside the link's bounding zones counts as no position, the same rule as `tracker/get_last_gps_point`.","operationId":"trackerSearchLocation","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tracker_id":{"type":"integer","description":"ID of the tracker, also known as the object ID. Must belong to the current account and not be blocked."},"geocoder":{"type":"string","description":"Optional. Preferred geocoder. Accounts with premium GIS always use Google regardless of this value. Ignored from a geo link session.","enum":["google","yandex","progorod","osm","doublegis","locationiq"]},"lang":{"type":"string","description":"Optional. ISO 639 language code for the result, at most 5 characters, for example `en` or `en_US`. Defaults to the session language.","maxLength":5},"with_details":{"type":"boolean","description":"Optional. Default `false`. Include the parsed `details` object in the response."},"goal":{"type":"string","description":"Optional. Default `ui`. What the lookup is for, which decides the geocoder chosen. Use `ui_user_action` for a lookup a user asked for directly, `ui` otherwise. **An unrecognised value is silently treated as `ui`.** Ignored from a geo link session.","enum":["ui","ui_user_action"]}},"required":["tracker_id"]}}}},"responses":{"200":{"description":"The address","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"value":{"type":"string","description":"The address at the tracker's current position."},"details":{"allOf":[{"$ref":"#/components/schemas/AddressDetails"}],"description":"Present only when `with_details` was set."}}}}}},"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 201: no tracker with this ID belongs to the account, or the tracker has no valid GPS position yet. Error 208: the tracker exists but is blocked, normally because its tariff ended.","$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):

* 201 - No tracker with this ID belongs to the account, or the tracker has no valid GPS position yet.
* 208 - The tracker exists but is blocked, normally because its tariff ended.

***

## Read general sensor values

> Get the last values of the tracker's metering sensors, excluding CAN and OBD sensors and fuel sensors. Use \`tracker/get\_fuel\` for fuel and \`tracker/get\_diagnostics\` for CAN and OBD. Available to demo accounts.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Trackers","description":"Trackers, the devices the platform tracks, together with the geo links that share their live location with people outside the account. Resources under the /tracker/ 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":{"SensorValue":{"type":"object","description":"The last reading of one sensor. Returned by the `get_fuel`, `get_readings` and `get_diagnostics` calls, which differ only in which sensors they select.","properties":{"label":{"type":"string","description":"Sensor label."},"name":{"type":"string","description":"Name of the sensor's raw input. The full set is available from `tracker/sensor/input_name/list`."},"type":{"type":"string","description":"Type of quantity the sensor measures."},"value":{"type":"number","description":"Reading, in the units named by `units_type`."},"units_type":{"type":"string","description":"Unit of measurement of the sensor input."},"units":{"type":"string","description":"User label for the sensor's units."},"converted_units_type":{"type":["string","null"],"description":"Unit of the measurement system the user prefers, from their account settings. Null when no conversion is needed, meaning `units_type` already belongs to that system."},"converted_value":{"type":["number","null"],"description":"The reading in `converted_units_type`. Null when no conversion is needed."}}}},"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":{"/tracker/get_readings":{"post":{"tags":["Trackers"],"summary":"Read general sensor values","description":"Get the last values of the tracker's metering sensors, excluding CAN and OBD sensors and fuel sensors. Use `tracker/get_fuel` for fuel and `tracker/get_diagnostics` for CAN and OBD. Available to demo accounts.","operationId":"trackerGetReadings","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tracker_id":{"type":"integer","description":"ID of the tracker, also known as the object ID. Must belong to the current account and not be blocked."}},"required":["tracker_id"]}}}},"responses":{"200":{"description":"The sensor readings","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"user_time":{"type":"string","description":"Current time in the account timezone."},"inputs":{"type":"array","items":{"$ref":"#/components/schemas/SensorValue"}},"update_time":{"type":["string","null"],"description":"When this data was last updated. Null when the tracker has no readings of this kind."}}}}}},"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 201: no tracker with this ID belongs to the account. Error 208: the tracker exists but is blocked, normally because its tariff ended.","$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):

* 201 - No tracker with this ID belongs to the account.
* 208 - The tracker exists but is blocked, normally because its tariff ended.

#### Input names

These can appear in `inputs`:

* `composite`
* `input_status`
* `analog_x`, where x is 1 to 8
* `freq_x`, where x is 1 to 8
* `impulse_counter_x`, where x is 1 to 8
* `fuel_temperature`
* `lls_temperature_x`, where x is 1 to 16
* `rs232_x`, where x is 1 to 6
* `board_voltage`
* `temp_sensor`
* `ext_temp_sensor_x`, where x is 1 to 10

***

## Read tracker state

> Get the current state of one tracker: GPS, GSM, inputs, outputs, battery and movement. Reachable from a geo link or delivery session as well as a normal one.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Trackers","description":"Trackers, the devices the platform tracks, together with the geo links that share their live location with people outside the account. Resources under the /tracker/ 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":{"TrackerState":{"type":"object","description":"Current state of a tracker: GPS, GSM, inputs, outputs and movement.","properties":{"source_id":{"type":"integer","description":"Tracker data source ID."},"gps":{"type":"object","description":"Last known GPS fix. Note that `lat` and `lng` sit inside `location`, not directly on this object.","properties":{"updated":{"type":["string","null"],"description":"When the coordinates were last updated, in the account timezone, or null when never."},"signal_level":{"type":["integer","null"],"description":"GPS signal level as a percentage, or null when the device cannot report it."},"location":{"type":"object","description":"The coordinates themselves.","properties":{"lat":{"type":"number","description":"Latitude."},"lng":{"type":"number","description":"Longitude."}}},"heading":{"type":"integer","description":"Direction bearing in degrees, 0 to 360."},"speed":{"type":"integer","description":"Speed in km/h."},"alt":{"type":"integer","description":"Altitude in metres."},"precision":{"type":"integer","description":"Precision in metres. Present only for some devices."},"gsm_lbs":{"type":"boolean","description":"`true` when the location came from GSM LBS rather than GPS. Present only when it applies."}}},"connection_status":{"type":"string","description":"Device connection status.","enum":["signal_lost","just_registered","just_replaced","offline","idle","active"]},"movement_status":{"type":"string","description":"Movement status.","enum":["moving","stopped","parked"]},"movement_status_update":{"type":["string","null"],"description":"When the movement status last changed, or null."},"ignition":{"type":"boolean","description":"State of the vehicle's ignition sensor, real or virtual. Present only for devices that report it."},"ignition_update":{"type":"string","description":"When the ignition state last changed. Present only alongside `ignition`."},"gsm":{"type":"object","description":"GSM status. Null for devices that cannot report it.","properties":{"updated":{"type":["string","null"],"description":"When the GSM status was last updated, or null."},"signal_level":{"type":["integer","null"],"description":"GSM signal level as a percentage, or null."},"network_name":{"type":["string","null"],"description":"GSM network name, or null."},"roaming":{"type":["boolean","null"],"description":"Roaming state, or null when the device cannot report it."}}},"last_update":{"type":["string","null"],"description":"When the device state was last updated, or null."},"battery_level":{"type":["integer","null"],"description":"Battery level as a percentage, or null when the device cannot report it."},"battery_update":{"type":["string","null"],"description":"When the battery level was last updated, or null."},"inputs":{"type":"array","description":"State of every digital input.","items":{"type":"boolean"}},"inputs_update":{"type":["string","null"],"description":"When the inputs were last updated, or null."},"outputs":{"type":"array","description":"State of every digital output.","items":{"type":"boolean"}},"outputs_update":{"type":["string","null"],"description":"When the outputs were last updated, or null."},"additional":{"type":"object","description":"Additional state values. Which keys appear depends on the tracker model, and the object is empty for devices that report none. `hardware_key` is the last scanned driver identification key.","additionalProperties":{"type":"object","properties":{"value":{"type":"string","description":"The value."},"updated":{"type":"string","description":"When it was last updated."}}}},"actual_track_update":{"type":["string","null"],"description":"When the device last moved, meaning when its track was last extended."}}}},"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":{"/tracker/get_state":{"post":{"tags":["Trackers"],"summary":"Read tracker state","description":"Get the current state of one tracker: GPS, GSM, inputs, outputs, battery and movement. Reachable from a geo link or delivery session as well as a normal one.","operationId":"trackerGetState","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tracker_id":{"type":"integer","description":"ID of the tracker, also known as the object ID. Must belong to the current account and not be blocked."}},"required":["tracker_id"]}}}},"responses":{"200":{"description":"The tracker state","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"user_time":{"type":"string","description":"Current time in the account timezone."},"state":{"$ref":"#/components/schemas/TrackerState"}}}}}},"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 201: no tracker with this ID belongs to the account. Error 208: the tracker exists but is blocked, normally because its tariff ended.","$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):

* 201 - No tracker with this ID belongs to the account.
* 208 - The tracker exists but is blocked, normally because its tariff ended.

***

## Read the state of several trackers

> Get current state for many trackers at once. Reachable from a geo link session as well as a normal one.\
> \
> \`trackers\` is optional: \*\*omitting it returns every tracker on the account\*\*. At most 2,000 per request, so split larger fleets across calls.\
> \
> By default a single blocked or missing tracker fails the whole call. \`list\_blocked\` and \`allow\_not\_exist\` turn those into \`blocked\` and \`not\_exist\` arrays alongside the results, which is almost always what a fleet-wide caller wants.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Trackers","description":"Trackers, the devices the platform tracks, together with the geo links that share their live location with people outside the account. Resources under the /tracker/ 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":{"TrackerState":{"type":"object","description":"Current state of a tracker: GPS, GSM, inputs, outputs and movement.","properties":{"source_id":{"type":"integer","description":"Tracker data source ID."},"gps":{"type":"object","description":"Last known GPS fix. Note that `lat` and `lng` sit inside `location`, not directly on this object.","properties":{"updated":{"type":["string","null"],"description":"When the coordinates were last updated, in the account timezone, or null when never."},"signal_level":{"type":["integer","null"],"description":"GPS signal level as a percentage, or null when the device cannot report it."},"location":{"type":"object","description":"The coordinates themselves.","properties":{"lat":{"type":"number","description":"Latitude."},"lng":{"type":"number","description":"Longitude."}}},"heading":{"type":"integer","description":"Direction bearing in degrees, 0 to 360."},"speed":{"type":"integer","description":"Speed in km/h."},"alt":{"type":"integer","description":"Altitude in metres."},"precision":{"type":"integer","description":"Precision in metres. Present only for some devices."},"gsm_lbs":{"type":"boolean","description":"`true` when the location came from GSM LBS rather than GPS. Present only when it applies."}}},"connection_status":{"type":"string","description":"Device connection status.","enum":["signal_lost","just_registered","just_replaced","offline","idle","active"]},"movement_status":{"type":"string","description":"Movement status.","enum":["moving","stopped","parked"]},"movement_status_update":{"type":["string","null"],"description":"When the movement status last changed, or null."},"ignition":{"type":"boolean","description":"State of the vehicle's ignition sensor, real or virtual. Present only for devices that report it."},"ignition_update":{"type":"string","description":"When the ignition state last changed. Present only alongside `ignition`."},"gsm":{"type":"object","description":"GSM status. Null for devices that cannot report it.","properties":{"updated":{"type":["string","null"],"description":"When the GSM status was last updated, or null."},"signal_level":{"type":["integer","null"],"description":"GSM signal level as a percentage, or null."},"network_name":{"type":["string","null"],"description":"GSM network name, or null."},"roaming":{"type":["boolean","null"],"description":"Roaming state, or null when the device cannot report it."}}},"last_update":{"type":["string","null"],"description":"When the device state was last updated, or null."},"battery_level":{"type":["integer","null"],"description":"Battery level as a percentage, or null when the device cannot report it."},"battery_update":{"type":["string","null"],"description":"When the battery level was last updated, or null."},"inputs":{"type":"array","description":"State of every digital input.","items":{"type":"boolean"}},"inputs_update":{"type":["string","null"],"description":"When the inputs were last updated, or null."},"outputs":{"type":"array","description":"State of every digital output.","items":{"type":"boolean"}},"outputs_update":{"type":["string","null"],"description":"When the outputs were last updated, or null."},"additional":{"type":"object","description":"Additional state values. Which keys appear depends on the tracker model, and the object is empty for devices that report none. `hardware_key` is the last scanned driver identification key.","additionalProperties":{"type":"object","properties":{"value":{"type":"string","description":"The value."},"updated":{"type":"string","description":"When it was last updated."}}}},"actual_track_update":{"type":["string","null"],"description":"When the device last moved, meaning when its track was last extended."}}}},"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":{"/tracker/get_states":{"post":{"tags":["Trackers"],"summary":"Read the state of several trackers","description":"Get current state for many trackers at once. Reachable from a geo link session as well as a normal one.\n\n`trackers` is optional: **omitting it returns every tracker on the account**. At most 2,000 per request, so split larger fleets across calls.\n\nBy default a single blocked or missing tracker fails the whole call. `list_blocked` and `allow_not_exist` turn those into `blocked` and `not_exist` arrays alongside the results, which is almost always what a fleet-wide caller wants.","operationId":"trackerGetStates","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"trackers":{"type":"array","description":"Optional. Tracker IDs. Omit for every tracker on the account. At most 2,000.","items":{"type":"integer"},"maxItems":2000},"list_blocked":{"type":"boolean","description":"Optional. Default `false`. Return blocked tracker IDs in `blocked` instead of failing with error 208."},"allow_not_exist":{"type":"boolean","description":"Optional. Default `false`. Return unknown tracker IDs in `not_exist` instead of failing with error 217 or 201."}}}}}},"responses":{"200":{"description":"The tracker states","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"user_time":{"type":"string","description":"Current time in the account timezone."},"states":{"type":"object","description":"State objects keyed by tracker ID.","additionalProperties":{"$ref":"#/components/schemas/TrackerState"}},"blocked":{"type":"array","description":"Blocked tracker IDs. Returned only when `list_blocked` is `true`.","items":{"type":"integer"}},"not_exist":{"type":"array","description":"Unknown tracker IDs. Returned only when `allow_not_exist` is `true`.","items":{"type":"integer"}}}}}}},"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 201: a tracker is corrupted and `allow_not_exist` is `false`. Error 208: a tracker is blocked and `list_blocked` is `false`. Error 217: the list names trackers that do not exist and `allow_not_exist` is `false`.","$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):

* 201 - A tracker is corrupted and `allow_not_exist` is `false`.
* 208 - A tracker is blocked and `list_blocked` is `false`.
* 217 - The list names trackers that do not exist and `allow_not_exist` is `false`.

***

## List tracker models

> Get every integrated tracker model. Available to demo accounts.\
> \
> The list is large, around 1,800 models, so use \`codes\` when you already know which ones you want.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Trackers","description":"Trackers, the devices the platform tracks, together with the geo links that share their live location with people outside the account. Resources under the /tracker/ 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":{"TrackerModel":{"type":"object","description":"An integrated tracker model and what it supports. Returned by `tracker/list_models`.","properties":{"id":{"type":"integer","description":"Model ID."},"vendor":{"type":"string","description":"Vendor name."},"code":{"type":"string","description":"Model text code, the value passed as `model` when registering."},"parent_code":{"type":["string","null"],"description":"Code of the parent model, or null."},"type":{"type":"string","description":"Device category.","enum":["logger","portable","vehicle","personal"]},"name":{"type":"string","description":"Human-readable model name."},"id_type":{"type":"string","description":"How the device is identified at registration. See the identifier types on the page."},"id_namespace":{"type":"string","description":"Namespace the identifier belongs to. Undocumented on the page, returned by the API."},"has_phone":{"type":"boolean","description":"`true` when the device has a phone number."},"has_apn_settings":{"type":"boolean","description":"`true` when the device has APN settings."},"register":{"type":"boolean","description":"`true` when the model is available for registration."},"has_auto_registration":{"type":"boolean","description":"`true` when the device can be registered by automatic commands from the platform."},"check_bundle":{"type":"boolean","description":"`true` when registration checks the device against a bundle. Undocumented on the page, returned by the API."},"port":{"type":["integer","null"],"description":"Port to connect to on the tracking server. Null when the model supports none, or supports several, in which case read `connection`."},"battery":{"type":"object","description":"The device's internal battery, used to convert a raw reading into a percentage.","properties":{"min_charge":{"type":"number","description":"Minimum battery level."},"low_charge":{"type":"number","description":"Level at which the low-battery rule fires."},"max_charge":{"type":"number","description":"Maximum battery level."}}},"altitude":{"type":"boolean","description":"`true` when the device reports altitude."},"satellites":{"type":"boolean","description":"`true` when the device reports a satellite count."},"gsm_level":{"type":"boolean","description":"`true` when the device reports GSM signal strength."},"gsm_network":{"type":"boolean","description":"`true` when the device reports the GSM network name."},"gsm_roaming":{"type":"boolean","description":"`true` when the device reports roaming state."},"has_detach_button":{"type":"boolean","description":"`true` when the device has a detaching sensor."},"has_fuel_input":{"type":"boolean","description":"`true` when the device has a fuel sensor."},"analog_inputs":{"type":"integer","description":"Number of analog inputs."},"digital_inputs":{"type":"integer","description":"Number of digital inputs."},"digital_outputs":{"type":"integer","description":"Number of digital outputs."},"rs232_inputs":{"type":"integer","description":"Number of RS232 inputs."},"track_control":{"type":"string","description":"How track recording is controlled on the device. Undocumented on the page, returned by the API."},"output_control":{"type":"string","description":"How outputs are controlled.","enum":["none","default","batch","stateless","async","async_offline","batch_async"]},"special_control":{"type":"string","description":"Additional device-specific control types, comma separated when there are several."},"multimedia":{"type":"boolean","description":"`true` when the device supports multimedia. Undocumented on the page, returned by the API."},"rules":{"type":"array","description":"Rule types this model supports.","items":{"type":"string"}},"inputs":{"type":"array","description":"Input types this model provides.","items":{"type":"string"}},"state_fields":{"type":"array","description":"State fields this model reports.","items":{"type":"string"}},"special_settings":{"type":"array","description":"Additional device-specific setting types.","items":{"type":"string"}},"sms_control":{"type":"array","description":"SMS control commands this model supports.","items":{"type":"string"}},"connection":{"type":"array","description":"Ways this model can connect to the platform. Present for models that offer more than a bare port.","items":{"type":"object","properties":{"protocol":{"type":"string","description":"Application layer protocol."},"transport":{"type":"string","description":"Transport layer protocol."},"url":{"type":"string","description":"Full connection details: scheme, host, port and any credentials."},"description":{"type":"string","description":"Connection details in prose, such as the login and topic to use."}}}},"has_led_control":{"type":"boolean","description":"`true` when the device supports switching an LED."},"has_location_request":{"type":"boolean","description":"`true` when a location can be requested by SMS."},"has_gprs_location_request":{"type":"boolean","description":"`true` when a location can be requested over GPRS."},"has_gsm_lbs_location_request":{"type":"boolean","description":"`true` when a GSM LBS location can be requested over GPRS."},"has_chat":{"type":"boolean","description":"`true` when chat is available for this model."},"has_custom_fields":{"type":"boolean","description":"Default `false`. `true` when the model's protocol transmits field names, which allows a custom `input_name` to be set on its sensors."},"has_odometer":{"type":"boolean","description":"`true` when the device has an integrated odometer."},"has_lbs":{"type":"boolean","description":"`true` when the device sends cell information."},"has_motion_sensor":{"type":"boolean","description":"`true` when the device has an integrated motion sensor."},"has_hardware_key":{"type":"boolean","description":"`true` when the device can identify a driver by hardware key."},"additional_fields":{"type":"array","description":"Descriptions of the model-specific fields a user fills in at registration.","items":{"type":"object"}}}}},"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":{"/tracker/list_models":{"post":{"tags":["Trackers"],"summary":"List tracker models","description":"Get every integrated tracker model. Available to demo accounts.\n\nThe list is large, around 1,800 models, so use `codes` when you already know which ones you want.","operationId":"trackerListModels","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"compact_view":{"type":"boolean","description":"Optional. Default `false`. Return a reduced view of each model."},"compact_index":{"type":"boolean","description":"Optional. Default `false`, and **deprecated**. Compact the indexed inputs, returning only the input with the highest index.","deprecated":true},"codes":{"type":"array","description":"Optional. Model codes. When given, only those models are returned.","items":{"type":"string"}}}}}}},"responses":{"200":{"description":"The integrated models","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/TrackerModel"}}}}}}},"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"}}}}}}
```

A model's `has_custom_fields` flag matters when configuring measurement: when it is `true` the protocol transmits field names, which is what allows a custom `input_name` to be set on the tracker's [sensors](/docs/navixy-api/user-api/resources/tracking/tracker/sensor.md).

#### ID type

An ID type says what identifier a model uses, which is what [`tracker/register`](#post-tracker-register) needs in order to register the device.

Possible values are:

* `imei` - the device uses its IMEI, for example `356938035643809`. See the [IMEI article on Wikipedia](https://en.wikipedia.org/wiki/International_Mobile_Equipment_Identity). Pass digits only, with no spaces or hyphens.
* `meid` - the device uses a MEID of 14 hexadecimal digits, for example `A10000009296F2`. See the [MEID article on Wikipedia](https://en.wikipedia.org/wiki/Mobile_equipment_identifier).
* `id,n` - the device uses an n-digit factory identifier. For example `id,7` means a 7-digit number such as `1234567`.
* `n,m` - an n-digit generated identifier starting with m. The device has a configurable ID that the platform generates and configures itself, so no identifier is passed at registration.
* `ascii,min,max` - the device uses a text identifier of Latin letters, digits, and hyphens, for example `fleet-sensor-0042`. The two numbers are the minimum and maximum accepted length in characters, so `ascii,12,17` means 12 to 17 characters. Punctuation, underscores, spaces, and non-Latin characters are rejected.

{% hint style="warning" %}
Models reporting `ascii,6,64`, `navixy_ngp` among them, reject any identifier longer than 32 characters. The declared maximum of 64 is not applied. Registration errors always name the range that is enforced, for example `must consist of 6-32 alphanumeric symbols or hyphens`, so treat the error message as authoritative when it disagrees with the model metadata.
{% endhint %}

***

*Required sub-user rights:* `tracker_update`.

## Set a tracker's tags

> Replace the set of tags attached to a tracker. The tags must already exist.\
> \
> Requires the \`tracker\_update\` right.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Trackers","description":"Trackers, the devices the platform tracks, together with the geo links that share their live location with people outside the account. Resources under the /tracker/ 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":{"TagBinding":{"type":"object","description":"A tag attached to a tracker.","properties":{"tag_id":{"type":"integer","description":"ID of the tag. Unique within a tracker."},"ordinal":{"type":"integer","description":"Position or kind of the tag. Unique within a tracker, maximum 5.","minimum":1,"maximum":5}},"required":["tag_id","ordinal"]}},"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":{"/tracker/tags/set":{"post":{"tags":["Trackers"],"summary":"Set a tracker's tags","description":"Replace the set of tags attached to a tracker. The tags must already exist.\n\nRequires the `tracker_update` right.","operationId":"trackerTagsSet","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tracker_id":{"type":"integer","description":"ID of the tracker, also known as the object ID. Must belong to the current account and not be blocked."},"tag_bindings":{"type":"array","description":"The tags to attach. Replaces whatever was attached before.","items":{"$ref":"#/components/schemas/TagBinding"}}},"required":["tracker_id","tag_bindings"]}}}},"responses":{"200":{"description":"The tags were set","$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"},"default":{"$ref":"#/components/responses/ResponseError"}}}}}}
```

***

## Request the current location

> Ask the device for its current position. The model must support the requested method, which \`tracker/list\_models\` reports as \`has\_location\_request\`, \`has\_gprs\_location\_request\` and \`has\_gsm\_lbs\_location\_request\`.\
> \
> The \`sms\` method sends an SMS and therefore needs an SMS gateway installed for the panel; it may also cost money. The \`gsm\` and \`gprs\` methods need the device online or in the \`GPS not updated\` state.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Trackers","description":"Trackers, the devices the platform tracks, together with the geo links that share their live location with people outside the account. Resources under the /tracker/ 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":{"/tracker/location_request":{"post":{"tags":["Trackers"],"summary":"Request the current location","description":"Ask the device for its current position. The model must support the requested method, which `tracker/list_models` reports as `has_location_request`, `has_gprs_location_request` and `has_gsm_lbs_location_request`.\n\nThe `sms` method sends an SMS and therefore needs an SMS gateway installed for the panel; it may also cost money. The `gsm` and `gprs` methods need the device online or in the `GPS not updated` state.","operationId":"trackerLocationRequest","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tracker_id":{"type":"integer","description":"ID of the tracker, also known as the object ID. Must belong to the current account and not be blocked."},"type":{"type":"string","description":"Optional. Default `sms`. How to ask: `sms` for GNSS data over SMS, `gsm` for GSM LBS data over GPRS, `gprs` for GNSS data over GPRS.","enum":["sms","gsm","gprs"]}},"required":["tracker_id"]}}}},"responses":{"200":{"description":"The request was sent","$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 201: no tracker with this ID belongs to the account. Error 208: the tracker exists but is blocked, normally because its tariff ended. Error 213: the device is offline. Error 214: the device does not support this request type. Error 256: the location is already current.","$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):

* 201 - No tracker with this ID belongs to the account.
* 208 - The tracker exists but is blocked, normally because its tariff ended.
* 213 - The device is offline.
* 214 - The device does not support this request type.
* 256 - The location is already current.

***

*Required sub-user rights:* `tracker_register`.

Registration is walked through in [how to activate a device](/docs/navixy-api/user-api/guides/device-management/activate-device.md).

`group_id` must name a group that exists. List them with [`group/list`](/docs/navixy-api/user-api/resources/tracking/tracker/group.md#post-tracker-group-list), or pass `0` for no group.

{% hint style="info" %}
Because of the variety of tracker models and business applications, there are different ways to register a tracker. They are called [registration plugins](/docs/navixy-api/user-api/resources/commons/plugin.md), and each has its own set of additional parameters. Alongside the parameters the operation lists, pass everything the plugin you chose requires.
{% endhint %}

## Register a tracker

> Register a new device and link it to the current account, configuring it to send data to the platform where the model supports that. The panel must have an SMS gateway installed.\
> \
> \*\*Registration plugins matter.\*\* Each plugin has its own extra parameters, and you must send those alongside the ones below. \`commons/plugin\` lists them. A Queclink registered through plugin 37, for example, also needs \`phone\`, \`apn\_name\`, \`apn\_user\`, \`apn\_password\` and \`activation\_code\`.\
> \
> \`device\_id\` is validated in two stages, both returning error 7. First a general character and length check, reported as \`must match "^\[0-9a-zA-Z\\-]{1,64}$"\`, which rejects underscores, spaces, punctuation and non-latin characters. Then the length range the model's \`id\_type\` requires. \*\*Read the range from the error message rather than from the model metadata\*\*, which can be wider: models declaring \`ascii,6,64\` reject anything over 32 characters.\
> \
> Requires the \`tracker\_register\` right.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Trackers","description":"Trackers, the devices the platform tracks, together with the geo links that share their live location with people outside the account. Resources under the /tracker/ 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":{"Tracker":{"type":"object","description":"A tracking device registered in the platform. One of the central objects of this API.","properties":{"id":{"type":"integer","description":"Tracker ID, also known as the object ID."},"label":{"type":"string","description":"Tracker label."},"clone":{"type":"boolean","description":"`true` when this tracker is a clone of another."},"group_id":{"type":"integer","description":"Tracker group ID, `0` when the tracker is in no group."},"avatar_file_name":{"type":"string","description":"Avatar file name. Present only when the tracker has one."},"source":{"$ref":"#/components/schemas/TrackerSource"},"tag_bindings":{"type":"array","description":"Tags attached to the tracker. Returned by `tracker/list`, and by the registration and replacement calls.","items":{"$ref":"#/components/schemas/TagBinding"}}}},"TrackerSource":{"type":"object","description":"The physical device behind a tracker.","properties":{"id":{"type":"integer","description":"Source ID."},"device_id":{"type":"string","description":"Device ID, also called the source IMEI. Its accepted shape depends on the model's `id_type`."},"model":{"type":"string","description":"Model code, as returned by `tracker/list_models`."},"blocked":{"type":"boolean","description":"`true` when the tracker is blocked because its tariff ended."},"tariff_id":{"type":"integer","description":"ID of the tracker's tariff."},"status_listing_id":{"type":["integer","null"],"description":"ID of the working status list assigned to this tracker, or null."},"creation_date":{"type":"string","description":"Date the tracker was registered, `YYYY-MM-DD`."},"tariff_end_date":{"type":["string","null"],"description":"Date of the next tariff prolongation, `YYYY-MM-DD`, or null."},"phone":{"type":["string","null"],"description":"Phone number of the device. Null or empty when the device has no GSM module, or uses a bundled SIM whose number is hidden from the user."}}},"TagBinding":{"type":"object","description":"A tag attached to a tracker.","properties":{"tag_id":{"type":"integer","description":"ID of the tag. Unique within a tracker."},"ordinal":{"type":"integer","description":"Position or kind of the tag. Unique within a tracker, maximum 5.","minimum":1,"maximum":5}},"required":["tag_id","ordinal"]}},"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":{"/tracker/register":{"post":{"tags":["Trackers"],"summary":"Register a tracker","description":"Register a new device and link it to the current account, configuring it to send data to the platform where the model supports that. The panel must have an SMS gateway installed.\n\n**Registration plugins matter.** Each plugin has its own extra parameters, and you must send those alongside the ones below. `commons/plugin` lists them. A Queclink registered through plugin 37, for example, also needs `phone`, `apn_name`, `apn_user`, `apn_password` and `activation_code`.\n\n`device_id` is validated in two stages, both returning error 7. First a general character and length check, reported as `must match \"^[0-9a-zA-Z\\-]{1,64}$\"`, which rejects underscores, spaces, punctuation and non-latin characters. Then the length range the model's `id_type` requires. **Read the range from the error message rather than from the model metadata**, which can be wider: models declaring `ascii,6,64` reject anything over 32 characters.\n\nRequires the `tracker_register` right.","operationId":"trackerRegister","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"label":{"type":"string","description":"User-defined label. Printable characters, 1 to 60.","minLength":1,"maxLength":60},"group_id":{"type":"integer","description":"Tracker group ID, or `0` for no group. The group must exist."},"model":{"type":"string","description":"Code of a supported model, from `tracker/list_models`."},"plugin_id":{"type":"integer","description":"ID of the registration plugin to use."},"device_id":{"type":"string","description":"Required when the model uses a fixed device ID. The accepted format and length follow the model's `id_type`."},"send_register_commands":{"type":["boolean","null"],"description":"Optional. Default null, meaning follow the platform setting. Whether to send activation commands to the device over SMS or GPRS."}},"required":["label","group_id","model","plugin_id"],"additionalProperties":true}}}},"responses":{"200":{"description":"The registered tracker","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"value":{"$ref":"#/components/schemas/Tracker"}}}}}},"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 13: the user lacks the right. Error 204: the group does not exist. Error 220: unknown device model. Error 221: the dealer's device limit is exceeded. Error 222: the plugin was not found or does not support this model. Error 223: the phone number is already in use. Error 224: the device ID is already registered. Error 225: the new device's tariff is not compatible with the account's legal type. Error 226: unknown ICCID, plugin specific. Error 227: the activation code is unknown or already used, plugin specific. Error 258: no bundle for this device ID, plugin specific.","$ref":"#/components/responses/ResponseError"},"default":{"$ref":"#/components/responses/ResponseError"}}}}}}
```

Registering a Queclink GV55Lite through plugin 37 into the default group, with the device identified by IMEI, also needs `phone`, `apn_name`, `apn_user`, `apn_password`, and `activation_code`, because that plugin requires them:

{% code overflow="wrap" %}

```sh
curl -L \
  --request POST \
  --url 'https://api.eu.navixy.com/v2/tracker/register' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: NVX your_api_key' \
  --data '{"label": "Courier", "group_id": 0, "plugin_id": 37, "model": "qlgv55lite", "phone": "79123122312", "activation_code": "123123123", "device_id": "123451234512346", "apn_name": "fast.tmobile.com", "apn_user": "tmobile", "apn_password": "tmobile"}'
```

{% endcode %}

#### Errors

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

* 7 - Invalid parameters. A rejected device ID names the offending parameter and the rule it broke:

```json
{
  "success": false,
  "status": {
    "code": 7,
    "description": "Invalid parameters"
  },
  "errors": [
    {
      "parameter": "device_id",
      "error": "must consist of 6-32 alphanumeric symbols or hyphens"
    }
  ]
}
```

***

*Required sub-user rights:* `tracker_register`.

## Resend registration commands

> Resend the registration commands to a device that did not come online. The panel must have an SMS gateway installed.\
> \
> Only \`tracker\_id\` is required: the APN fields are optional and change the stored APN when sent.\
> \
> Requires the \`tracker\_register\` right.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Trackers","description":"Trackers, the devices the platform tracks, together with the geo links that share their live location with people outside the account. Resources under the /tracker/ 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":{"Tracker":{"type":"object","description":"A tracking device registered in the platform. One of the central objects of this API.","properties":{"id":{"type":"integer","description":"Tracker ID, also known as the object ID."},"label":{"type":"string","description":"Tracker label."},"clone":{"type":"boolean","description":"`true` when this tracker is a clone of another."},"group_id":{"type":"integer","description":"Tracker group ID, `0` when the tracker is in no group."},"avatar_file_name":{"type":"string","description":"Avatar file name. Present only when the tracker has one."},"source":{"$ref":"#/components/schemas/TrackerSource"},"tag_bindings":{"type":"array","description":"Tags attached to the tracker. Returned by `tracker/list`, and by the registration and replacement calls.","items":{"$ref":"#/components/schemas/TagBinding"}}}},"TrackerSource":{"type":"object","description":"The physical device behind a tracker.","properties":{"id":{"type":"integer","description":"Source ID."},"device_id":{"type":"string","description":"Device ID, also called the source IMEI. Its accepted shape depends on the model's `id_type`."},"model":{"type":"string","description":"Model code, as returned by `tracker/list_models`."},"blocked":{"type":"boolean","description":"`true` when the tracker is blocked because its tariff ended."},"tariff_id":{"type":"integer","description":"ID of the tracker's tariff."},"status_listing_id":{"type":["integer","null"],"description":"ID of the working status list assigned to this tracker, or null."},"creation_date":{"type":"string","description":"Date the tracker was registered, `YYYY-MM-DD`."},"tariff_end_date":{"type":["string","null"],"description":"Date of the next tariff prolongation, `YYYY-MM-DD`, or null."},"phone":{"type":["string","null"],"description":"Phone number of the device. Null or empty when the device has no GSM module, or uses a bundled SIM whose number is hidden from the user."}}},"TagBinding":{"type":"object","description":"A tag attached to a tracker.","properties":{"tag_id":{"type":"integer","description":"ID of the tag. Unique within a tracker."},"ordinal":{"type":"integer","description":"Position or kind of the tag. Unique within a tracker, maximum 5.","minimum":1,"maximum":5}},"required":["tag_id","ordinal"]}},"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":{"/tracker/register_retry":{"post":{"tags":["Trackers"],"summary":"Resend registration commands","description":"Resend the registration commands to a device that did not come online. The panel must have an SMS gateway installed.\n\nOnly `tracker_id` is required: the APN fields are optional and change the stored APN when sent.\n\nRequires the `tracker_register` right.","operationId":"trackerRegisterRetry","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tracker_id":{"type":"integer","description":"ID of the tracker, also known as the object ID. Must belong to the current account and not be blocked."},"device_id":{"type":"string","description":"Optional. The device ID used at registration, such as the IMEI. Usable instead of `tracker_id` for models with a fixed ID."},"apn_name":{"type":"string","description":"Optional. GPRS APN name for the SIM.","maxLength":40},"apn_user":{"type":"string","description":"Optional. GPRS APN user. May be empty.","maxLength":40},"apn_password":{"type":"string","description":"Optional. GPRS APN password. May be empty.","maxLength":40},"send_register_commands":{"type":["boolean","null"],"description":"Optional. Default null, meaning follow the platform setting."}},"required":["tracker_id"]}}}},"responses":{"200":{"description":"The tracker","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"value":{"$ref":"#/components/schemas/Tracker"}}}}}},"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 13: the user lacks the right. Error 201: no tracker with this ID belongs to the account. Error 208: the tracker exists but is blocked, normally because its tariff ended. Error 214: the device has no GSM module. Error 219: the tracker is a clone. Error 242: the device is already connected.","$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):

* 13 - The user lacks the right.
* 201 - No tracker with this ID belongs to the account.
* 208 - The tracker exists but is blocked, normally because its tariff ended.
* 214 - The device has no GSM module.
* 219 - The tracker is a clone.
* 242 - The device is already connected.

***

*Required sub-user rights:* `tracker_register`.

## Register a preconfigured device by IMEI

> Register a new device using only its IMEI. No activation commands are sent, so the device must already be configured. \*\*Bundles only.\*\*\
> \
> Requires the \`tracker\_register\` right.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Trackers","description":"Trackers, the devices the platform tracks, together with the geo links that share their live location with people outside the account. Resources under the /tracker/ 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":{"Tracker":{"type":"object","description":"A tracking device registered in the platform. One of the central objects of this API.","properties":{"id":{"type":"integer","description":"Tracker ID, also known as the object ID."},"label":{"type":"string","description":"Tracker label."},"clone":{"type":"boolean","description":"`true` when this tracker is a clone of another."},"group_id":{"type":"integer","description":"Tracker group ID, `0` when the tracker is in no group."},"avatar_file_name":{"type":"string","description":"Avatar file name. Present only when the tracker has one."},"source":{"$ref":"#/components/schemas/TrackerSource"},"tag_bindings":{"type":"array","description":"Tags attached to the tracker. Returned by `tracker/list`, and by the registration and replacement calls.","items":{"$ref":"#/components/schemas/TagBinding"}}}},"TrackerSource":{"type":"object","description":"The physical device behind a tracker.","properties":{"id":{"type":"integer","description":"Source ID."},"device_id":{"type":"string","description":"Device ID, also called the source IMEI. Its accepted shape depends on the model's `id_type`."},"model":{"type":"string","description":"Model code, as returned by `tracker/list_models`."},"blocked":{"type":"boolean","description":"`true` when the tracker is blocked because its tariff ended."},"tariff_id":{"type":"integer","description":"ID of the tracker's tariff."},"status_listing_id":{"type":["integer","null"],"description":"ID of the working status list assigned to this tracker, or null."},"creation_date":{"type":"string","description":"Date the tracker was registered, `YYYY-MM-DD`."},"tariff_end_date":{"type":["string","null"],"description":"Date of the next tariff prolongation, `YYYY-MM-DD`, or null."},"phone":{"type":["string","null"],"description":"Phone number of the device. Null or empty when the device has no GSM module, or uses a bundled SIM whose number is hidden from the user."}}},"TagBinding":{"type":"object","description":"A tag attached to a tracker.","properties":{"tag_id":{"type":"integer","description":"ID of the tag. Unique within a tracker."},"ordinal":{"type":"integer","description":"Position or kind of the tag. Unique within a tracker, maximum 5.","minimum":1,"maximum":5}},"required":["tag_id","ordinal"]}},"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":{"/tracker/register_quick":{"post":{"tags":["Trackers"],"summary":"Register a preconfigured device by IMEI","description":"Register a new device using only its IMEI. No activation commands are sent, so the device must already be configured. **Bundles only.**\n\nRequires the `tracker_register` right.","operationId":"trackerRegisterQuick","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"label":{"type":"string","description":"User-defined label. Printable characters, 1 to 60.","minLength":1,"maxLength":60},"group_id":{"type":"integer","description":"Tracker group ID, or `0` for no group. The group must exist."},"imei":{"type":"string","description":"IMEI of the device."}},"required":["label","group_id","imei"]}}}},"responses":{"200":{"description":"The registered tracker","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"value":{"$ref":"#/components/schemas/Tracker"}}}}}},"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 13: the user lacks the right. Error 201: no bundle with this IMEI. Error 204: the group does not exist. Error 220: unknown device model. Error 221: the dealer's device limit is exceeded. Error 222: the plugin was not found or does not support this model. Error 223: the phone number is already in use. Error 224: the device ID is already registered. Error 225: the tariff is not compatible with the account's legal type. Error 226: unknown ICCID. Error 227: the activation code is unknown or already used.","$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):

* 13 - The user lacks the right.
* 201 - No bundle with this IMEI.
* 204 - The group does not exist.
* 220 - Unknown device model.
* 221 - The dealer's device limit is exceeded.
* 222 - The plugin was not found or does not support this model.
* 223 - The phone number is already in use.
* 224 - The device ID is already registered.
* 225 - The tariff is not compatible with the account's legal type.
* 226 - Unknown ICCID.
* 227 - The activation code is unknown or already used.

***

*Required sub-user rights:* `tracker_configure`.

{% hint style="info" %}
Replacement uses the same [registration plugins](/docs/navixy-api/user-api/resources/commons/plugin.md) as registration, so pass whatever extra parameters your plugin requires alongside the ones the operation lists. An activation code is not used when replacing a device.
{% endhint %}

## Replace the device behind a tracker

> Swap in a new device while keeping the tracker's history, and optionally its sensors and rules.\
> \
> As with registration, the chosen plugin brings its own extra parameters that must be sent alongside these. An activation code is \*\*not\*\* used when replacing.\
> \
> Requires the \`tracker\_configure\` right.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Trackers","description":"Trackers, the devices the platform tracks, together with the geo links that share their live location with people outside the account. Resources under the /tracker/ 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":{"Tracker":{"type":"object","description":"A tracking device registered in the platform. One of the central objects of this API.","properties":{"id":{"type":"integer","description":"Tracker ID, also known as the object ID."},"label":{"type":"string","description":"Tracker label."},"clone":{"type":"boolean","description":"`true` when this tracker is a clone of another."},"group_id":{"type":"integer","description":"Tracker group ID, `0` when the tracker is in no group."},"avatar_file_name":{"type":"string","description":"Avatar file name. Present only when the tracker has one."},"source":{"$ref":"#/components/schemas/TrackerSource"},"tag_bindings":{"type":"array","description":"Tags attached to the tracker. Returned by `tracker/list`, and by the registration and replacement calls.","items":{"$ref":"#/components/schemas/TagBinding"}}}},"TrackerSource":{"type":"object","description":"The physical device behind a tracker.","properties":{"id":{"type":"integer","description":"Source ID."},"device_id":{"type":"string","description":"Device ID, also called the source IMEI. Its accepted shape depends on the model's `id_type`."},"model":{"type":"string","description":"Model code, as returned by `tracker/list_models`."},"blocked":{"type":"boolean","description":"`true` when the tracker is blocked because its tariff ended."},"tariff_id":{"type":"integer","description":"ID of the tracker's tariff."},"status_listing_id":{"type":["integer","null"],"description":"ID of the working status list assigned to this tracker, or null."},"creation_date":{"type":"string","description":"Date the tracker was registered, `YYYY-MM-DD`."},"tariff_end_date":{"type":["string","null"],"description":"Date of the next tariff prolongation, `YYYY-MM-DD`, or null."},"phone":{"type":["string","null"],"description":"Phone number of the device. Null or empty when the device has no GSM module, or uses a bundled SIM whose number is hidden from the user."}}},"TagBinding":{"type":"object","description":"A tag attached to a tracker.","properties":{"tag_id":{"type":"integer","description":"ID of the tag. Unique within a tracker."},"ordinal":{"type":"integer","description":"Position or kind of the tag. Unique within a tracker, maximum 5.","minimum":1,"maximum":5}},"required":["tag_id","ordinal"]}},"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":{"/tracker/replace":{"post":{"tags":["Trackers"],"summary":"Replace the device behind a tracker","description":"Swap in a new device while keeping the tracker's history, and optionally its sensors and rules.\n\nAs with registration, the chosen plugin brings its own extra parameters that must be sent alongside these. An activation code is **not** used when replacing.\n\nRequires the `tracker_configure` right.","operationId":"trackerReplace","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tracker_id":{"type":"integer","description":"ID of the tracker, also known as the object ID. Must belong to the current account and not be blocked."},"model":{"type":"string","description":"Code of a supported model, from `tracker/list_models`."},"plugin_id":{"type":"integer","description":"ID of the registration plugin to use."},"device_id":{"type":"string","description":"Required when the model uses a fixed device ID."},"send_register_commands":{"type":["boolean","null"],"description":"Optional. Default null, meaning follow the platform setting."}},"required":["tracker_id","model","plugin_id"],"additionalProperties":true}}}},"responses":{"200":{"description":"The replaced tracker","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"value":{"$ref":"#/components/schemas/Tracker"}}}}}},"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 13: the user lacks the right. Error 204: the group does not exist. Error 220: unknown device model. Error 221: the dealer's device limit is exceeded. Error 222: the plugin was not found or does not support this model. Error 223: the phone number is already in use. Error 224: the device ID is already registered. Error 225: the tariff is not compatible with the account's legal type. Error 226: unknown ICCID, plugin specific. Error 258: no bundle for this device ID, plugin specific. Error 266: the device is not activated yet.","$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):

* 13 - The user lacks the right.
* 204 - The group does not exist.
* 220 - Unknown device model.
* 221 - The dealer's device limit is exceeded.
* 222 - The plugin was not found or does not support this model.
* 223 - The phone number is already in use.
* 224 - The device ID is already registered.
* 225 - The tariff is not compatible with the account's legal type.
* 226 - Unknown ICCID, plugin specific.
* 258 - No bundle for this device ID, plugin specific.
* 266 - The device is not activated yet.

***

*Required sub-user rights:* `tracker_configure`.

## Replace a device by IMEI

> Replace the device behind a tracker using only the new IMEI. No activation commands are sent, so the replacement must already be configured. \*\*Bundles only.\*\*\
> \
> Requires the \`tracker\_configure\` right.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Trackers","description":"Trackers, the devices the platform tracks, together with the geo links that share their live location with people outside the account. Resources under the /tracker/ 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":{"Tracker":{"type":"object","description":"A tracking device registered in the platform. One of the central objects of this API.","properties":{"id":{"type":"integer","description":"Tracker ID, also known as the object ID."},"label":{"type":"string","description":"Tracker label."},"clone":{"type":"boolean","description":"`true` when this tracker is a clone of another."},"group_id":{"type":"integer","description":"Tracker group ID, `0` when the tracker is in no group."},"avatar_file_name":{"type":"string","description":"Avatar file name. Present only when the tracker has one."},"source":{"$ref":"#/components/schemas/TrackerSource"},"tag_bindings":{"type":"array","description":"Tags attached to the tracker. Returned by `tracker/list`, and by the registration and replacement calls.","items":{"$ref":"#/components/schemas/TagBinding"}}}},"TrackerSource":{"type":"object","description":"The physical device behind a tracker.","properties":{"id":{"type":"integer","description":"Source ID."},"device_id":{"type":"string","description":"Device ID, also called the source IMEI. Its accepted shape depends on the model's `id_type`."},"model":{"type":"string","description":"Model code, as returned by `tracker/list_models`."},"blocked":{"type":"boolean","description":"`true` when the tracker is blocked because its tariff ended."},"tariff_id":{"type":"integer","description":"ID of the tracker's tariff."},"status_listing_id":{"type":["integer","null"],"description":"ID of the working status list assigned to this tracker, or null."},"creation_date":{"type":"string","description":"Date the tracker was registered, `YYYY-MM-DD`."},"tariff_end_date":{"type":["string","null"],"description":"Date of the next tariff prolongation, `YYYY-MM-DD`, or null."},"phone":{"type":["string","null"],"description":"Phone number of the device. Null or empty when the device has no GSM module, or uses a bundled SIM whose number is hidden from the user."}}},"TagBinding":{"type":"object","description":"A tag attached to a tracker.","properties":{"tag_id":{"type":"integer","description":"ID of the tag. Unique within a tracker."},"ordinal":{"type":"integer","description":"Position or kind of the tag. Unique within a tracker, maximum 5.","minimum":1,"maximum":5}},"required":["tag_id","ordinal"]}},"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":{"/tracker/replace_quick":{"post":{"tags":["Trackers"],"summary":"Replace a device by IMEI","description":"Replace the device behind a tracker using only the new IMEI. No activation commands are sent, so the replacement must already be configured. **Bundles only.**\n\nRequires the `tracker_configure` right.","operationId":"trackerReplaceQuick","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tracker_id":{"type":"integer","description":"ID of the tracker, also known as the object ID. Must belong to the current account and not be blocked."},"imei":{"type":"string","description":"IMEI of the new device."}},"required":["tracker_id","imei"]}}}},"responses":{"200":{"description":"The replaced tracker","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"value":{"$ref":"#/components/schemas/Tracker"}}}}}},"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 13: the user lacks the right. Error 201: no bundle with this IMEI. Error 204: the group does not exist. Error 220: unknown device model. Error 221: the dealer's device limit is exceeded. Error 222: the plugin was not found or does not support this model. Error 223: the phone number is already in use. Error 224: the device ID is already registered. Error 225: the tariff is not compatible with the account's legal type. Error 226: unknown ICCID. Error 266: the device is not activated yet.","$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):

* 13 - The user lacks the right.
* 201 - No bundle with this IMEI.
* 204 - The group does not exist.
* 220 - Unknown device model.
* 221 - The dealer's device limit is exceeded.
* 222 - The plugin was not found or does not support this model.
* 223 - The phone number is already in use.
* 224 - The device ID is already registered.
* 225 - The tariff is not compatible with the account's legal type.
* 226 - Unknown ICCID.
* 266 - The device is not activated yet.

***

*Required sub-user rights:* `tracker_configure`.

## Resend replacement commands

> Resend the registration commands to the replacement device. The panel must have an SMS gateway installed.\
> \
> Requires the \`tracker\_configure\` right.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Trackers","description":"Trackers, the devices the platform tracks, together with the geo links that share their live location with people outside the account. Resources under the /tracker/ 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":{"Tracker":{"type":"object","description":"A tracking device registered in the platform. One of the central objects of this API.","properties":{"id":{"type":"integer","description":"Tracker ID, also known as the object ID."},"label":{"type":"string","description":"Tracker label."},"clone":{"type":"boolean","description":"`true` when this tracker is a clone of another."},"group_id":{"type":"integer","description":"Tracker group ID, `0` when the tracker is in no group."},"avatar_file_name":{"type":"string","description":"Avatar file name. Present only when the tracker has one."},"source":{"$ref":"#/components/schemas/TrackerSource"},"tag_bindings":{"type":"array","description":"Tags attached to the tracker. Returned by `tracker/list`, and by the registration and replacement calls.","items":{"$ref":"#/components/schemas/TagBinding"}}}},"TrackerSource":{"type":"object","description":"The physical device behind a tracker.","properties":{"id":{"type":"integer","description":"Source ID."},"device_id":{"type":"string","description":"Device ID, also called the source IMEI. Its accepted shape depends on the model's `id_type`."},"model":{"type":"string","description":"Model code, as returned by `tracker/list_models`."},"blocked":{"type":"boolean","description":"`true` when the tracker is blocked because its tariff ended."},"tariff_id":{"type":"integer","description":"ID of the tracker's tariff."},"status_listing_id":{"type":["integer","null"],"description":"ID of the working status list assigned to this tracker, or null."},"creation_date":{"type":"string","description":"Date the tracker was registered, `YYYY-MM-DD`."},"tariff_end_date":{"type":["string","null"],"description":"Date of the next tariff prolongation, `YYYY-MM-DD`, or null."},"phone":{"type":["string","null"],"description":"Phone number of the device. Null or empty when the device has no GSM module, or uses a bundled SIM whose number is hidden from the user."}}},"TagBinding":{"type":"object","description":"A tag attached to a tracker.","properties":{"tag_id":{"type":"integer","description":"ID of the tag. Unique within a tracker."},"ordinal":{"type":"integer","description":"Position or kind of the tag. Unique within a tracker, maximum 5.","minimum":1,"maximum":5}},"required":["tag_id","ordinal"]}},"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":{"/tracker/replace_retry":{"post":{"tags":["Trackers"],"summary":"Resend replacement commands","description":"Resend the registration commands to the replacement device. The panel must have an SMS gateway installed.\n\nRequires the `tracker_configure` right.","operationId":"trackerReplaceRetry","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tracker_id":{"type":"integer","description":"ID of the tracker, also known as the object ID. Must belong to the current account and not be blocked."},"apn_name":{"type":"string","description":"Optional. GPRS APN name for the SIM."},"apn_user":{"type":"string","description":"Optional. GPRS APN user."},"apn_password":{"type":"string","description":"Optional. GPRS APN password."}},"required":["tracker_id"]}}}},"responses":{"200":{"description":"The tracker","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"value":{"$ref":"#/components/schemas/Tracker"}}}}}},"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 13: the user lacks the right. Error 204: no tracker with this ID belongs to the account. Error 208: the tracker exists but is blocked, normally because its tariff ended. Error 214: the device has no GSM module. Error 219: the tracker is a clone. Error 242: the device is already connected. Error 266: the old device is not activated yet.","$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):

* 13 - The user lacks the right.
* 204 - No tracker with this ID belongs to the account.
* 208 - The tracker exists but is blocked, normally because its tariff ended.
* 214 - The device has no GSM module.
* 219 - The tracker is a clone.
* 242 - The device is already connected.
* 266 - The old device is not activated yet.

***

*Required sub-user rights:* `tracker_configure`, `tracker_set_output`.

Which commands a device accepts follows from the `special_control` field of its [model](#post-tracker-list_models):

| Special control           | Available commands                                        |
| ------------------------- | --------------------------------------------------------- |
| `jointech_lock_password`  | `electronic_lock_command`, `set_special_settings_command` |
| `hhd_lock_password`       | `electronic_lock_command`, `set_special_settings_command` |
| `vg_lock_password`        | `electronic_lock_command`, `set_special_settings_command` |
| any other special control | `set_special_settings_command`                            |

`electronic_lock_command` seals or unseals an electronic lock:

```json
{
  "name": "electronic_lock_command",
  "command_code": "unseal",
  "special_settings": {<special settings JSON object>}
}
```

`set_special_settings_command` carries only the settings object:

```json
{
  "name": "set_special_settings_command",
  "special_settings": {<special settings JSON object>}
}
```

In both cases `special_settings` is equivalent to the body of [`tracker/settings/special/update`](/docs/navixy-api/user-api/resources/tracking/tracker/settings/special.md#post-tracker-settings-special-update). See the [special settings JSON object](/docs/navixy-api/user-api/resources/tracking/tracker/settings/special.md#post-tracker-settings-special-read) for its structure.

## Send a special control command

> Send a command for the special control the model declares in its \`special\_control\` field.\
> \
> Which commands are available follows from that field. \`jointech\_lock\_password\`, \`hhd\_lock\_password\` and \`vg\_lock\_password\` accept \`electronic\_lock\_command\` and \`set\_special\_settings\_command\`; every other special control accepts only \`set\_special\_settings\_command\`.\
> \
> \`electronic\_lock\_command\` seals or unseals an electronic lock and takes a \`command\_code\` of \`seal\` or \`unseal\`. The optional \`special\_settings\` object has the same shape as the body of \`tracker/settings/special/update\`.\
> \
> Requires the \`tracker\_configure\` and \`tracker\_set\_output\` rights.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Trackers","description":"Trackers, the devices the platform tracks, together with the geo links that share their live location with people outside the account. Resources under the /tracker/ 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":{"/tracker/send_command":{"post":{"tags":["Trackers"],"summary":"Send a special control command","description":"Send a command for the special control the model declares in its `special_control` field.\n\nWhich commands are available follows from that field. `jointech_lock_password`, `hhd_lock_password` and `vg_lock_password` accept `electronic_lock_command` and `set_special_settings_command`; every other special control accepts only `set_special_settings_command`.\n\n`electronic_lock_command` seals or unseals an electronic lock and takes a `command_code` of `seal` or `unseal`. The optional `special_settings` object has the same shape as the body of `tracker/settings/special/update`.\n\nRequires the `tracker_configure` and `tracker_set_output` rights.","operationId":"trackerSendCommand","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tracker_id":{"type":"integer","description":"ID of the tracker, also known as the object ID. Must belong to the current account and not be blocked."},"command":{"type":"object","description":"The command to send.","properties":{"name":{"type":"string","description":"Command name.","enum":["electronic_lock_command","set_special_settings_command"]},"command_code":{"type":"string","description":"For `electronic_lock_command`: whether to seal or unseal.","enum":["seal","unseal"]},"special_settings":{"type":"object","description":"Optional. Special settings for the device, shaped by the model's `special_control`.","additionalProperties":true}},"required":["name"],"additionalProperties":true}},"required":["tracker_id","command"]}}}},"responses":{"200":{"description":"The command was accepted","$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"},"default":{"$ref":"#/components/responses/ResponseError"}}}}}}
```

***

*Required sub-user rights:* `tracker_configure`, `tracker_set_output`.

This call is walked through in [how to send commands to a GPS tracker](/docs/navixy-api/user-api/guides/device-management/send-commands.md).

## Send a raw GPRS command

> Send a GPRS command to the device, processed beforehand in a protocol-dependent way.\
> \
> Requires the \`tracker\_configure\` and \`tracker\_set\_output\` rights.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Trackers","description":"Trackers, the devices the platform tracks, together with the geo links that share their live location with people outside the account. Resources under the /tracker/ 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":{"/tracker/raw_command/send":{"post":{"tags":["Trackers"],"summary":"Send a raw GPRS command","description":"Send a GPRS command to the device, processed beforehand in a protocol-dependent way.\n\nRequires the `tracker_configure` and `tracker_set_output` rights.","operationId":"trackerRawCommandSend","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tracker_id":{"type":"integer","description":"ID of the tracker, also known as the object ID. Must belong to the current account and not be blocked."},"command":{"type":"string","description":"The command, as text or hexadecimal."},"type":{"type":"string","description":"Optional. Default `text`. How to read `command`.","enum":["text","hex"]},"reliable":{"type":"boolean","description":"Optional. Default `true`. When `false` the command is not resent if the device is disconnected or does not acknowledge it."}},"required":["tracker_id","command"]}}}},"responses":{"200":{"description":"The command was accepted","$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 201: no tracker with this device ID belongs to the account.","$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):

* 7 - Invalid parameters. A malformed command names the parameter:

```json
{
  "success": false,
  "status": {
    "code": 7,
    "description": "Invalid parameters"
  },
  "errors": [
    {
      "parameter": "command",
      "error": "Non-hex string"
    }
  ]
}
```

## More in this section

#### Alarm mode

| Endpoint                                                                                                                      | Method | What it does              |
| ----------------------------------------------------------------------------------------------------------------------------- | ------ | ------------------------- |
| [`/tracker/alarm_mode/read`](/docs/navixy-api/user-api/resources/tracking/tracker/alarm_mode.md#post-tracker-alarm_mode-read) | POST   | Read alarm mode           |
| [`/tracker/alarm_mode/set`](/docs/navixy-api/user-api/resources/tracking/tracker/alarm_mode.md#post-tracker-alarm_mode-set)   | POST   | Turn alarm mode on or off |

#### APN settings by tracker

| Endpoint                                                                                                                            | Method | What it does                 |
| ----------------------------------------------------------------------------------------------------------------------------------- | ------ | ---------------------------- |
| [`/tracker/apn_settings/read`](/docs/navixy-api/user-api/resources/tracking/tracker/apn_settings.md#post-tracker-apn_settings-read) | POST   | Read APN settings by tracker |

#### Avatar

| Endpoint                                                                                                              | Method | What it does            |
| --------------------------------------------------------------------------------------------------------------------- | ------ | ----------------------- |
| [`/tracker/avatar/upload`](/docs/navixy-api/user-api/resources/tracking/tracker/avatar.md#post-tracker-avatar-upload) | POST   | Upload a tracker avatar |

#### Chat

| Endpoint                                                                                                                      | Method | What it does                            |
| ----------------------------------------------------------------------------------------------------------------------------- | ------ | --------------------------------------- |
| [`/tracker/chat/list`](/docs/navixy-api/user-api/resources/tracking/tracker/chat.md#post-tracker-chat-list)                   | POST   | List chat messages                      |
| [`/tracker/chat/mark_read_all`](/docs/navixy-api/user-api/resources/tracking/tracker/chat.md#post-tracker-chat-mark_read_all) | POST   | Mark all messages read                  |
| [`/tracker/chat/mark_read`](/docs/navixy-api/user-api/resources/tracking/tracker/chat.md#post-tracker-chat-mark_read)         | POST   | Mark messages read                      |
| [`/tracker/chat/send`](/docs/navixy-api/user-api/resources/tracking/tracker/chat.md#post-tracker-chat-send)                   | POST   | Send a chat message                     |
| [`/tracker/chat/broadcast`](/docs/navixy-api/user-api/resources/tracking/tracker/chat.md#post-tracker-chat-broadcast)         | POST   | Send a chat message to several trackers |
| [`/tracker/chat/updated/list`](/docs/navixy-api/user-api/resources/tracking/tracker/chat.md#post-tracker-chat-updated-list)   | POST   | Read last message times                 |
| [`/tracker/chat/unread/count`](/docs/navixy-api/user-api/resources/tracking/tracker/chat.md#post-tracker-chat-unread-count)   | POST   | Count unread messages                   |

#### Contact

| Endpoint                                                                                             | Method | What it does                                         |
| ---------------------------------------------------------------------------------------------------- | ------ | ---------------------------------------------------- |
| [`/contact/list`](/docs/navixy-api/user-api/resources/tracking/tracker/contact.md#post-contact-list) | POST   | List contacts and their shared trackers (deprecated) |

#### Counters

| Endpoint                                                                                                                         | Method | What it does                             |
| -------------------------------------------------------------------------------------------------------------------------------- | ------ | ---------------------------------------- |
| [`/tracker/counter/read`](/docs/navixy-api/user-api/resources/tracking/tracker/counter.md#post-tracker-counter-read)             | POST   | Read a counter                           |
| [`/tracker/counter/update`](/docs/navixy-api/user-api/resources/tracking/tracker/counter.md#post-tracker-counter-update)         | POST   | Update a counter                         |
| [`/tracker/get_counters`](/docs/navixy-api/user-api/resources/tracking/tracker/counter.md#post-tracker-get_counters)             | POST   | Read all counter values                  |
| [`/tracker/counter/value/get`](/docs/navixy-api/user-api/resources/tracking/tracker/counter.md#post-tracker-counter-value-get)   | POST   | Read one counter value                   |
| [`/tracker/counter/value/list`](/docs/navixy-api/user-api/resources/tracking/tracker/counter.md#post-tracker-counter-value-list) | POST   | Read one counter across several trackers |
| [`/tracker/counter/value/set`](/docs/navixy-api/user-api/resources/tracking/tracker/counter.md#post-tracker-counter-value-set)   | POST   | Set a counter value                      |
| [`/tracker/counter/data/read`](/docs/navixy-api/user-api/resources/tracking/tracker/counter.md#post-tracker-counter-data-read)   | POST   | Read counter history                     |

#### Datalogger

| Endpoint                                                                                                                          | Method | What it does                 |
| --------------------------------------------------------------------------------------------------------------------------------- | ------ | ---------------------------- |
| [`/tracker/datalogger/upload`](/docs/navixy-api/user-api/resources/tracking/tracker/datalogger.md#post-tracker-datalogger-upload) | POST   | Upload datalogger track data |

#### Employee

| Endpoint                                                                                                                    | Method | What it does                   |
| --------------------------------------------------------------------------------------------------------------------------- | ------ | ------------------------------ |
| [`/tracker/employee/assign`](/docs/navixy-api/user-api/resources/tracking/tracker/employee.md#post-tracker-employee-assign) | POST   | Assign or unassign an employee |
| [`/tracker/employee/read`](/docs/navixy-api/user-api/resources/tracking/tracker/employee.md#post-tracker-employee-read)     | POST   | Read the assigned employee     |

#### Engine immobilizer

| Endpoint                                                                                                                                              | Method | What it does                      |
| ----------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | --------------------------------- |
| [`/tracker/engine_immobilizer/read`](/docs/navixy-api/user-api/resources/tracking/tracker/engine_immobilizer.md#post-tracker-engine_immobilizer-read) | POST   | Read immobiliser state            |
| [`/tracker/engine_immobilizer/set`](/docs/navixy-api/user-api/resources/tracking/tracker/engine_immobilizer.md#post-tracker-engine_immobilizer-set)   | POST   | Engage or release the immobiliser |

#### Group

| Endpoint                                                                                                           | Method | What it does               |
| ------------------------------------------------------------------------------------------------------------------ | ------ | -------------------------- |
| [`/tracker/group/assign`](/docs/navixy-api/user-api/resources/tracking/tracker/group.md#post-tracker-group-assign) | POST   | Assign trackers to a group |
| [`/tracker/group/create`](/docs/navixy-api/user-api/resources/tracking/tracker/group.md#post-tracker-group-create) | POST   | Create a group             |
| [`/tracker/group/delete`](/docs/navixy-api/user-api/resources/tracking/tracker/group.md#post-tracker-group-delete) | POST   | Delete a group             |
| [`/tracker/group/list`](/docs/navixy-api/user-api/resources/tracking/tracker/group.md#post-tracker-group-list)     | POST   | List tracker groups        |
| [`/tracker/group/update`](/docs/navixy-api/user-api/resources/tracking/tracker/group.md#post-tracker-group-update) | POST   | Update a group             |

#### LED

| Endpoint                                                                                                     | Method | What it does   |
| ------------------------------------------------------------------------------------------------------------ | ------ | -------------- |
| [`/tracker/led/read`](/docs/navixy-api/user-api/resources/tracking/tracker/led.md#post-tracker-led-read)     | POST   | Read LED state |
| [`/tracker/led/update`](/docs/navixy-api/user-api/resources/tracking/tracker/led.md#post-tracker-led-update) | POST   | Switch the LED |

#### Mobile app register

| Endpoint                                                                                                                  | Method | What it does                               |
| ------------------------------------------------------------------------------------------------------------------------- | ------ | ------------------------------------------ |
| [`/tracker/mobile/register`](/docs/navixy-api/user-api/resources/tracking/tracker/mobile.md#post-tracker-mobile-register) | POST   | Register a mobile application (deprecated) |

#### Digital output

| Endpoint                                                                                                                | Method | What it does       |
| ----------------------------------------------------------------------------------------------------------------------- | ------ | ------------------ |
| [`/tracker/output/set_all`](/docs/navixy-api/user-api/resources/tracking/tracker/output.md#post-tracker-output-set_all) | POST   | Switch all outputs |
| [`/tracker/output/set`](/docs/navixy-api/user-api/resources/tracking/tracker/output.md#post-tracker-output-set)         | POST   | Switch one output  |

#### Sensor readings

| Endpoint                                                                                                                            | Method | What it does                                |
| ----------------------------------------------------------------------------------------------------------------------------------- | ------ | ------------------------------------------- |
| [`/tracker/readings/list`](/docs/navixy-api/user-api/resources/tracking/tracker/readings.md#post-tracker-readings-list)             | POST   | Read all sensor values                      |
| [`/tracker/readings/batch_list`](/docs/navixy-api/user-api/resources/tracking/tracker/readings.md#post-tracker-readings-batch_list) | POST   | Read all sensor values for several trackers |

#### Retranslator binding

| Endpoint                                                                                                                                | Method | What it does                           |
| --------------------------------------------------------------------------------------------------------------------------------------- | ------ | -------------------------------------- |
| [`/tracker/retranslator/bind`](/docs/navixy-api/user-api/resources/tracking/tracker/retranslator.md#post-tracker-retranslator-bind)     | POST   | Bind a tracker to a retranslator       |
| [`/tracker/retranslator/list`](/docs/navixy-api/user-api/resources/tracking/tracker/retranslator.md#post-tracker-retranslator-list)     | POST   | List a tracker's retranslator bindings |
| [`/tracker/retranslator/unbind`](/docs/navixy-api/user-api/resources/tracking/tracker/retranslator.md#post-tracker-retranslator-unbind) | POST   | Unbind a tracker from a retranslator   |

#### Trusted number

| Endpoint                                                                                                                                      | Method | What it does                |
| --------------------------------------------------------------------------------------------------------------------------------------------- | ------ | --------------------------- |
| [`/tracker/trusted_number/list`](/docs/navixy-api/user-api/resources/tracking/tracker/trusted_number.md#post-tracker-trusted_number-list)     | POST   | List trusted numbers        |
| [`/tracker/trusted_number/update`](/docs/navixy-api/user-api/resources/tracking/tracker/trusted_number.md#post-tracker-trusted_number-update) | POST   | Replace the trusted numbers |

#### Unconfirmed commands

| Endpoint                                                                                                                                       | Method | What it does                |
| ---------------------------------------------------------------------------------------------------------------------------------------------- | ------ | --------------------------- |
| [`/tracker/command/unconfirmed/count`](/docs/navixy-api/user-api/resources/tracking/tracker/command.md#post-tracker-command-unconfirmed-count) | POST   | Count queued SMS commands   |
| [`/tracker/command/unconfirmed/reset`](/docs/navixy-api/user-api/resources/tracking/tracker/command.md#post-tracker-command-unconfirmed-reset) | POST   | Clear the SMS command queue |

#### Rule

| Endpoint                                                                                                              | Method | What it does                |
| --------------------------------------------------------------------------------------------------------------------- | ------ | --------------------------- |
| [`/tracker/rule/bind`](/docs/navixy-api/user-api/resources/tracking/tracker/rules/rule.md#post-tracker-rule-bind)     | POST   | Bind a rule to trackers     |
| [`/tracker/rule/create`](/docs/navixy-api/user-api/resources/tracking/tracker/rules/rule.md#post-tracker-rule-create) | POST   | Create a rule               |
| [`/tracker/rule/delete`](/docs/navixy-api/user-api/resources/tracking/tracker/rules/rule.md#post-tracker-rule-delete) | POST   | Delete a rule               |
| [`/tracker/rule/list`](/docs/navixy-api/user-api/resources/tracking/tracker/rules/rule.md#post-tracker-rule-list)     | POST   | List rules                  |
| [`/tracker/rule/unbind`](/docs/navixy-api/user-api/resources/tracking/tracker/rules/rule.md#post-tracker-rule-unbind) | POST   | Unbind a rule from trackers |
| [`/tracker/rule/update`](/docs/navixy-api/user-api/resources/tracking/tracker/rules/rule.md#post-tracker-rule-update) | POST   | Update a rule               |

#### Sensor

| Endpoint                                                                                                                      | Method | What it does                      |
| ----------------------------------------------------------------------------------------------------------------------------- | ------ | --------------------------------- |
| [`/tracker/sensor/batch_list`](/docs/navixy-api/user-api/resources/tracking/tracker/sensor.md#post-tracker-sensor-batch_list) | POST   | List sensors for several trackers |
| [`/tracker/sensor/create`](/docs/navixy-api/user-api/resources/tracking/tracker/sensor.md#post-tracker-sensor-create)         | POST   | Create a sensor                   |
| [`/tracker/sensor/delete`](/docs/navixy-api/user-api/resources/tracking/tracker/sensor.md#post-tracker-sensor-delete)         | POST   | Delete a sensor                   |
| [`/tracker/sensor/list`](/docs/navixy-api/user-api/resources/tracking/tracker/sensor.md#post-tracker-sensor-list)             | POST   | List a tracker's sensors          |
| [`/tracker/sensor/update`](/docs/navixy-api/user-api/resources/tracking/tracker/sensor.md#post-tracker-sensor-update)         | POST   | Update a sensor                   |
| [`/tracker/sensor/batch_copy`](/docs/navixy-api/user-api/resources/tracking/tracker/sensor.md#post-tracker-sensor-batch_copy) | POST   | Copy sensors between trackers     |
| [`/tracker/sensor/data/read`](/docs/navixy-api/user-api/resources/tracking/tracker/sensor.md#post-tracker-sensor-data-read)   | POST   | Read sensor history               |

#### Sensor calibration data

| Endpoint                                                                                                                                                                                   | Method | What it does                        |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------ | ----------------------------------- |
| [`/tracker/sensor/calibration_data/read`](/docs/navixy-api/user-api/resources/tracking/tracker/sensor/calibration_data.md#post-tracker-sensor-calibration_data-read)                       | POST   | Read calibration data               |
| [`/tracker/sensor/calibration_data/update`](/docs/navixy-api/user-api/resources/tracking/tracker/sensor/calibration_data.md#post-tracker-sensor-calibration_data-update)                   | POST   | Replace calibration data            |
| [`/tracker/sensor/calibration_data/upload_omnicomm`](/docs/navixy-api/user-api/resources/tracking/tracker/sensor/calibration_data.md#post-tracker-sensor-calibration_data-upload_omnicomm) | POST   | Upload an Omnicomm calibration file |

#### Sensor inputs

| Endpoint                                                                                                                                           | Method | What it does                            |
| -------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | --------------------------------------- |
| [`/tracker/sensor/input_name/list`](/docs/navixy-api/user-api/resources/tracking/tracker/sensor/input_name.md#post-tracker-sensor-input_name-list) | POST   | List all sensor inputs and state fields |

#### Settings

| Endpoint                                                                                                                    | Method | What it does           |
| --------------------------------------------------------------------------------------------------------------------------- | ------ | ---------------------- |
| [`/tracker/settings/read`](/docs/navixy-api/user-api/resources/tracking/tracker/settings.md#post-tracker-settings-read)     | POST   | Read label and group   |
| [`/tracker/settings/update`](/docs/navixy-api/user-api/resources/tracking/tracker/settings.md#post-tracker-settings-update) | POST   | Change label and group |

#### LBS settings

| Endpoint                                                                                                                                | Method | What it does                |
| --------------------------------------------------------------------------------------------------------------------------------------- | ------ | --------------------------- |
| [`/tracker/settings/lbs/read`](/docs/navixy-api/user-api/resources/tracking/tracker/settings/lbs.md#post-tracker-settings-lbs-read)     | POST   | Read the LBS radius limit   |
| [`/tracker/settings/lbs/update`](/docs/navixy-api/user-api/resources/tracking/tracker/settings/lbs.md#post-tracker-settings-lbs-update) | POST   | Change the LBS radius limit |

#### Tracking mode

| Endpoint                                                                                                                                               | Method | What it does                  |
| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------ | ----------------------------- |
| [`/tracker/settings/tracking/read`](/docs/navixy-api/user-api/resources/tracking/tracker/settings/tracking.md#post-tracker-settings-tracking-read)     | POST   | Read tracking mode settings   |
| [`/tracker/settings/tracking/update`](/docs/navixy-api/user-api/resources/tracking/tracker/settings/tracking.md#post-tracker-settings-tracking-update) | POST   | Change tracking mode settings |

#### Parking detection

| Endpoint                                                                                                                                                                 | Method | What it does                      |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------ | --------------------------------- |
| [`/tracker/settings/trip_detection/read`](/docs/navixy-api/user-api/resources/tracking/tracker/settings/trip_detection.md#post-tracker-settings-trip_detection-read)     | POST   | Read parking detection settings   |
| [`/tracker/settings/trip_detection/update`](/docs/navixy-api/user-api/resources/tracking/tracker/settings/trip_detection.md#post-tracker-settings-trip_detection-update) | POST   | Change parking detection settings |

#### Special

| Endpoint                                                                                                                                            | Method | What it does            |
| --------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ----------------------- |
| [`/tracker/settings/special/read`](/docs/navixy-api/user-api/resources/tracking/tracker/settings/special.md#post-tracker-settings-special-read)     | POST   | Read special settings   |
| [`/tracker/settings/special/update`](/docs/navixy-api/user-api/resources/tracking/tracker/settings/special.md#post-tracker-settings-special-update) | POST   | Change special settings |

#### Engine hours

| Endpoint                                                                                                                                                    | Method | What it does      |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ----------------- |
| [`/tracker/stats/engine_hours/read`](/docs/navixy-api/user-api/resources/tracking/tracker/stats/stats_engine_hours.md#post-tracker-stats-engine_hours-read) | POST   | Read engine hours |

#### Mileage

| Endpoint                                                                                                                                     | Method | What it does         |
| -------------------------------------------------------------------------------------------------------------------------------------------- | ------ | -------------------- |
| [`/tracker/stats/mileage/read`](/docs/navixy-api/user-api/resources/tracking/tracker/stats/stats_mileage.md#post-tracker-stats-mileage-read) | POST   | Read mileage per day |

#### Commands

| Endpoint                                                                                                                          | Method | What it does                       |
| --------------------------------------------------------------------------------------------------------------------------------- | ------ | ---------------------------------- |
| [`/tracker/command/create`](/docs/navixy-api/user-api/resources/tracking/tracker/commands.md#post-tracker-command-create)         | POST   | Create a command                   |
| [`/tracker/command/update`](/docs/navixy-api/user-api/resources/tracking/tracker/commands.md#post-tracker-command-update)         | POST   | Update a command                   |
| [`/tracker/command/execute`](/docs/navixy-api/user-api/resources/tracking/tracker/commands.md#post-tracker-command-execute)       | POST   | Execute a command                  |
| [`/tracker/command/delete`](/docs/navixy-api/user-api/resources/tracking/tracker/commands.md#post-tracker-command-delete)         | POST   | Delete a command                   |
| [`/tracker/batch_get_commands`](/docs/navixy-api/user-api/resources/tracking/tracker/commands.md#post-tracker-batch_get_commands) | POST   | Read commands for several trackers |


---

# 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/tracking/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.
