Skip to main content

Overview

Three V2 endpoints together give a picture of a vehicle’s health: The vehicle routes take the public vehicle ID (deviceId). Battery health returns vehicleId as the internal vehicle ID, which can differ, so this guide matches battery rows to vehicles by IMEI. The single-vehicle routes are rate-limited per API key — last position especially tightly — so this per-vehicle pattern suits a handful of vehicles a few times a day; see Rate limiting. For a whole fleet, use the fleet last positions endpoint.

Step 1 — Get the latest position and status

GET /v2/api/vehicles/{id}/last-position returns the vehicle’s latest record. Fields this dashboard uses: Last position returns 200 with an empty body when the vehicle has no stored position, or has not yet completed an ignition-on or ignition-off period; see Last position.
cURL
Python
Python

Step 2 — Get battery health

GET /v2/api/battery-health takes no company parameter; the token decides the scope. It pages with pageNumber (not page) and pageSize, and returns totalCount.
Python
Fields used here:

Step 3 — Get engine fault codes

GET /v2/api/vehicles/{id}/engine-codes returns the codes first reported in the vehicle’s latest engine-fault record. When the vehicle has no such record, items is null.
cURL
Python
Each engine code item includes:

Step 4 — Combine the data

Match each vehicle to its battery row by IMEI, and say so when a match is not possible: no last position, no IMEI, or an IMEI that more than one battery row shares. A shared IMEI can only be detected among the rows battery health returns (see Battery health), and the only check on a match is that the battery row’s vehicleName equals the vehicle’s deviceName; a mismatch is reported, not hidden. The calls go one at a time through the request helper from Step 1.

Limitations

  • Fetch battery health once per run. Page through GET /v2/api/battery-health once and join the rows locally, rather than calling it for each vehicle; see Battery health for which vehicles it covers.

Gotchas

  • Two vehicle IDs. deviceId (position data, vehicle routes) is the public vehicle ID; battery health’s vehicleId is the internal ID. Match on imei when both are non-null.
  • Empty body. Last position returns 200 with no body when the vehicle has no stored position or no completed ignition period yet.
  • items can be null. Engine codes return items: null when the vehicle has no engine-fault record.
  • utcTime has no Z suffix but is always UTC; detectedAt is in the API key’s time zone.
  • voltage is the vehicle battery. It is the 12/24 V battery, not the tracker’s internal battery, and can be null.