> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreflux.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Trackunit Iris

> Client-mode REST API connector for Trackunit construction and off-highway telematics: list and find assets, latest GeoJSON locations, engine hours, fuel and other machine insights from the Time Series and ISO 15143-3 (AEMP 2.0) APIs, CAN faults, asset events, device health, sites and groups, asset notes and custom fields, and broker data ingestion, with OAuth 2.0 client credentials (API Tokens v2); companion server connector for Trackunit webhooks

Technical Preview

## Overview

Client-mode REST API connector for Trackunit construction and off-highway telematics: list and find assets, latest GeoJSON locations, engine hours, fuel and other machine insights from the Time Series and ISO 15143-3 (AEMP 2.0) APIs, CAN faults, asset events, device health, sites and groups, asset notes and custom fields, and broker data ingestion, with OAuth 2.0 client credentials (API Tokens v2); companion server connector for Trackunit webhooks.

This is one of the templates in the Trackunit REST API app (`trackunit`). Deploy it alongside the other connectors of that app when they depend on each other (for example a token connector plus an API connector).

> [!NOTE]
>
> Not yet verified against the live vendor API: No Trackunit account, API Key or API user on the factory box (no TRACKUNIT\_\* variables); only static, mock, negative-control and fake-credential public probes ran.

## Auth

