> 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/panel-api/resources/tracker.md).

# Tracker

API calls to manage GPS tracking devices within the Admin Panel.

A **tracker** is a device as presented to one owning user. A **clone** is a second tracker sharing the same underlying device, so two users can see the same device independently. The **source** is that underlying device, and several operations act on it rather than on the tracker.

## Tracker object

## The Tracker object

```json
{"openapi":"3.1.0","info":{"title":"Navixy Admin Panel API","version":"1.2.0"},"components":{"schemas":{"Tracker":{"type":"object","description":"A tracker: a device as presented to one owning user. A clone shares its source with another tracker.","readOnly":true,"properties":{"id":{"type":"integer","description":"Tracker ID."},"label":{"type":"string","description":"Display label."},"group_id":{"type":"integer","description":"Group ID, `0` when ungrouped."},"user_id":{"type":"integer","description":"ID of the owning user."},"dealer_id":{"type":"integer","description":"ID of the owning dealer."},"owner_name":{"type":"string","description":"Display name of the owning user."},"source":{"$ref":"#/components/schemas/TrackerSource"},"model_name":{"type":"string","description":"Human-readable device model name."},"clone":{"type":"boolean","description":"`true` if this tracker is a clone of another."},"deleted":{"type":"boolean","description":"Whether the tracker is marked deleted."},"creation_date":{"type":"string","description":"When the tracker was created.","format":"date"},"last_connection":{"type":["string","null"],"description":"When the device last connected, as `YYYY-MM-DD HH:MM:SS`."}}},"TrackerSource":{"type":"object","description":"The physical device behind a tracker. Several operations act on the source rather than the tracker, and `raw_command/send` identifies it by `device_id`.","readOnly":true,"properties":{"id":{"type":"integer","description":"Source ID."},"device_id":{"type":"string","description":"Device identifier, used by the raw command operation."},"model":{"type":"string","description":"Device model code."},"blocked":{"type":"boolean","description":"Whether the device is blocked."},"phone":{"type":["string","null"],"description":"SIM phone number, or `null` for devices without one."},"tariff_id":{"type":"integer","description":"ID of the plan the device is on."},"tariff_end_date":{"type":["string","null"],"description":"When the current plan period ends.","format":"date"},"connection_status":{"type":"string","description":"Current connection state."},"creation_date":{"type":"string","description":"When the source was created.","format":"date"}}}}}}
```

## The TrackerSource object

```json
{"openapi":"3.1.0","info":{"title":"Navixy Admin Panel API","version":"1.2.0"},"components":{"schemas":{"TrackerSource":{"type":"object","description":"The physical device behind a tracker. Several operations act on the source rather than the tracker, and `raw_command/send` identifies it by `device_id`.","readOnly":true,"properties":{"id":{"type":"integer","description":"Source ID."},"device_id":{"type":"string","description":"Device identifier, used by the raw command operation."},"model":{"type":"string","description":"Device model code."},"blocked":{"type":"boolean","description":"Whether the device is blocked."},"phone":{"type":["string","null"],"description":"SIM phone number, or `null` for devices without one."},"tariff_id":{"type":"integer","description":"ID of the plan the device is on."},"tariff_end_date":{"type":["string","null"],"description":"When the current plan period ends.","format":"date"},"connection_status":{"type":"string","description":"Current connection state."},"creation_date":{"type":"string","description":"When the source was created.","format":"date"}}}}}}
```

`source.device_id` is the identifier required by the raw command operation, which is the one operation on this page that does not take `tracker_id`.

## API actions

API path: `panel/tracker`.

***

*required permissions*: `trackers: "report"`.

{% hint style="info" %}
This operation needs the `report` operation on `trackers`, which is distinct from `read`. A dealer granted only `read` receives error code 13.
{% endhint %}

## List tracker active history

