Legacy Data API (v1 / v2)
The data endpoints partners call with a ClientKey issued from Legacy Integration (v1). Hosted by the Integration API (e.g. https://integration.test.eztotrack.com).
ezt_live_… keys, granular scopes). This page documents the existing legacy endpoints for partners already on the ClientKey model.
Authentication
The legacy API uses a two-step flow: exchange your ClientKey for a short-lived JWT, then call the data endpoints with that JWT.
1. Exchange the ClientKey for a token
GET /api/v1/auth
X-Client-Key: b1946ac92492d2347c6235b4d2611184
Response:
{
"userId": null,
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
X-Client-Key header (legacy fallback: client_key). Health probe: GET /api/v1/auth/healthCheck → "ok".
2. Call data endpoints with the token
GET /api/v1/assets?additionalInfo=true
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Assets (v1)
GET /api/v1/assets · POST /api/v1/assets
List current asset positions. GET returns all company assets; POST takes a JSON array of VINs. Query additionalInfo=true adds name/plate/trailers/odometer.
[
{
"vin": "1FUJGLDR5CLBP8834",
"utcTimestamp": "2026-06-20T14:03:11Z",
"latitude": 41.8781,
"longitude": -87.6298,
"name": "Truck 102",
"plateNumber": "IL-1234AB",
"trailers": "TR-55",
"odometer": 481233.0
}
]
GET /api/v1/assets/driversTimers · GET /api/v1/assets/currentWithTimers
Current asset state enriched with driver and HOS clocks.
[
{
"vin": "1FUJGLDR5CLBP8834",
"utcTimestamp": "2026-06-20T14:03:11Z",
"latitude": 41.8781, "longitude": -87.6298,
"odometer": 481233.0, "ignition": true,
"engineHH": 5123.4, "fuel": 68.0,
"name": "Truck 102", "plateNumber": "IL-1234AB", "trailers": "TR-55",
"driverName": "John", "driverSurname": "Doe", "rpm": 1450,
"statusAbbreviation": "ON", "statusDesctiption": "On Duty",
"minsTillBreak": 45, "minsTillDriving": 210,
"minsTillShift": 330, "minsTillCycle": 1880,
"hosUtcTimestamp": "2026-06-20T14:02:55Z"
}
]
GET /api/v1/assets/location
Location breadcrumb for one asset. Params: vin, from, to (ISO 8601 UTC).
[
{ "utcTimestamp": "2026-06-20T13:30:00Z", "latitude": 41.8781, "longitude": -87.6298 },
{ "utcTimestamp": "2026-06-20T13:31:00Z", "latitude": 41.8795, "longitude": -87.6321 }
]
GET /api/v1/assets/gps
Detailed GPS telemetry (speed, heading, signal). Params: vin, from, to.
[
{
"latitude": 41.8781, "longitude": -87.6298,
"distance": 0.42, "speed": 96.5, "direction": 270,
"hdop": 0.9, "satellites": 11,
"utcTimestamp": "2026-06-20T13:30:00Z"
}
]
GET /api/v1/assets/gpsCan
The same GPS samples as /gps, unioned with the CAN samples for the same asset and window, in a single list ordered by utcTimestamp. Each row carries a source of Gps or Can; the other sensor's fields are null. Params: vin, from, to.
[
{ "utcTimestamp": "2026-06-20T13:30:00Z", "source": "Gps", "latitude": 41.8781, "longitude": -87.6298, "distance": 0.42, "speed": 96.5, "direction": 270, "hdop": 0.9, "satellites": 11 },
{ "utcTimestamp": "2026-06-20T13:30:01Z", "source": "Can", "odometer": 481233000, "rpm": 1450, "fuelTank1": 68, "engineHours": 5123.4, "vehicleSpeed": 96 }
]
from–to range is capped at 35 days, and the location, gps and gpsCan endpoints share a single budget of roughly 1 request per minute per asset (HTTP 429 if exceeded).
Asset state (v2)
GET /api/v2/assets · GET /api/v2/assets/vin/{vin} · GET /api/v2/assets/getByAssetId/{assetId}
Richer current state including CAN telemetry. GET /api/v2/assets accepts repeated vin query params (omit for the whole fleet); the by-VIN / by-id variants return a single object (404 if not found).
[
{
"assetId": 10231,
"name": "Truck 102",
"plateNumber": "IL-1234AB",
"vin": "1FUJGLDR5CLBP8834",
"driverId": "a1b2c3d4-...",
"currentLocation": { "latitude": 41.8781, "longitude": -87.6298 },
"type": { "id": 1, "name": "Truck" },
"subType": null,
"gps": {
"latitude": 41.8781, "longitude": -87.6298,
"newDistance": 0.42, "speed": 96.5, "direction": 270,
"hdop": 0.9, "satellites": 11
},
"can": {
"totalDistance": 481233000, "rpm": 1450,
"fuelTank1": 68, "engineHours": 5123.4, "vehicleSpeed": 96
},
"address": "I-90 W, Chicago, IL"
}
]
can and gps may be null when telemetry is unavailable.
POST /api/v2/assets/fuelStopProposal · POST /api/v2/assets/driverProposedFuelStop
Submit proposed fuel stops / a driver-proposed destination. Both return 200 OK.
// POST /api/v2/assets/fuelStopProposal
{
"fuelStopsProposalsPerAsset": [
{
"assetId": 10231,
"proposedFuelStops": [
{
"name": "Pilot #420",
"address": "1500 W Lake St, Chicago, IL",
"fuelPrices": [ { "diesel": 3.79, "discount": 0.12 } ]
}
]
}
]
}
Waste jobs (v1)
GET /api/v1/wastejob
Paged waste-management jobs (requires the Waste module). Filter via query params — e.g. status, serviceType, scheduledFrom/scheduledTo, assignedToAssetId, short=true for a lighter payload — with offset / limit for paging.
{
"jobs": [
{
"jobId": 88213,
"companyId": 7,
"scheduledDate": "2026-06-20T00:00:00Z",
"serviceType": "Pickup",
"status": "InProgress",
"pickUpClientName": "Acme Mfg",
"pickUpAddress": "210 Industrial Pkwy",
"assignedToAssetId": 10231,
"assignedToAssetName": "Truck 102",
"assignedToDriverName": "John Doe",
"tonnage": 4.2,
"utcCreated": "2026-06-19T18:02:00Z"
}
],
"count": 137
}
Company (v1)
GET /api/v1/company/info
The company the caller's token belongs to. The company is taken from the token, never from the request. Country, state (abbreviation) and time zone (IANA name) are resolved to display values.
{
"id": 7,
"name": "Acme Logistics",
"usDotNumber": "1523477",
"address": "233 S Wacker Dr",
"address2": "Suite 4400",
"country": "United States",
"state": "IL",
"city": "Chicago",
"zipCode": "60606",
"phone": "+1-312-555-0100",
"email": "dispatch@acme.example.com",
"contact": "Dana Whitfield",
"timeZone": "America/Chicago"
}
SurfSight webhook (inbound)
POST /api/v1/surfsight/snapshot is an inbound webhook the SurfSight camera platform calls to deliver snapshot/video events — not a partner-facing data endpoint. It ingests the media reference and stores it. No ClientKey is used.
Notes
- All
utc…timestamps are UTC — convert to the company timezone for display. - Every response is scoped to the company tied to your ClientKey.
- The token from
/api/v1/authis short-lived; re-request it when it expires.