One REST API for vehicles, journeys and live positions, plus on-demand MDVR video and HMAC-signed webhooks. OAuth2 client-credentials, zero-loss delta feeds, and a clean OpenAPI 3.1 spec you generate a typed client from in seconds.
Authenticate once with client-credentials, then call any endpoint with a bearer token. Your organization context comes from the token, so there is no org header to manage.
Create a client on your organization’s API Access page. You receive a client_id and a one-time client_secret.
FLEETLIVE_CLIENT_ID="cl_7Q2f9a1b8e4c" FLEETLIVE_CLIENT_SECRET="sk_live_shown_once"
Exchange the credentials at FleetLive Identity for a bearer token scoped to partner.api.
curl -X POST https://identity.fleetlive.ai/connect/token \ -d grant_type=client_credentials \ -d client_id=$FLEETLIVE_CLIENT_ID \ -d client_secret=$FLEETLIVE_CLIENT_SECRET \ -d audience=partner.api \ -d scope=partner.api
Send the token as a bearer header. Here we list vehicles in your fleet, with the org resolved from the token’s fleetlive.org_id claim.
curl https://api.partner.fleetlive.ai/v1/vehicles \ -H "Authorization: Bearer $TOKEN" # 200 OK # { "items": [ { "id": "veh_a91f", "reg": "BX21 LMC", # "fleetId": "flt_north", "status": "moving" } ], ... }
Subscribe an endpoint and FleetLive posts a signed JSON body when something happens on a vehicle. Each delivery is a FleetLiveWebhookEvent envelope with a stable eventId for dedupe, the topic type, your organisationId, an occurredAt timestamp, and a per-topic data payload.
{
"eventId": "9f2c0b7a-4e11-4d3a-8a6e-2b1c9d0e5f31",
"type": "journey.completed",
"organisationId": "b3a1e2c4-5d6f-4a8b-9c0d-1e2f3a4b5c6d",
"occurredAt": "2026-07-09T14:32:08Z",
"data": {
"journeyId": "1a2b3c4d-5e6f-4071-8a9b-0c1d2e3f4a5b",
"isUpdated": false,
"startAddress": "12 Dock Rd, Liverpool",
"endAddress": "Trafford Park, Manchester",
"startTime": "2026-07-09T13:05:00Z",
"endTime": "2026-07-09T14:32:08Z",
"lengthMeters": 58120.4,
"timeInSeconds": 5228,
"maxSpeed": 96,
"idleTimeInSeconds": 214,
"startLocation": { "lat": 53.4084, "long": -2.9916 },
"endLocation": { "lat": 53.4670, "long": -2.3210 },
"device": { "hardwareId": "SMX-8841207" },
"organisation": { "id": "b3a1e2c4-5d6f-4a8b-9c0d-1e2f3a4b5c6d" },
"fleet": { "id": "6d5c4b3a-2f1e-4d0c-8b7a-9e0f1a2b3c4d" },
"vehicle": { "id": "c4d3e2f1-0a9b-4c8d-7e6f-5a4b3c2d1e0f" }
}
}
{
"eventId": "5c7d8e9f-0a1b-4c2d-3e4f-5a6b7c8d9e0f",
"type": "alarm.raised",
"organisationId": "b3a1e2c4-5d6f-4a8b-9c0d-1e2f3a4b5c6d",
"occurredAt": "2026-07-09T14:33:51Z",
"data": {
"id": "alm_7f31c9",
"triggerTime": "2026-07-09T14:33:51Z",
"alarmKey": "harshBraking",
"location": { "lat": 53.4661, "long": -2.3402 },
"speed": 47,
"heading": 118,
"alarmState": 1,
"ioNumber": null,
"device": { "hardwareId": "SMX-8841207" },
"organisation": { "id": "b3a1e2c4-5d6f-4a8b-9c0d-1e2f3a4b5c6d" },
"fleet": { "id": "6d5c4b3a-2f1e-4d0c-8b7a-9e0f1a2b3c4d" },
"vehicle": { "id": "c4d3e2f1-0a9b-4c8d-7e6f-5a4b3c2d1e0f" }
}
}
{
"eventId": "2b3c4d5e-6f70-4819-a2b3-c4d5e6f70819",
"type": "device.event",
"organisationId": "b3a1e2c4-5d6f-4a8b-9c0d-1e2f3a4b5c6d",
"occurredAt": "2026-07-09T14:34:12Z",
"data": {
"id": "evt_9a2f10",
"triggerTime": "2026-07-09T14:34:12Z",
"eventTypes": [ "dsm.distraction", "dsm.fatigue" ],
"device": { "hardwareId": "SMX-8841207" },
"organisation": { "id": "b3a1e2c4-5d6f-4a8b-9c0d-1e2f3a4b5c6d" },
"fleet": { "id": "6d5c4b3a-2f1e-4d0c-8b7a-9e0f1a2b3c4d" },
"vehicle": { "id": "c4d3e2f1-0a9b-4c8d-7e6f-5a4b3c2d1e0f" }
}
}
{
"eventId": "7e8f9a0b-1c2d-4e3f-5a6b-7c8d9e0f1a2b",
"type": "media.available",
"organisationId": "b3a1e2c4-5d6f-4a8b-9c0d-1e2f3a4b5c6d",
"occurredAt": "2026-07-09T14:40:03Z",
"data": {
"id": "0f1e2d3c-4b5a-4968-8776-5544332211ff",
"type": 2,
"device": { "hardwareId": "SMX-8841207" },
"event": { "id": "9a2f10bc-7d6e-4f5a-8b9c-0d1e2f3a4b5c" },
"fleet": { "id": "6d5c4b3a-2f1e-4d0c-8b7a-9e0f1a2b3c4d" },
"vehicle": { "id": "c4d3e2f1-0a9b-4c8d-7e6f-5a4b3c2d1e0f" }
}
}
{
"eventId": "SMX-8841207:2026-07-09T14:41:07.4210000Z",
"type": "live-gps",
"organisationId": "b3a1e2c4-5d6f-4a8b-9c0d-1e2f3a4b5c6d",
"occurredAt": "2026-07-09T14:41:07.421Z",
"data": {
"utc": "2026-07-09T14:41:07.421Z",
"speed": 52.4,
"heading": 121.8,
"location": { "lat": 53.4655, "long": -2.3450 },
"device": { "hardwareId": "SMX-8841207" },
"organisation": { "id": "b3a1e2c4-5d6f-4a8b-9c0d-1e2f3a4b5c6d" },
"fleet": { "id": "6d5c4b3a-2f1e-4d0c-8b7a-9e0f1a2b3c4d" },
"vehicle": { "id": "c4d3e2f1-0a9b-4c8d-7e6f-5a4b3c2d1e0f" }
}
}
{
"eventId": "SMX-8841207:2026-07-09T14:30:00Z:0:3f9a1c",
"type": "telemetry-raw",
"organisationId": "b3a1e2c4-5d6f-4a8b-9c0d-1e2f3a4b5c6d",
"occurredAt": "2026-07-09T14:45:00Z",
"data": {
"device": { "hardwareId": "SMX-8841207" },
"organisation": { "id": "b3a1e2c4-5d6f-4a8b-9c0d-1e2f3a4b5c6d" },
"fleet": { "id": "6d5c4b3a-2f1e-4d0c-8b7a-9e0f1a2b3c4d" },
"vehicle": { "id": "c4d3e2f1-0a9b-4c8d-7e6f-5a4b3c2d1e0f" },
"windowStart": "2026-07-09T14:30:00Z",
"windowEnd": "2026-07-09T14:45:00Z",
"count": 3,
"historic": false,
"frames": [
{ "utc": "2026-07-09T14:30:00Z", "location": { "lat": 53.4084, "long": -2.9916 }, "speed": 48, "heading": 117, "signal": true },
{ "utc": "2026-07-09T14:37:30Z", "location": { "lat": 53.4370, "long": -2.6620 }, "speed": 61, "heading": 104, "signal": true },
{ "utc": "2026-07-09T14:45:00Z", "location": { "lat": 53.4655, "long": -2.3450 }, "speed": 52, "heading": 122, "signal": false }
]
}
}
{
"eventId": "4d5e6f70-8192-43a4-b5c6-d7e8f9001a2b",
"type": "geofence.entered",
"organisationId": "b3a1e2c4-5d6f-4a8b-9c0d-1e2f3a4b5c6d",
"occurredAt": "2026-07-09T14:50:20Z",
"data": {
"id": "4d5e6f70-8192-43a4-b5c6-d7e8f9001a2b",
"occurredAt": "2026-07-09T14:50:20Z",
"geofence": { "id": "a1b2c3d4-e5f6-4708-9a1b-2c3d4e5f6071", "name": "Trafford Park Depot" },
"position": { "lat": 53.4668, "long": -2.3195 },
"device": { "hardwareId": "SMX-8841207" },
"organisation": { "id": "b3a1e2c4-5d6f-4a8b-9c0d-1e2f3a4b5c6d" },
"fleet": { "id": "6d5c4b3a-2f1e-4d0c-8b7a-9e0f1a2b3c4d" },
"vehicle": { "id": "c4d3e2f1-0a9b-4c8d-7e6f-5a4b3c2d1e0f" }
}
}
{
"eventId": "5e6f7081-9243-44b5-c6d7-e8f9001a2b3c",
"type": "geofence.exited",
"organisationId": "b3a1e2c4-5d6f-4a8b-9c0d-1e2f3a4b5c6d",
"occurredAt": "2026-07-09T15:12:44Z",
"data": {
"id": "5e6f7081-9243-44b5-c6d7-e8f9001a2b3c",
"occurredAt": "2026-07-09T15:12:44Z",
"geofence": { "id": "a1b2c3d4-e5f6-4708-9a1b-2c3d4e5f6071", "name": "Trafford Park Depot" },
"position": { "lat": 53.4655, "long": -2.3220 },
"device": { "hardwareId": "SMX-8841207" },
"organisation": { "id": "b3a1e2c4-5d6f-4a8b-9c0d-1e2f3a4b5c6d" },
"fleet": { "id": "6d5c4b3a-2f1e-4d0c-8b7a-9e0f1a2b3c4d" },
"vehicle": { "id": "c4d3e2f1-0a9b-4c8d-7e6f-5a4b3c2d1e0f" }
}
}
{
"eventId": "6f708192-4354-45c6-d7e8-f9001a2b3c4d",
"type": "geofence.speeding",
"organisationId": "b3a1e2c4-5d6f-4a8b-9c0d-1e2f3a4b5c6d",
"occurredAt": "2026-07-09T15:03:09Z",
"data": {
"id": "6f708192-4354-45c6-d7e8-f9001a2b3c4d",
"occurredAt": "2026-07-09T15:03:09Z",
"geofence": { "id": "a1b2c3d4-e5f6-4708-9a1b-2c3d4e5f6071", "name": "Trafford Park Depot" },
"position": { "lat": 53.4662, "long": -2.3208 },
"speed": 34,
"speedLimit": 20,
"device": { "hardwareId": "SMX-8841207" },
"organisation": { "id": "b3a1e2c4-5d6f-4a8b-9c0d-1e2f3a4b5c6d" },
"fleet": { "id": "6d5c4b3a-2f1e-4d0c-8b7a-9e0f1a2b3c4d" },
"vehicle": { "id": "c4d3e2f1-0a9b-4c8d-7e6f-5a4b3c2d1e0f" }
}
}
We publish a clean OpenAPI 3.1 spec, so you generate a fully-typed client for your language in seconds.
kiota generate -l CSharp -d https://api.partner.fleetlive.ai/openapi/v1.json -c FleetLivePartnerApiClient