> Report how many trackers were active in each month of a range, with the trackers counted.\
> \
> \*\*\`from\` and \`to\` are months, formatted \`YYYY-MM\`\*\*, and both are mandatory. Passing a full date and time fails validation. Note this differs from the user transaction list, which uses the same two parameter names with full \`YYYY-MM-DD HH:MM:SS\` values.\
> \
> Requires the \`report\` operation on \`trackers\`, which is distinct from \`read\`.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Admin Panel API","version":"1.2.0"},"tags":[{"name":"Tracker","description":"Devices belonging to the dealer, their clones, settings, and plans. All resources under the /panel/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":"Enter the panel session hash with the \"NVX \" prefix, e.g. \"NVX fa7bf873fab9333144e171372a321b06\". Obtain the hash from the accountAuth operation.","name":"Authorization","in":"header"}},"schemas":{"ActiveHistoryMonth":{"type":"object","description":"Active tracker count for one month.","readOnly":true,"properties":{"month":{"type":"string","description":"The month, as `YYYY-MM`."},"amount":{"type":"integer","description":"Number of trackers active during the month."},"trackers":{"type":"array","description":"The trackers counted. Owners are in `users_map` on the response.","items":{"type":"object","properties":{"tracker_id":{"type":"integer"},"user_id":{"type":"integer"},"label":{"type":"string"},"device_id":{"type":"string"}}}}}}},"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 a 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.","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":{"/panel/tracker/active/history/list":{"post":{"tags":["Tracker"],"summary":"List tracker active history","operationId":"trackerActiveHistoryList","description":"Report how many trackers were active in each month of a range, with the trackers counted.\n\n**`from` and `to` are months, formatted `YYYY-MM`**, and both are mandatory. Passing a full date and time fails validation. Note this differs from the user transaction list, which uses the same two parameter names with full `YYYY-MM-DD HH:MM:SS` values.\n\nRequires the `report` operation on `trackers`, which is distinct from `read`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["from","to"],"properties":{"from":{"type":"string","description":"First month of the range, as `YYYY-MM`.","pattern":"^\\d{4}-\\d{2}$"},"to":{"type":"string","description":"Last month of the range, as `YYYY-MM`.","pattern":"^\\d{4}-\\d{2}$"}}}}}},"responses":{"200":{"description":"Active tracker history","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"list":{"type":"array","readOnly":true,"items":{"$ref":"#/components/schemas/ActiveHistoryMonth"}},"users_map":{"type":"object","readOnly":true,"description":"Owners referenced by the entries, keyed by user ID.","additionalProperties":true}}}}}},"400":{"description":"Bad request. The response body carries the API-level error code in `status.code`. Validation failures also include an `errors` array.","$ref":"#/components/responses/ResponseError"},"403":{"description":"Operation not permitted, error code 13: the session lacks the required permission.","$ref":"#/components/responses/ResponseError"},"default":{"$ref":"#/components/responses/ResponseError"}}}}}}
```

`from` and `to` are **months**, written `YYYY-MM`. A full date and time is rejected. This differs from [user/transaction/list](/docs/navixy-api/panel-api/resources/user.md#post-panel-user-transaction-list), which takes the same two parameter names with full `YYYY-MM-DD HH:MM:SS` values.

***

*required permissions*: `trackers: "create"`.

## Clone tracker

> Create a clone of a tracker for another user. A clone shares the source device but appears as a separate tracker to its owner.\
> \
> The source tracker must not itself be a clone.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Admin Panel API","version":"1.2.0"},"tags":[{"name":"Tracker","description":"Devices belonging to the dealer, their clones, settings, and plans. All resources under the /panel/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":"Enter the panel session hash with the \"NVX \" prefix, e.g. \"NVX fa7bf873fab9333144e171372a321b06\". Obtain the hash from the accountAuth operation.","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 a 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.","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":{"/panel/tracker/clone":{"post":{"tags":["Tracker"],"summary":"Clone tracker","operationId":"trackerClone","description":"Create a clone of a tracker for another user. A clone shares the source device but appears as a separate tracker to its owner.\n\nThe source tracker must not itself be a clone.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["tracker_id","user_id","label"],"properties":{"tracker_id":{"type":"integer","description":"Tracker ID. Must belong to the current dealer.","minimum":1},"user_id":{"type":"integer","description":"ID of the user who will own the clone. Must not be the owner of the source tracker.","minimum":1},"label":{"type":"string","description":"Label for the clone.","minLength":1}}}}}},"responses":{"200":{"description":"Clone created","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"id":{"type":"integer","description":"ID of the created clone.","readOnly":true}}}}}},"400":{"description":"Bad request. The response body carries the API-level error code in `status.code`. Validation failures also include an `errors` array.","$ref":"#/components/responses/ResponseError"},"403":{"description":"Operation not permitted, error code 13: the session lacks the required permission.","$ref":"#/components/responses/ResponseError"},"default":{"$ref":"#/components/responses/ResponseError"}}}}}}
```

#### Errors

* 219 - Not allowed for clones of the device - when the source tracker is itself a clone.
* 201 - Not found in the database - when the specified `tracker_id` is not found.
* 246 - Invalid user ID - when the user ID matches the owner of the source tracker, or does not exist or belong to the authorized dealer.
* 247 - Entity already exists - if the destination user already has a clone of this tracker.
* 252 - Device already corrupted - when the source of the tracker is corrupted.

***

*required permissions*: `trackers: "update"`.

## Connect tracker console

> Open an AirConsole session against a device, returning a key used to attach to the console stream.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Admin Panel API","version":"1.2.0"},"tags":[{"name":"Tracker","description":"Devices belonging to the dealer, their clones, settings, and plans. All resources under the /panel/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":"Enter the panel session hash with the \"NVX \" prefix, e.g. \"NVX fa7bf873fab9333144e171372a321b06\". Obtain the hash from the accountAuth operation.","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 a 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.","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":{"/panel/tracker/console/connect":{"post":{"tags":["Tracker"],"summary":"Connect tracker console","operationId":"trackerConsoleConnect","description":"Open an AirConsole session against a device, returning a key used to attach to the console stream.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["tracker_id"],"properties":{"tracker_id":{"type":"integer","description":"Tracker ID. Must belong to the current dealer.","minimum":1}}}}}},"responses":{"200":{"description":"Console session","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"key":{"type":"string","description":"Session key for the console stream.","readOnly":true},"timestamp":{"type":"integer","description":"Unix timestamp the session was opened.","readOnly":true}}}}}},"400":{"description":"Bad request. The response body carries the API-level error code in `status.code`. Validation failures also include an `errors` array.","$ref":"#/components/responses/ResponseError"},"403":{"description":"Operation not permitted, error code 13: the session lacks the required permission.","$ref":"#/components/responses/ResponseError"},"default":{"$ref":"#/components/responses/ResponseError"}}}}}}
```

