Skip to content

Send GPS positions and odometer readings

Fleet has built-in connectors for Geotab, Motive, Tracksolid Pro and Pilot. For any other platform (or your own devices), send positions and meter readings through the API. They appear on the live map, in position history, and drive meter-based service reminders.

Scopes: telematics:write, meter_entries:write, vehicles:read.

Keep a map from your device id to the Fleet vehicle id. Build it once by looking vehicles up by vin, license_plate or vehicle_number:

Terminal window
curl "https://api.get-fleet.com/v1/vehicles?vin=MR0FB8CD3P0123456" -H "Authorization: Bearer $FLEET_API_KEY"

Buffer positions and send them every 10 to 30 seconds, up to 1,000 per request, for any mix of vehicles:

Terminal window
curl https://api.get-fleet.com/v1/vehicle_positions \
-H "Authorization: Bearer $FLEET_API_KEY" -H "Content-Type: application/json" \
-d '{
"data": [
{ "vehicle_id": "6f1c2b0e-8a43-4c1e-9d55-0c2b7f3e9a10", "recorded_at": "2026-11-01T08:30:05Z",
"latitude": -1.2864, "longitude": 36.8172, "speed_kmh": 42, "heading": 90, "ignition": true },
{ "vehicle_id": "7f1c2b0e-8a43-4c1e-9d55-0c2b7f3e9a10", "recorded_at": "2026-11-01T08:30:07Z",
"latitude": -4.0435, "longitude": 39.6682, "speed_kmh": 0 }
]
}'

The response is 202 with {"object": "vehicle_position_batch", "accepted": 2}. A batch is all or nothing: if any vehicle_id isn’t one of your vehicles, nothing is stored and you get 422 reference_not_found naming it.

Positions don’t move the odometer. Send readings as meter entries, at most every few minutes per vehicle (each one updates the vehicle and can trigger service reminders). Use your event id as external_id, so a resend never creates a duplicate:

Terminal window
curl https://api.get-fleet.com/v1/meter_entries/batch \
-H "Authorization: Bearer $FLEET_API_KEY" -H "Content-Type: application/json" \
-d '{"data": [{"vehicle_id": "6f1c…", "value": 48210.5, "recorded_at": "2026-11-01T08:30:05Z", "external_id": "evt_918273"}]}'
  • Latest position: GET /v1/vehicles/{id}/location
  • History: GET /v1/vehicle_positions?vehicle_id=…&recorded_from=2026-11-01T00:00:00Z&recorded_to=2026-11-02T00:00:00Z&sort=recorded_at

History includes positions from every source, built-in connectors included; source says which.