API Tokens v2: GetToken posts grant\_type=client\_credentials\&client\_id\&client\_secret\&scope (form) to [https://auth.trackunit.com/token/v2](https://auth.trackunit.com/token/v2); tokens last 1200 s, no refresh token. Legacy API user: GetTokenLegacy posts grant\_type=password\&username\&password\&scope=api (form) with Authorization: Basic base64(client\_id:client\_secret) to [https://auth.trackunit.com/token](https://auth.trackunit.com/token); tokens last 3600 s, refresh\_token with offline\_access. API events: Authorization: Bearer \<access\_token> from payload. Every event also sends User-Agent: Coreflux-Broker.

Auth headers used by the template: `Authorization: Bearer {value.json.access_token}`.

## Template parameters

| Placeholder | Type | Description | Required |
| - | - | - | - |
| `RouteName` | string | Name of the Trackunit Iris connector | no |
| `BaseUrl` | string | Trackunit Iris base URL without trailing slash (e.g. [https://iris.trackunit.com](https://iris.trackunit.com)) | yes |

`BASE_ADDRESS` default: `https://iris.trackunit.com`.

## Events

| Event | Method | Endpoint | Request topic | Response topic | Payload fields |
| - | - | - | - | - | - |
| `ListAssets` | GET | `/api/asset/v2/assets?{value.json.query}` | `fleet/trackunit/asset/list` | `fleet/trackunit/asset/list/response` | `access_token`, `query` |
| `GetAsset` | GET | `/api/asset/v2/assets/{value.json.id}` | `fleet/trackunit/asset/get` | `fleet/trackunit/asset/get/response` | `access_token`, `id` |
| `QueryAssets` | POST | `/api/asset/v2/assets/query` | `fleet/trackunit/asset/query` | `fleet/trackunit/asset/query/response` | `access_token`, `body` |
| `UpdateAsset` | PATCH | `/api/asset/v2/assets` | `fleet/trackunit/asset/update` | `fleet/trackunit/asset/update/response` | `access_token`, `body` |
| `QueryAssetNotes` | POST | `/api/asset/v2/assets/notes/query` | `fleet/trackunit/asset-note/query` | `fleet/trackunit/asset-note/query/response` | `access_token`, `body` |
| `UpdateAssetNote` | PATCH | `/api/asset/v2/assets/note` | `fleet/trackunit/asset-note/update` | `fleet/trackunit/asset-note/update/response` | `access_token`, `body` |
| `ListLocations` | GET | `/api/location/v1/locations?{value.json.query}` | `fleet/trackunit/location/list` | `fleet/trackunit/location/list/response` | `access_token`, `query` |
| `GetAssetLocation` | GET | `/api/location/v1/locations/{value.json.id}` | `fleet/trackunit/location/get` | `fleet/trackunit/location/get/response` | `access_token`, `id` |
| `ListAssetSeries` | GET | `/api/time-series/v1/assets/{value.json.id}/prometheus/api/v1/series?{value.json.query}` | `fleet/trackunit/series/list` | `fleet/trackunit/series/list/response` | `access_token`, `id`, `query` |
| `QueryAssetMetric` | GET | `/api/time-series/v1/assets/{value.json.id}/prometheus/api/v1/query?{value.json.query}` | `fleet/trackunit/metric/query` | `fleet/trackunit/metric/query/response` | `access_token`, `id`, `query` |
| `QueryAssetMetricRange` | GET | `/api/time-series/v1/assets/{value.json.id}/prometheus/api/v1/query_range?{value.json.query}` | `fleet/trackunit/metric/query-range` | `fleet/trackunit/metric/query-range/response` | `access_token`, `id`, `query` |
| `GetAssetRawMetrics` | GET | `/api/time-series/v1/assets/{value.json.id}/metrics?{value.json.query}` | `fleet/trackunit/metric/raw` | `fleet/trackunit/metric/raw/response` | `access_token`, `id`, `query` |
| `GetFleetSnapshot` | GET | `/public/api/aemp/v2/15143/-3/Fleet/{value.json.page}?{value.json.query}` | `fleet/trackunit/aemp-fleet/get` | `fleet/trackunit/aemp-fleet/get/response` | `access_token`, `page`, `query` |
| `GetEquipmentSnapshot` | GET | `/public/api/aemp/v2/15143/-3/Fleet/Equipment/ID/{value.json.id}?{value.json.query}` | `fleet/trackunit/aemp-equipment/get` | `fleet/trackunit/aemp-equipment/get/response` | `access_token`, `id`, `query` |
| `GetOperatingHours` | GET | `/public/api/aemp/v2/15143/-3/Fleet/Equipment/ID/{value.json.id}/CumulativeOperatingHours/{value.json.start}/{value.json.end}/1` | `fleet/trackunit/operating-hours/get` | `fleet/trackunit/operating-hours/get/response` | `access_token`, `end`, `id`, `start` |
| `GetIdleHours` | GET | `/public/api/aemp/v2/15143/-3/Fleet/Equipment/ID/{value.json.id}/CumulativeIdleHours/{value.json.start}/{value.json.end}/1` | `fleet/trackunit/idle-hours/get` | `fleet/trackunit/idle-hours/get/response` | `access_token`, `end`, `id`, `start` |
| `GetFuelUsed` | GET | `/public/api/aemp/v2/15143/-3/Fleet/Equipment/ID/{value.json.id}/CumulativeFuelUsed/{value.json.start}/{value.json.end}/1` | `fleet/trackunit/fuel-used/get` | `fleet/trackunit/fuel-used/get/response` | `access_token`, `end`, `id`, `start` |
| `GetFuelRemaining` | GET | `/public/api/aemp/v2/15143/-3/Fleet/Equipment/ID/{value.json.id}/FuelRemainingRatio/{value.json.start}/{value.json.end}/1` | `fleet/trackunit/fuel-remaining/get` | `fleet/trackunit/fuel-remaining/get/response` | `access_token`, `end`, `id`, `start` |
| `GetLocationHistory` | GET | `/public/api/aemp/v2/15143/-3/Fleet/Equipment/ID/{value.json.id}/Locations/{value.json.start}/{value.json.end}/1` | `fleet/trackunit/location-history/get` | `fleet/trackunit/location-history/get/response` | `access_token`, `end`, `id`, `start` |
| `GetDiagnosticCodes` | GET | `/public/api/aemp/v2/15143/-3/Fleet/Equipment/ID/{value.json.id}/Faults/{value.json.start}/{value.json.end}/1` | `fleet/trackunit/diagnostic-code/get` | `fleet/trackunit/diagnostic-code/get/response` | `access_token`, `end`, `id`, `start` |
| `GetMachineInsightSeries` | GET | `/public/api/aemp/v2/15143/-3/Fleet/Equipment/ID/{value.json.id}/{value.json.insight}/{value.json.start}/{value.json.end}/1` | `fleet/trackunit/machine-insight/get` | `fleet/trackunit/machine-insight/get/response` | `access_token`, `end`, `id`, `insight`, `start` |
| `GetActiveFaults` | GET | `/public/api/can-faults/get-unit-active-faults?{value.json.query}` | `fleet/trackunit/fault/active` | `fleet/trackunit/fault/active/response` | `access_token`, `query` |
| `QueryFaults` | POST | `/public/api/can-faults/faults` | `fleet/trackunit/fault/query` | `fleet/trackunit/fault/query/response` | `access_token`, `body` |
| `ListActiveEvents` | POST | `/public/api/eventlog/v3/asset-event/active?{value.json.query}` | `fleet/trackunit/event/active` | `fleet/trackunit/event/active/response` | `access_token`, `body`, `query` |
| `QueryEventLog` | POST | `/public/api/eventlog/v3/asset-event/log?{value.json.query}` | `fleet/trackunit/event/log` | `fleet/trackunit/event/log/response` | `access_token`, `body`, `query` |
| `ListDeviceHealthIssues` | GET | `/api/device-health-issues/v1/issues?{value.json.query}` | `fleet/trackunit/device-health/list` | `fleet/trackunit/device-health/list/response` | `access_token`, `query` |
| `ListAssetDeviceHealthIssues` | GET | `/api/device-health-issues/v1/assets/{value.json.id}/issues?{value.json.query}` | `fleet/trackunit/asset-device-health/list` | `fleet/trackunit/asset-device-health/list/response` | `access_token`, `id`, `query` |
| `ListSites` | GET | `/api/site/v1/sites?{value.json.query}` | `fleet/trackunit/site/list` | `fleet/trackunit/site/list/response` | `access_token`, `query` |
| `ListAssetsOnSites` | POST | `/api/site/v1/sites/assets?{value.json.query}` | `fleet/trackunit/site-asset/list` | `fleet/trackunit/site-asset/list/response` | `access_token`, `body`, `query` |
| `ListSitesForAssets` | POST | `/api/site/v1/assets/sites?{value.json.query}` | `fleet/trackunit/asset-site/list` | `fleet/trackunit/asset-site/list/response` | `access_token`, `body`, `query` |
| `ListGroups` | GET | `/api/organization/v1/groups?{value.json.query}` | `fleet/trackunit/group/list` | `fleet/trackunit/group/list/response` | `access_token`, `query` |
| `ListGroupAssets` | GET | `/api/organization/v1/groups/{value.json.id}/assets` | `fleet/trackunit/group-asset/list` | `fleet/trackunit/group-asset/list/response` | `access_token`, `id` |
| `ListAlertConfigurations` | GET | `/api/alerts/v1/configurations?{value.json.query}` | `fleet/trackunit/alert-configuration/list` | `fleet/trackunit/alert-configuration/list/response` | `access_token`, `query` |
| `ListCustomFieldDefinitions` | GET | `/api/custom-fields/v1/definitions/?{value.json.query}` | `fleet/trackunit/custom-field-definition/list` | `fleet/trackunit/custom-field-definition/list/response` | `access_token`, `query` |
| `GetCustomFieldValues` | GET | `/api/custom-fields/v1/values/?{value.json.query}` | `fleet/trackunit/custom-field-value/list` | `fleet/trackunit/custom-field-value/list/response` | `access_token`, `query` |
| `SetCustomFieldValues` | POST | `/api/custom-fields/v1/set-values/` | `fleet/trackunit/custom-field-value/set` | `fleet/trackunit/custom-field-value/set/response` | `access_token`, `body` |
| `IngestAssetData` | POST | `/api/data-ingestion/v1beta2/assets/ingestions` | `fleet/trackunit/ingestion/create` | `fleet/trackunit/ingestion/create/response` | `access_token`, `body` |
| `GetIngestionStatus` | GET | `/api/data-ingestion/v1beta2/assets/ingestions/{value.json.id}?{value.json.query}` | `fleet/trackunit/ingestion/get` | `fleet/trackunit/ingestion/get/response` | `access_token`, `id`, `query` |

## Deploy

Get the template card (JSON with `template` and `metadata`) from the broker, then deploy the connector:

```bash theme={"theme":"css-variables","languages":{"custom":["/languages/lot.json"]}}
mosquitto_pub -t '$SYS/Coreflux/Command' -m "-routeCode TRACKUNIT"
```

The deployable connector from the REST API app, with `BASE_ADDRESS` already filled in:

```lot theme={"theme":"css-variables","languages":{"custom":["/languages/lot.json"]}}
DEFINE ROUTE TrackunitIris WITH TYPE REST_API
    ADD REST_API_CONFIG
        WITH BASE_ADDRESS "https://iris.trackunit.com"
        WITH ENABLE_CLIENT "true"
        WITH USE_SSL "true"
        WITH REQUEST_TIMEOUT '30'
        WITH DEFAULT_CONTENT_TYPE "application/json"
    ADD EVENT ListAssets
        WITH SOURCE_TOPIC "fleet/trackunit/asset/list"
        WITH DESTINATION_TOPIC "fleet/trackunit/asset/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/asset/v2/assets?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
    ADD EVENT GetAsset
        WITH SOURCE_TOPIC "fleet/trackunit/asset/get"
        WITH DESTINATION_TOPIC "fleet/trackunit/asset/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/asset/v2/assets/{value.json.id}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
    ADD EVENT QueryAssets
        WITH SOURCE_TOPIC "fleet/trackunit/asset/query"
        WITH DESTINATION_TOPIC "fleet/trackunit/asset/query/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/api/asset/v2/assets/query"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT UpdateAsset
        WITH SOURCE_TOPIC "fleet/trackunit/asset/update"
        WITH DESTINATION_TOPIC "fleet/trackunit/asset/update/response"
        WITH METHOD "PATCH"
        WITH ENDPOINT "/api/asset/v2/assets"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT QueryAssetNotes
        WITH SOURCE_TOPIC "fleet/trackunit/asset-note/query"
        WITH DESTINATION_TOPIC "fleet/trackunit/asset-note/query/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/api/asset/v2/assets/notes/query"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT UpdateAssetNote
        WITH SOURCE_TOPIC "fleet/trackunit/asset-note/update"
        WITH DESTINATION_TOPIC "fleet/trackunit/asset-note/update/response"
        WITH METHOD "PATCH"
        WITH ENDPOINT "/api/asset/v2/assets/note"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT ListLocations
        WITH SOURCE_TOPIC "fleet/trackunit/location/list"
        WITH DESTINATION_TOPIC "fleet/trackunit/location/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/location/v1/locations?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
    ADD EVENT GetAssetLocation
        WITH SOURCE_TOPIC "fleet/trackunit/location/get"
        WITH DESTINATION_TOPIC "fleet/trackunit/location/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/location/v1/locations/{value.json.id}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
    ADD EVENT ListAssetSeries
        WITH SOURCE_TOPIC "fleet/trackunit/series/list"
        WITH DESTINATION_TOPIC "fleet/trackunit/series/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/time-series/v1/assets/{value.json.id}/prometheus/api/v1/series?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
    ADD EVENT QueryAssetMetric
        WITH SOURCE_TOPIC "fleet/trackunit/metric/query"
        WITH DESTINATION_TOPIC "fleet/trackunit/metric/query/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/time-series/v1/assets/{value.json.id}/prometheus/api/v1/query?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
    ADD EVENT QueryAssetMetricRange
        WITH SOURCE_TOPIC "fleet/trackunit/metric/query-range"
        WITH DESTINATION_TOPIC "fleet/trackunit/metric/query-range/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/time-series/v1/assets/{value.json.id}/prometheus/api/v1/query_range?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
    ADD EVENT GetAssetRawMetrics
        WITH SOURCE_TOPIC "fleet/trackunit/metric/raw"
        WITH DESTINATION_TOPIC "fleet/trackunit/metric/raw/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/time-series/v1/assets/{value.json.id}/metrics?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "*/*"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
    ADD EVENT GetFleetSnapshot
        WITH SOURCE_TOPIC "fleet/trackunit/aemp-fleet/get"
        WITH DESTINATION_TOPIC "fleet/trackunit/aemp-fleet/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/public/api/aemp/v2/15143/-3/Fleet/{value.json.page}?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
    ADD EVENT GetEquipmentSnapshot
        WITH SOURCE_TOPIC "fleet/trackunit/aemp-equipment/get"
        WITH DESTINATION_TOPIC "fleet/trackunit/aemp-equipment/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/public/api/aemp/v2/15143/-3/Fleet/Equipment/ID/{value.json.id}?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
    ADD EVENT GetOperatingHours
        WITH SOURCE_TOPIC "fleet/trackunit/operating-hours/get"
        WITH DESTINATION_TOPIC "fleet/trackunit/operating-hours/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/public/api/aemp/v2/15143/-3/Fleet/Equipment/ID/{value.json.id}/CumulativeOperatingHours/{value.json.start}/{value.json.end}/1"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
    ADD EVENT GetIdleHours
        WITH SOURCE_TOPIC "fleet/trackunit/idle-hours/get"
        WITH DESTINATION_TOPIC "fleet/trackunit/idle-hours/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/public/api/aemp/v2/15143/-3/Fleet/Equipment/ID/{value.json.id}/CumulativeIdleHours/{value.json.start}/{value.json.end}/1"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
    ADD EVENT GetFuelUsed
        WITH SOURCE_TOPIC "fleet/trackunit/fuel-used/get"
        WITH DESTINATION_TOPIC "fleet/trackunit/fuel-used/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/public/api/aemp/v2/15143/-3/Fleet/Equipment/ID/{value.json.id}/CumulativeFuelUsed/{value.json.start}/{value.json.end}/1"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
    ADD EVENT GetFuelRemaining
        WITH SOURCE_TOPIC "fleet/trackunit/fuel-remaining/get"
        WITH DESTINATION_TOPIC "fleet/trackunit/fuel-remaining/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/public/api/aemp/v2/15143/-3/Fleet/Equipment/ID/{value.json.id}/FuelRemainingRatio/{value.json.start}/{value.json.end}/1"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
    ADD EVENT GetLocationHistory
        WITH SOURCE_TOPIC "fleet/trackunit/location-history/get"
        WITH DESTINATION_TOPIC "fleet/trackunit/location-history/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/public/api/aemp/v2/15143/-3/Fleet/Equipment/ID/{value.json.id}/Locations/{value.json.start}/{value.json.end}/1"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
    ADD EVENT GetDiagnosticCodes
        WITH SOURCE_TOPIC "fleet/trackunit/diagnostic-code/get"
        WITH DESTINATION_TOPIC "fleet/trackunit/diagnostic-code/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/public/api/aemp/v2/15143/-3/Fleet/Equipment/ID/{value.json.id}/Faults/{value.json.start}/{value.json.end}/1"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
    ADD EVENT GetMachineInsightSeries
        WITH SOURCE_TOPIC "fleet/trackunit/machine-insight/get"
        WITH DESTINATION_TOPIC "fleet/trackunit/machine-insight/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/public/api/aemp/v2/15143/-3/Fleet/Equipment/ID/{value.json.id}/{value.json.insight}/{value.json.start}/{value.json.end}/1"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
    ADD EVENT GetActiveFaults
        WITH SOURCE_TOPIC "fleet/trackunit/fault/active"
        WITH DESTINATION_TOPIC "fleet/trackunit/fault/active/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/public/api/can-faults/get-unit-active-faults?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
    ADD EVENT QueryFaults
        WITH SOURCE_TOPIC "fleet/trackunit/fault/query"
        WITH DESTINATION_TOPIC "fleet/trackunit/fault/query/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/public/api/can-faults/faults"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT ListActiveEvents
        WITH SOURCE_TOPIC "fleet/trackunit/event/active"
        WITH DESTINATION_TOPIC "fleet/trackunit/event/active/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/public/api/eventlog/v3/asset-event/active?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT QueryEventLog
        WITH SOURCE_TOPIC "fleet/trackunit/event/log"
        WITH DESTINATION_TOPIC "fleet/trackunit/event/log/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/public/api/eventlog/v3/asset-event/log?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT ListDeviceHealthIssues
        WITH SOURCE_TOPIC "fleet/trackunit/device-health/list"
        WITH DESTINATION_TOPIC "fleet/trackunit/device-health/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/device-health-issues/v1/issues?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
    ADD EVENT ListAssetDeviceHealthIssues
        WITH SOURCE_TOPIC "fleet/trackunit/asset-device-health/list"
        WITH DESTINATION_TOPIC "fleet/trackunit/asset-device-health/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/device-health-issues/v1/assets/{value.json.id}/issues?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
    ADD EVENT ListSites
        WITH SOURCE_TOPIC "fleet/trackunit/site/list"
        WITH DESTINATION_TOPIC "fleet/trackunit/site/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/site/v1/sites?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
    ADD EVENT ListAssetsOnSites
        WITH SOURCE_TOPIC "fleet/trackunit/site-asset/list"
        WITH DESTINATION_TOPIC "fleet/trackunit/site-asset/list/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/api/site/v1/sites/assets?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT ListSitesForAssets
        WITH SOURCE_TOPIC "fleet/trackunit/asset-site/list"
        WITH DESTINATION_TOPIC "fleet/trackunit/asset-site/list/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/api/site/v1/assets/sites?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT ListGroups
        WITH SOURCE_TOPIC "fleet/trackunit/group/list"
        WITH DESTINATION_TOPIC "fleet/trackunit/group/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/organization/v1/groups?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
    ADD EVENT ListGroupAssets
        WITH SOURCE_TOPIC "fleet/trackunit/group-asset/list"
        WITH DESTINATION_TOPIC "fleet/trackunit/group-asset/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/organization/v1/groups/{value.json.id}/assets"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
    ADD EVENT ListAlertConfigurations
        WITH SOURCE_TOPIC "fleet/trackunit/alert-configuration/list"
        WITH DESTINATION_TOPIC "fleet/trackunit/alert-configuration/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/alerts/v1/configurations?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
    ADD EVENT ListCustomFieldDefinitions
        WITH SOURCE_TOPIC "fleet/trackunit/custom-field-definition/list"
        WITH DESTINATION_TOPIC "fleet/trackunit/custom-field-definition/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/custom-fields/v1/definitions/?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
    ADD EVENT GetCustomFieldValues
        WITH SOURCE_TOPIC "fleet/trackunit/custom-field-value/list"
        WITH DESTINATION_TOPIC "fleet/trackunit/custom-field-value/list/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/custom-fields/v1/values/?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
    ADD EVENT SetCustomFieldValues
        WITH SOURCE_TOPIC "fleet/trackunit/custom-field-value/set"
        WITH DESTINATION_TOPIC "fleet/trackunit/custom-field-value/set/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/api/custom-fields/v1/set-values/"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT IngestAssetData
        WITH SOURCE_TOPIC "fleet/trackunit/ingestion/create"
        WITH DESTINATION_TOPIC "fleet/trackunit/ingestion/create/response"
        WITH METHOD "POST"
        WITH ENDPOINT "/api/data-ingestion/v1beta2/assets/ingestions"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
            ADD "Content-Type" "application/json"
        WITH BODY "{value.json.body}"
    ADD EVENT GetIngestionStatus
        WITH SOURCE_TOPIC "fleet/trackunit/ingestion/get"
        WITH DESTINATION_TOPIC "fleet/trackunit/ingestion/get/response"
        WITH METHOD "GET"
        WITH ENDPOINT "/api/data-ingestion/v1beta2/assets/ingestions/{value.json.id}?{value.json.query}"
        WITH HEADERS
            ADD "Accept" "application/json"
            ADD "User-Agent" "Coreflux-Broker"
            ADD "Authorization" "Bearer {value.json.access_token}"
```

Deploy it with `-addRoute` (do not include `ADD METADATA`).

## Usage example

Call `ListAssets` by publishing a JSON payload to its request topic, and read the reply on the response topic:

```bash theme={"theme":"css-variables","languages":{"custom":["/languages/lot.json"]}}
mosquitto_sub -t 'fleet/trackunit/asset/list/response' &
mosquitto_pub -t 'fleet/trackunit/asset/list' -m '{"access_token": "<access_token>", "query": "<query>"}'
```

## Related

* [REST API Connectors](/latest/lot-language/routes/rest-api-routes)
* [REST API Apps catalog](/latest/lot-language/routes/rest-api-apps)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.