#### Errors

* 230 - Not supported for this entity type - when the tracker is deleted or blocked.
* 201 - Not found in the database - when no tracker has that `device_id`.
* 252 - Device already corrupted - when the source of the tracker is corrupted.

***

*required permissions*: `trackers: "corrupt"`.

{% hint style="danger" %}
Corrupting a tracker cannot be undone.
{% endhint %}

## Corrupt tracker

> Corrupt a tracker, marking its source device unusable. \*\*There is no undo.\*\*\
> \
> By default the clones of the tracker are corrupted too. Leaving \`corrupt\_clones\` as \`false\` while clones exist fails with error code 253.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Admin Panel API","version":"1.2.0"},"tags":[{"name":"Tracker","description":"Devices belonging to the dealer, their clones, settings, and plans. All resources under the /panel/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":"Enter the panel session hash with the \"NVX \" prefix, e.g. \"NVX fa7bf873fab9333144e171372a321b06\". Obtain the hash from the accountAuth operation.","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 a 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.","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":{"/panel/tracker/corrupt":{"post":{"tags":["Tracker"],"summary":"Corrupt tracker","operationId":"trackerCorrupt","description":"Corrupt a tracker, marking its source device unusable. **There is no undo.**\n\nBy default the clones of the tracker are corrupted too. Leaving `corrupt_clones` as `false` while clones exist fails with error code 253.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["tracker_id"],"properties":{"tracker_id":{"type":"integer","description":"Tracker ID. Must belong to the current dealer.","minimum":1},"corrupt_clones":{"type":"boolean","description":"Whether to corrupt the clones of this tracker as well.","default":true}}}}}},"responses":{"200":{"$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.","$ref":"#/components/responses/ResponseError"},"403":{"description":"Operation not permitted, error code 13: the session lacks the required permission.","$ref":"#/components/responses/ResponseError"},"default":{"$ref":"#/components/responses/ResponseError"}}}}}}
```

#### Errors

* 201 - Not found in the database - if the tracker is not found.
* 219 - Not allowed for clones of the device - if the source tracker is itself a clone.
* 252 - Device already corrupted.
* 253 - Device has clones and `corrupt_clones` is false.

***

*required permissions*: `trackers: "create"`.

## Batch clone trackers

> Clone many trackers to one user in a single call. At most \*\*1000\*\* trackers per request.\
> \
> Note the differing limit: \`batch\_delete\_clones\` accepts only 500.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Admin Panel API","version":"1.2.0"},"tags":[{"name":"Tracker","description":"Devices belonging to the dealer, their clones, settings, and plans. All resources under the /panel/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":"Enter the panel session hash with the \"NVX \" prefix, e.g. \"NVX fa7bf873fab9333144e171372a321b06\". Obtain the hash from the accountAuth operation.","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 a 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.","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":{"/panel/tracker/batch_clone":{"post":{"tags":["Tracker"],"summary":"Batch clone trackers","operationId":"trackerBatchClone","description":"Clone many trackers to one user in a single call. At most **1000** trackers per request.\n\nNote the differing limit: `batch_delete_clones` accepts only 500.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["user_id","tracker_ids"],"properties":{"user_id":{"type":"integer","description":"ID of the user who will own the clones.","minimum":1},"tracker_ids":{"type":"array","description":"Trackers to clone. Between 1 and 1000 inclusive.","minItems":1,"maxItems":1000,"items":{"type":"integer","minimum":1}},"ignore_existing":{"type":"boolean","description":"When `true`, trackers the user already has a clone of are skipped instead of failing."}}}}}},"responses":{"200":{"description":"Clones created","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"list":{"type":"array","readOnly":true,"description":"Per-tracker outcome.","items":{"type":"object","additionalProperties":true}}}}}}},"400":{"description":"Bad request. The response body carries the API-level error code in `status.code`. Validation failures also include an `errors` array.","$ref":"#/components/responses/ResponseError"},"403":{"description":"Operation not permitted, error code 13: the session lacks the required permission.","$ref":"#/components/responses/ResponseError"},"default":{"$ref":"#/components/responses/ResponseError"}}}}}}
```

