Skip to main content

Devices

Manage the GPS tracking units in your fleet — list, inspect, get real-time position, or update configuration.

Prerequisites

All endpoints require a valid JWT token, API key, and tenant header. See Authentication.


List Devices

Retrieve a paginated list of devices with filtering support.

GET/apidev/v1/fleet/devices
PermissionAPICLI_FLEET_DEVICES_READ
Rate Limit30 req/min (sliding window)
Cache60s

Query Parameters

ParameterTypeRequiredDefaultDescription
limitintegerNo25Records per page. Min: 1, Max: 100
offsetintegerNo0Records to skip
statusstringNoA (active) or I (inactive)
namestringNoPartial match on device name or alias
imeistringNoPartial match on IMEI (primary or secondary)
license_platestringNoPartial match on license plate
device_groupstringNoPartial match on device group name

Response Fields

FieldTypeDescription
idstringDevice unique identifier (BigInt as string)
namestring | nullDevice display name
aliasstring | nullShort alias
license_platestring | nullVehicle license plate
imei_appstring | nullPrimary IMEI number
imei_gpsstring | nullSecondary IMEI number
external_idstring | nullIdentifier in an external system
activebooleanWhether the device is currently active
statusstring"A" (active) or "I" (inactive)
device_groupstring | nullGroup or category name
last_positionobject | nullLast known GPS position (see Position fields)

Code Example

curl -s "https://$TENANT/apidev/v1/fleet/devices?limit=10&status=A" \
-H "Authorization: Bearer $TOKEN" \
-H "X-API-Key: $APIKEY" \
-H "tenant: $TENANT"

Example Response

{
"success": true,
"data": [
{
"id": "104820579301",
"name": "Movil 10",
"alias": "M10",
"license_plate": "ABC123",
"imei_app": "352093081234567",
"imei_gps": "352093089876543",
"external_id": null,
"active": true,
"status": "A",
"device_group": "Trucks",
"last_position": {
"latitude": -34.9011,
"longitude": -56.1645,
"speed": 45.2,
"heading": 180,
"datetime": "2026-04-04T14:32:00",
"last_signal_at": "2026-04-04T14:32:00",
"ignition_on_at": "2026-04-04T07:15:00",
"ignition_off_at": null,
"address": "Av. 18 de Julio 1234, Montevideo",
"odometer": 84523.7,
"horometer": 3210.5
}
},
{
"id": "104820579315",
"name": "Movil 15",
"alias": null,
"license_plate": "XYZ789",
"imei_app": "352093089876543",
"imei_gps": null,
"external_id": "EXT-0015",
"active": true,
"status": "A",
"device_group": "Vans",
"last_position": null
}
],
"meta": {
"total": 42,
"limit": 10,
"offset": 0
}
}
info

last_position is null when the device has never reported GPS data. The list endpoint does not include satellites, battery_voltage, or external_power — use the Position endpoint for full telemetry.


Device Detail

Full profile for a single device including vehicle metadata, assigned driver, and last known position with extended telemetry.

GET/apidev/v1/fleet/devices/{id}
PermissionAPICLI_FLEET_DEVICES_READ
Rate Limit30 req/min (sliding window)
Cache30s

Path Parameters

ParameterTypeRequiredDescription
idstringYesDevice unique identifier

Response Fields

All fields from List Devices, plus:

FieldTypeDescription
image_urlstring | nullURL to the device/vehicle image
brandstring | nullVehicle brand (e.g., Toyota, Ford)
modelstring | nullVehicle model
yearinteger | nullVehicle model year
notesstring | nullFree-text notes
driverobject | nullAssigned driver: { id, name }
last_positionobject | nullExtended position with satellites, battery_voltage, external_power (see Position fields)

Code Example

curl -s "https://$TENANT/apidev/v1/fleet/devices/104820579301" \
-H "Authorization: Bearer $TOKEN" \
-H "X-API-Key: $APIKEY" \
-H "tenant: $TENANT"

Example Response

{
"success": true,
"data": {
"id": "104820579301",
"name": "Movil 10",
"alias": "M10",
"license_plate": "ABC123",
"imei_app": "352093081234567",
"imei_gps": "352093089876543",
"external_id": "EXT-0042",
"active": true,
"status": "A",
"device_group": "Trucks",
"image_url": null,
"brand": "Toyota",
"model": "Hilux",
"year": 2022,
"notes": "Assigned to the northern delivery route",
"driver": {
"id": "104820579455",
"name": "Carlos Martinez"
},
"last_position": {
"latitude": -34.9011,
"longitude": -56.1645,
"speed": 45.2,
"heading": 180,
"datetime": "2026-04-04T14:32:00",
"last_signal_at": "2026-04-04T14:32:00",
"ignition_on_at": "2026-04-04T07:15:00",
"ignition_off_at": null,
"address": "Av. 18 de Julio 1234, Montevideo",
"odometer": 84523.7,
"horometer": 3210.5,
"satellites": 12,
"battery_voltage": 12.6,
"external_power": 1
}
},
"meta": {}
}

Device Position

Last known GPS position with full telemetry — coordinates, speed, ignition, sensors, and signal data.

GET/apidev/v1/fleet/devices/{id}/position
PermissionAPICLI_FLEET_DEVICES_READ
Rate Limit30 req/min (sliding window)
Cache30s

Path Parameters

ParameterTypeRequiredDescription
idstringYesDevice unique identifier

Response Fields

