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
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
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’svehicleName 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-healthonce 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’svehicleIdis the internal ID. Match onimeiwhen both are non-null. - Empty body. Last position returns
200with no body when the vehicle has no stored position or no completed ignition period yet. itemscan benull. Engine codes returnitems: nullwhen the vehicle has no engine-fault record.utcTimehas noZsuffix but is always UTC;detectedAtis in the API key’s time zone.voltageis the vehicle battery. It is the 12/24 V battery, not the tracker’s internal battery, and can benull.