#### Errors

* 7 - Invalid parameters. Size must be between 1 and 1000 - when the request exceeds 1000 trackers.

***

*required permissions*: `trackers: "delete"`.

## Batch delete tracker clones

> Delete many clones in one call. At most \*\*500\*\* trackers per request, and the list must not be empty or contain nulls.\
> \
> Note the differing limit: \`batch\_clone\` accepts 1000. The Navixy interface exposes a lower limit again, selecting at most 20 at a time.\
> \
> The response reports counts and, when some could not be deleted, why.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Admin Panel API","version":"1.2.0"},"tags":[{"name":"Tracker","description":"Devices belonging to the dealer, their clones, settings, and plans. All resources under the /panel/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":"Enter the panel session hash with the \"NVX \" prefix, e.g. \"NVX fa7bf873fab9333144e171372a321b06\". Obtain the hash from the accountAuth operation.","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 a 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.","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":{"/panel/tracker/batch_delete_clones":{"post":{"tags":["Tracker"],"summary":"Batch delete tracker clones","operationId":"trackerBatchDeleteClones","description":"Delete many clones in one call. At most **500** trackers per request, and the list must not be empty or contain nulls.\n\nNote the differing limit: `batch_clone` accepts 1000. The Navixy interface exposes a lower limit again, selecting at most 20 at a time.\n\nThe response reports counts and, when some could not be deleted, why.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["trackers"],"properties":{"trackers":{"type":"array","description":"Clone IDs to delete. Up to 500, no nulls, must not be empty.","minItems":1,"maxItems":500,"items":{"type":"integer","minimum":1}}}}}}},"responses":{"200":{"description":"Deletion result","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"deleted_count":{"type":"integer","readOnly":true,"description":"How many clones were deleted."},"not_deleted_count":{"type":"integer","readOnly":true,"description":"How many could not be deleted."},"not_deleted_trackers":{"type":"array","readOnly":true,"description":"Per-tracker failure detail. Omitted when empty.","items":{"type":"object","properties":{"id":{"type":"integer"},"error":{"type":"string"}}}}}}}}},"400":{"description":"Bad request. The response body carries the API-level error code in `status.code`. Validation failures also include an `errors` array.","$ref":"#/components/responses/ResponseError"},"403":{"description":"Operation not permitted, error code 13: the session lacks the required permission.","$ref":"#/components/responses/ResponseError"},"default":{"$ref":"#/components/responses/ResponseError"}}}}}}
```

The limit here is **500**, not the 1000 accepted by batch cloning.

***

*required permissions*: `trackers: "delete"`.

## Delete tracker clone

