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"
}
]
from–to range is capped at 35 days, and these endpoints are rate-limited to 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
}
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.