FieldTypeDescription
device_idstringDevice identifier
device_namestring | nullDevice display name
latitudenumberLatitude coordinate
longitudenumberLongitude coordinate
speednumberSpeed in km/h
headingnumberHeading in degrees (0–360)
datetimestringTimestamp of the position report
last_signal_atstringTimestamp of last signal received
ignition_on_atstring | nullTimestamp when ignition was last turned on
ignition_off_atstring | nullTimestamp when ignition was last turned off
addressstring | nullReverse geocoded address
odometernumber | nullOdometer reading (km)
horometernumber | nullHour meter reading (hours)
satellitesnumber | nullGPS satellites in view
battery_voltagenumber | nullBattery voltage
external_powernumber | nullExternal power status
Flat structure

Unlike Device Detail which nests GPS data under last_position, this endpoint returns position fields at the root level alongside device_id and device_name.

Code Example

curl -s "https://$TENANT/apidev/v1/fleet/devices/104820579301/position" \
-H "Authorization: Bearer $TOKEN" \
-H "X-API-Key: $APIKEY" \
-H "tenant: $TENANT"

Example Response

{
"success": true,
"data": {
"device_id": "104820579301",
"device_name": "Movil 10",
"latitude": -34.9011,
"longitude": -56.1645,
"speed": 62.5,
"heading": 270,
"datetime": "2026-04-04T14:45:12",
"last_signal_at": "2026-04-04T14:45:12",
"ignition_on_at": "2026-04-04T07:15:00",
"ignition_off_at": null,
"address": "Ruta 1 km 23, San Jose",
"odometer": 84523.7,
"horometer": 3210.5,
"satellites": 12,
"battery_voltage": 12.6,
"external_power": 1
},
"meta": {}
}

Position Fields

Reference for the position/telemetry fields used across Device Detail (last_position object) and Device Position (root level):

FieldTypeIn ListIn DetailIn PositionDescription
latitudenumberLatitude coordinate
longitudenumberLongitude coordinate
speednumberSpeed in km/h
headingnumberHeading 0–360°
datetimestringPosition timestamp
last_signal_atstringLast signal timestamp
ignition_on_atstring | nullIgnition on timestamp
ignition_off_atstring | nullIgnition off timestamp
addressstring | nullReverse geocoded address
odometernumber | nullOdometer (km)
horometernumber | nullHour meter (hours)
satellitesnumber | nullGPS satellites
battery_voltagenumber | nullBattery voltage
external_powernumber | nullExternal power
device_idstringDevice ID (position only)
device_namestring | nullDevice name (position only)
Timestamps

All timestamps are returned without timezone (e.g., "2026-04-04T14:32:00"). The value represents the company's configured timezone. Do not append Z or apply UTC conversion — display as-is.


Update Device

Update a device's configuration. Only send the fields you want to change — omitted fields keep their current value. Send null to clear a nullable field.

PUT/apidev/v1/fleet/devices/{id}
PermissionAPICLI_FLEET_DEVICES_WRITE
Rate Limit30 req/min (sliding window)
CacheNone

Path Parameters

ParameterTypeRequiredDescription
idstringYesDevice unique identifier

Request Body

All fields are optional — only include those you want to modify. See Partial Updates for the general pattern.

FieldTypeMax LengthDescription
namestring200Device display name
aliasstring200Short alias
statusstring10Device status (e.g., "A", "I")
license_platestring20Vehicle license plate (stored uppercase)
brandstring100Vehicle brand
modelstring100Vehicle model
yearintegerVehicle model year
max_speednumberMaximum speed limit (km/h)
tank_capacitynumberFuel tank capacity in liters
device_type_idstring40Device type identifier
provider_idstring40Provider identifier
country_idstring40Country identifier
department_idstring40Department identifier
gmt_offsetnumberGMT timezone offset
imeistring50Primary IMEI number
imei2string50Secondary IMEI number
external_idstring100External system identifier
phonestring50SIM card phone number
image_urlstring500URL to the device/vehicle image
notesstring2000Free-text notes
temp_lownumberLow temperature alarm threshold
temp_highnumberHigh temperature alarm threshold
temp_sensor_1booleanEnable temperature sensor 1
temp_sensor_2booleanEnable temperature sensor 2
cut_oilbooleanFuel cut feature enabled
virtual_odometerbooleanVirtual odometer enabled

Code Example

curl -s -X PUT "https://$TENANT/apidev/v1/fleet/devices/104820579301" \
-H "Authorization: Bearer $TOKEN" \
-H "X-API-Key: $APIKEY" \
-H "tenant: $TENANT" \
-H "Content-Type: application/json" \
-d '{
"license_plate": "ABC999",
"max_speed": 120,
"notes": "Updated route assignment"
}'

Example Response

{
"success": true,
"data": {
"id": "104820579301",
"updated_fields": ["license_plate", "max_speed", "notes"]
},
"meta": {}
}

Errors

All endpoints on this page may return these errors. See Error Handling for the full reference.

CodeHTTPApplies toDescription
BAD_REQUEST400AllMissing required headers
VALIDATION_ERROR400List, UpdateInvalid query params or body fields (e.g., limit > 100, max_speed negative)
UNAUTHORIZED401AllInvalid or expired JWT / API Key
FORBIDDEN403AllUser lacks APICLI_FLEET_DEVICES_READ or APICLI_FLEET_DEVICES_WRITE
NOT_FOUND404Detail, Position, UpdateDevice ID doesn't exist or doesn't belong to your tenant
RATE_LIMITED429AllExceeded 30 req/min