> Delete a clone. The specified tracker must itself be a clone; deleting a source tracker this way fails with error code 249.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Admin Panel API","version":"1.2.0"},"tags":[{"name":"Tracker","description":"Devices belonging to the dealer, their clones, settings, and plans. All resources under the /panel/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":"Enter the panel session hash with the \"NVX \" prefix, e.g. \"NVX fa7bf873fab9333144e171372a321b06\". Obtain the hash from the accountAuth operation.","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 a 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.","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":{"/panel/tracker/delete_clone":{"post":{"tags":["Tracker"],"summary":"Delete tracker clone","operationId":"trackerDeleteClone","description":"Delete a clone. The specified tracker must itself be a clone; deleting a source tracker this way fails with error code 249.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["tracker_id"],"properties":{"tracker_id":{"type":"integer","description":"Tracker ID. Must belong to the current dealer.","minimum":1}}}}}},"responses":{"200":{"$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.","$ref":"#/components/responses/ResponseError"},"403":{"description":"Operation not permitted, error code 13: the session lacks the required permission.","$ref":"#/components/responses/ResponseError"},"default":{"$ref":"#/components/responses/ResponseError"}}}}}}
```

#### Errors

* 201 - Not found in the database - if the tracker is not found.
* 249 - Operation available for clones only - if the specified tracker is not a clone.
* 203 - Delete entity associated with - if rules or vehicles are associated with the tracker.
* 252 - Device already corrupted - when the source of the tracker is corrupted.

***

*required permissions*: `trackers: "read"`.

## List trackers

> List the dealer's trackers, with optional filtering by owner, plan, and clone status.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Admin Panel API","version":"1.2.0"},"tags":[{"name":"Tracker","description":"Devices belonging to the dealer, their clones, settings, and plans. All resources under the /panel/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":"Enter the panel session hash with the \"NVX \" prefix, e.g. \"NVX fa7bf873fab9333144e171372a321b06\". Obtain the hash from the accountAuth operation.","name":"Authorization","in":"header"}},"schemas":{"Tracker":{"type":"object","description":"A tracker: a device as presented to one owning user. A clone shares its source with another tracker.","readOnly":true,"properties":{"id":{"type":"integer","description":"Tracker ID."},"label":{"type":"string","description":"Display label."},"group_id":{"type":"integer","description":"Group ID, `0` when ungrouped."},"user_id":{"type":"integer","description":"ID of the owning user."},"dealer_id":{"type":"integer","description":"ID of the owning dealer."},"owner_name":{"type":"string","description":"Display name of the owning user."},"source":{"$ref":"#/components/schemas/TrackerSource"},"model_name":{"type":"string","description":"Human-readable device model name."},"clone":{"type":"boolean","description":"`true` if this tracker is a clone of another."},"deleted":{"type":"boolean","description":"Whether the tracker is marked deleted."},"creation_date":{"type":"string","description":"When the tracker was created.","format":"date"},"last_connection":{"type":["string","null"],"description":"When the device last connected, as `YYYY-MM-DD HH:MM:SS`."}}},"TrackerSource":{"type":"object","description":"The physical device behind a tracker. Several operations act on the source rather than the tracker, and `raw_command/send` identifies it by `device_id`.","readOnly":true,"properties":{"id":{"type":"integer","description":"Source ID."},"device_id":{"type":"string","description":"Device identifier, used by the raw command operation."},"model":{"type":"string","description":"Device model code."},"blocked":{"type":"boolean","description":"Whether the device is blocked."},"phone":{"type":["string","null"],"description":"SIM phone number, or `null` for devices without one."},"tariff_id":{"type":"integer","description":"ID of the plan the device is on."},"tariff_end_date":{"type":["string","null"],"description":"When the current plan period ends.","format":"date"},"connection_status":{"type":"string","description":"Current connection state."},"creation_date":{"type":"string","description":"When the source was created.","format":"date"}}}},"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 a 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.","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":{"/panel/tracker/list":{"post":{"tags":["Tracker"],"summary":"List trackers","operationId":"trackerList","description":"List the dealer's trackers, with optional filtering by owner, plan, and clone status.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"user_id":{"type":"integer","description":"Optional. Filter to one owner.","minimum":1},"tariff_id":{"type":"integer","description":"Optional. Filter to one plan.","minimum":1},"clones_filter":{"type":"string","description":"Optional. Whether to include clones."},"filter":{"type":"string","description":"Optional. Text filter."},"order_by":{"type":"string","description":"Optional. Field to order by."},"ascending":{"type":"boolean","default":true},"offset":{"type":"integer","minimum":0,"default":0},"limit":{"type":"integer","minimum":0}}}}}},"responses":{"200":{"description":"Trackers","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"list":{"type":"array","readOnly":true,"items":{"$ref":"#/components/schemas/Tracker"}},"count":{"type":"integer","readOnly":true,"description":"Total matching records, ignoring `offset` and `limit`."}}}}}},"400":{"description":"Bad request. The response body carries the API-level error code in `status.code`. Validation failures also include an `errors` array.","$ref":"#/components/responses/ResponseError"},"403":{"description":"Operation not permitted, error code 13: the session lacks the required permission.","$ref":"#/components/responses/ResponseError"},"default":{"$ref":"#/components/responses/ResponseError"}}}}}}
```

***

*required permissions*: `trackers: "create"` and `trackers: "delete"`.

## Move tracker

> Reassign a tracker to a different user of the same dealer. The tracker must not be a clone.\
> \
> The response returns the \*\*new\*\* tracker ID. Changing the owner creates a new tracker record, so the ID sent in the request no longer refers to the moved tracker afterwards.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Admin Panel API","version":"1.2.0"},"tags":[{"name":"Tracker","description":"Devices belonging to the dealer, their clones, settings, and plans. All resources under the /panel/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":"Enter the panel session hash with the \"NVX \" prefix, e.g. \"NVX fa7bf873fab9333144e171372a321b06\". Obtain the hash from the accountAuth operation.","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 a 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.","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":{"/panel/tracker/move":{"post":{"tags":["Tracker"],"summary":"Move tracker","operationId":"trackerMove","description":"Reassign a tracker to a different user of the same dealer. The tracker must not be a clone.\n\nThe response returns the **new** tracker ID. Changing the owner creates a new tracker record, so the ID sent in the request no longer refers to the moved tracker afterwards.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["tracker_id","user_id"],"properties":{"tracker_id":{"type":"integer","description":"Tracker ID. Must belong to the current dealer.","minimum":1},"user_id":{"type":"integer","description":"ID of the destination user. Must differ from the current owner and belong to the same dealer.","minimum":1}}}}}},"responses":{"200":{"description":"Tracker moved","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"id":{"type":"integer","description":"ID of the tracker after the move. Moving a tracker to another user creates a **new** tracker ID, so this differs from the `tracker_id` sent in the request. Use this value for subsequent calls about the moved tracker.","readOnly":true}}}}}},"400":{"description":"Bad request. The response body carries the API-level error code in `status.code`. Validation failures also include an `errors` array.","$ref":"#/components/responses/ResponseError"},"403":{"description":"Operation not permitted, error code 13: the session lacks the required permission.","$ref":"#/components/responses/ResponseError"},"default":{"$ref":"#/components/responses/ResponseError"}}}}}}
```

{% hint style="warning" %}
The `id` in the response is the **new** tracker ID. Moving a tracker to another user creates a new tracker record, so the `tracker_id` you sent no longer refers to the moved tracker. Store the returned `id` for any subsequent calls about it.
{% endhint %}

#### Errors

* 219 - Not allowed for clones of the device - when the source tracker is a clone.
* 201 - Not found in the database - when the tracker is not found.
* 246 - Invalid user ID - when `user_id` matches the current owner, or does not exist or belong to the authorized dealer.
* 247 - Entity already exists - when the destination user already has a clone of this tracker.
* 252 - Device already corrupted - when the source of the tracker is corrupted.

***

*required permissions*: `trackers: "read"`.

## Read tracker

> Read a single tracker.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Admin Panel API","version":"1.2.0"},"tags":[{"name":"Tracker","description":"Devices belonging to the dealer, their clones, settings, and plans. All resources under the /panel/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":"Enter the panel session hash with the \"NVX \" prefix, e.g. \"NVX fa7bf873fab9333144e171372a321b06\". Obtain the hash from the accountAuth operation.","name":"Authorization","in":"header"}},"schemas":{"Tracker":{"type":"object","description":"A tracker: a device as presented to one owning user. A clone shares its source with another tracker.","readOnly":true,"properties":{"id":{"type":"integer","description":"Tracker ID."},"label":{"type":"string","description":"Display label."},"group_id":{"type":"integer","description":"Group ID, `0` when ungrouped."},"user_id":{"type":"integer","description":"ID of the owning user."},"dealer_id":{"type":"integer","description":"ID of the owning dealer."},"owner_name":{"type":"string","description":"Display name of the owning user."},"source":{"$ref":"#/components/schemas/TrackerSource"},"model_name":{"type":"string","description":"Human-readable device model name."},"clone":{"type":"boolean","description":"`true` if this tracker is a clone of another."},"deleted":{"type":"boolean","description":"Whether the tracker is marked deleted."},"creation_date":{"type":"string","description":"When the tracker was created.","format":"date"},"last_connection":{"type":["string","null"],"description":"When the device last connected, as `YYYY-MM-DD HH:MM:SS`."}}},"TrackerSource":{"type":"object","description":"The physical device behind a tracker. Several operations act on the source rather than the tracker, and `raw_command/send` identifies it by `device_id`.","readOnly":true,"properties":{"id":{"type":"integer","description":"Source ID."},"device_id":{"type":"string","description":"Device identifier, used by the raw command operation."},"model":{"type":"string","description":"Device model code."},"blocked":{"type":"boolean","description":"Whether the device is blocked."},"phone":{"type":["string","null"],"description":"SIM phone number, or `null` for devices without one."},"tariff_id":{"type":"integer","description":"ID of the plan the device is on."},"tariff_end_date":{"type":["string","null"],"description":"When the current plan period ends.","format":"date"},"connection_status":{"type":"string","description":"Current connection state."},"creation_date":{"type":"string","description":"When the source was created.","format":"date"}}}},"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 a 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.","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":{"/panel/tracker/read":{"post":{"tags":["Tracker"],"summary":"Read tracker","operationId":"trackerRead","description":"Read a single tracker.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["tracker_id"],"properties":{"tracker_id":{"type":"integer","description":"Tracker ID. Must belong to the current dealer.","minimum":1}}}}}},"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.","$ref":"#/components/responses/ResponseError"},"403":{"description":"Operation not permitted, error code 13: the session lacks the required permission.","$ref":"#/components/responses/ResponseError"},"default":{"$ref":"#/components/responses/ResponseError"}}}}}}
```

#### Errors

* 201 - Not found in the database - when the tracker is not found.
* 252 - Device already corrupted - when the source of the tracker is corrupted.

***

*required permissions*: `trackers: "update"`.

## Retry tracker registration

> Retry registration of a device that failed to register.\
> \
> Rate limited: a second attempt within 120 seconds fails with error code 264. Devices without a GSM module return error code 214.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Admin Panel API","version":"1.2.0"},"tags":[{"name":"Tracker","description":"Devices belonging to the dealer, their clones, settings, and plans. All resources under the /panel/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":"Enter the panel session hash with the \"NVX \" prefix, e.g. \"NVX fa7bf873fab9333144e171372a321b06\". Obtain the hash from the accountAuth operation.","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 a 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.","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":{"/panel/tracker/register_retry":{"post":{"tags":["Tracker"],"summary":"Retry tracker registration","operationId":"trackerRegisterRetry","description":"Retry registration of a device that failed to register.\n\nRate limited: a second attempt within 120 seconds fails with error code 264. Devices without a GSM module return error code 214.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["tracker_id"],"properties":{"tracker_id":{"type":"integer","description":"Tracker ID. Must belong to the current dealer.","minimum":1},"send_register_commands":{"type":"boolean","description":"Whether to send configuration commands to the device as part of the retry."}}}}}},"responses":{"200":{"$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.","$ref":"#/components/responses/ResponseError"},"403":{"description":"Operation not permitted, error code 13: the session lacks the required permission.","$ref":"#/components/responses/ResponseError"},"default":{"$ref":"#/components/responses/ResponseError"}}}}}}
```

#### Errors

* 201 - Not found in the database - when the tracker is not found.
* 252 - Device already corrupted - if the tracker is corrupted.
* 264 - Timeout not reached - if another retry for this tracker was made in the last 120 seconds.
* 208 - Device blocked - when the tracker exists but was blocked due to plan restrictions or another reason.
* 219 - Not allowed for clones of the device - when the specified tracker is a clone.
* 214 - Requested operation or parameters are not supported by the device - when the device has no GSM module.

***

*required permissions*: `trackers: "update"`.

## Update tracker settings

> Update the dealer-editable settings of a tracker.\
> \
> The settings sit at the \*\*top level\*\* of the request alongside \`tracker\_id\`, not nested under a wrapper.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Admin Panel API","version":"1.2.0"},"tags":[{"name":"Tracker","description":"Devices belonging to the dealer, their clones, settings, and plans. All resources under the /panel/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":"Enter the panel session hash with the \"NVX \" prefix, e.g. \"NVX fa7bf873fab9333144e171372a321b06\". Obtain the hash from the accountAuth operation.","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 a 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.","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":{"/panel/tracker/settings/update":{"post":{"tags":["Tracker"],"summary":"Update tracker settings","operationId":"trackerSettingsUpdate","description":"Update the dealer-editable settings of a tracker.\n\nThe settings sit at the **top level** of the request alongside `tracker_id`, not nested under a wrapper.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["tracker_id"],"properties":{"tracker_id":{"type":"integer","description":"Tracker ID. Must belong to the current dealer.","minimum":1},"label":{"type":"string","description":"Tracker label."},"deleted":{"type":"boolean","description":"Whether the tracker is marked deleted."}}}}}},"responses":{"200":{"$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.","$ref":"#/components/responses/ResponseError"},"403":{"description":"Operation not permitted, error code 13: the session lacks the required permission.","$ref":"#/components/responses/ResponseError"},"default":{"$ref":"#/components/responses/ResponseError"}}}}}}
```

The settings sit at the top level of the request alongside `tracker_id`, not nested under a wrapper.

#### Errors

* 201 - Not found in the database - when the tracker is not found.
* 252 - Device already corrupted - when the source of the tracker is corrupted.

***

*required permissions*: `trackers: "update"`.

{% hint style="warning" %}
Holding `trackers: "update"` may not be enough for this operation. A session with the full `trackers` permission set was refused with error code 13, while every other `trackers: "update"` operation on the same session succeeded. If you receive code 13 here despite holding the permission, contact support.
{% endhint %}

## Update tracker source

> Update the source device behind a tracker, for example to block or unblock it.\
> \
> Holding \`trackers: update\` may not be sufficient: a session with the full \`trackers\` permission set was observed to receive \`403\` code 13 from this operation while every other \`trackers: update\` operation succeeded. Something beyond the declared permission gates it.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Admin Panel API","version":"1.2.0"},"tags":[{"name":"Tracker","description":"Devices belonging to the dealer, their clones, settings, and plans. All resources under the /panel/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":"Enter the panel session hash with the \"NVX \" prefix, e.g. \"NVX fa7bf873fab9333144e171372a321b06\". Obtain the hash from the accountAuth operation.","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 a 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.","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":{"/panel/tracker/source/update":{"post":{"tags":["Tracker"],"summary":"Update tracker source","operationId":"trackerSourceUpdate","description":"Update the source device behind a tracker, for example to block or unblock it.\n\nHolding `trackers: update` may not be sufficient: a session with the full `trackers` permission set was observed to receive `403` code 13 from this operation while every other `trackers: update` operation succeeded. Something beyond the declared permission gates it.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["tracker_id"],"properties":{"tracker_id":{"type":"integer","description":"Tracker ID. Must belong to the current dealer.","minimum":1},"blocked":{"type":"boolean","description":"Whether the source device is blocked."}}}}}},"responses":{"200":{"$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.","$ref":"#/components/responses/ResponseError"},"403":{"description":"Operation not permitted, error code 13: the session lacks the required permission.","$ref":"#/components/responses/ResponseError"},"default":{"$ref":"#/components/responses/ResponseError"}}}}}}
```

#### Errors

* 201 - Not found in the database - when the tracker is not found.
* 252 - Device already corrupted - when the source of the tracker is corrupted.

***

*required permissions*: `trackers: "update"` and `transactions: "create"`.

{% hint style="warning" %}
This operation has billing consequences and can create a transaction against the balance of the user.
{% endhint %}

## Change tracker plan

> Move a tracker to a different plan, optionally charging or repaying immediately.\
> \
> This operation has billing consequences: it can create a transaction against the user's balance.\
> \
> The new plan must have a device limit at least as large as the tracker count of the owning user, otherwise error code 221 is returned.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Admin Panel API","version":"1.2.0"},"tags":[{"name":"Tracker","description":"Devices belonging to the dealer, their clones, settings, and plans. All resources under the /panel/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":"Enter the panel session hash with the \"NVX \" prefix, e.g. \"NVX fa7bf873fab9333144e171372a321b06\". Obtain the hash from the accountAuth operation.","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 a 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.","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":{"/panel/tracker/tariff/change":{"post":{"tags":["Tracker"],"summary":"Change tracker plan","operationId":"trackerTariffChange","description":"Move a tracker to a different plan, optionally charging or repaying immediately.\n\nThis operation has billing consequences: it can create a transaction against the user's balance.\n\nThe new plan must have a device limit at least as large as the tracker count of the owning user, otherwise error code 221 is returned.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["tracker_id","tariff_id","repay","charge"],"properties":{"tracker_id":{"type":"integer","description":"Tracker ID. Must belong to the current dealer.","minimum":1},"tariff_id":{"type":"integer","description":"ID of the destination plan.","minimum":1},"repay":{"type":"boolean","description":"Whether to repay the unused remainder of the current plan."},"charge":{"type":"boolean","description":"Whether to charge for the new plan immediately."}}}}}},"responses":{"200":{"$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.","$ref":"#/components/responses/ResponseError"},"403":{"description":"Operation not permitted, error code 13: the session lacks the required permission.","$ref":"#/components/responses/ResponseError"},"default":{"$ref":"#/components/responses/ResponseError"}}}}}}
```

#### Errors

* 221 - Device limit exceeded - when the device limit of the new plan is lower than the tracker count of the user.
* 252 - Device already corrupted - when the source of the tracker is corrupted.

***

*required permissions*: `trackers: "update"`.

## Send raw command

> Send a raw protocol command to a device.\
> \
> \*\*This operation identifies the device by \`device\_id\`, not \`tracker\_id\`\*\*, unlike every other operation on this resource. \`device\_id\` is the identifier on the \`source\` object of a tracker. Sending \`tracker\_id\` instead fails validation.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Admin Panel API","version":"1.2.0"},"tags":[{"name":"Tracker","description":"Devices belonging to the dealer, their clones, settings, and plans. All resources under the /panel/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":"Enter the panel session hash with the \"NVX \" prefix, e.g. \"NVX fa7bf873fab9333144e171372a321b06\". Obtain the hash from the accountAuth operation.","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 a 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.","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":{"/panel/tracker/raw_command/send":{"post":{"tags":["Tracker"],"summary":"Send raw command","operationId":"trackerRawCommandSend","description":"Send a raw protocol command to a device.\n\n**This operation identifies the device by `device_id`, not `tracker_id`**, unlike every other operation on this resource. `device_id` is the identifier on the `source` object of a tracker. Sending `tracker_id` instead fails validation.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["device_id","command"],"properties":{"device_id":{"type":"string","description":"Device identifier, taken from `source.device_id` on the tracker."},"command":{"type":"string","description":"Raw command text, in whatever form the device protocol expects."},"type":{"type":"string","description":"Command type."}}}}}},"responses":{"200":{"$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.","$ref":"#/components/responses/ResponseError"},"403":{"description":"Operation not permitted, error code 13: the session lacks the required permission.","$ref":"#/components/responses/ResponseError"},"default":{"$ref":"#/components/responses/ResponseError"}}}}}}
```

This is the only operation on this page that identifies the device by `device_id` rather than `tracker_id`. Take the value from `source.device_id` on the tracker.

#### Errors

* 7 - Invalid parameters.
* 201 - Not found in the database - if no tracker with that device ID belongs to the authorized dealer.
* 252 - Device already corrupted - if the source of the tracker is corrupted.


---

# 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/panel-api/resources/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.
