Download OpenAPI specification:
Public REST API for fleet tracking data (vehicles, live locations, reports, and history). Replaces the legacy SOAP web service; the modernized JSON field names below fully replace the legacy SOAP fields for all API consumers.
All endpoints require an API key sent as an HTTP Bearer token:
Authorization: Bearer <key>. Keys are issued per firm; each key is scoped
to that firm's vehicles only.
Successful responses always use the shape { "data": ..., "meta": { "count": N } }.
Failures use { "error": { "code": "...", "message": "..." } } with a
machine-readable code and a human-readable English message.
If a requested deviceId does not belong to the caller's account (per the
key's vehicle scope), the API does not return 404/403 — it returns
HTTP 200 with an empty result: { "data": [], "meta": { "count": 0 } }.
This matches the legacy service's "no result set" behavior for
unauthorized/unknown devices.
Report and history endpoints that accept date1/date2 enforce a
server-side maximum range:
/v1/history/tracking: 300 days/v1/reports/mileage,
/v1/reports/working-hours, /v1/reports/heat, /v1/history/alarms):
32 daysExceeding the cap, or sending date1 after date2, or an unparseable
date, returns HTTP 422 with {"error":{"code":"INVALID_DATE_RANGE", ...}}.
Confirms whether the supplied Authorization: Bearer API key is
valid, active, and (if IP-restricted) called from an allowed IP.
The key is already authenticated by middleware before this handler
runs, so a 200 response simply confirms validity.
{- "data": {
- "valid": true
}, - "meta": { }
}Returns every vehicle the API key's account has access to
(via the account's vehicle scope). No query parameters.
The legacy DRIVER field is intentionally omitted from this
endpoint (wire parity with the legacy service).
{- "data": [
- {
- "deviceId": "352093081234567",
- "licensePlate": "34 ABC 123",
- "deviceType": "FMC130"
}
], - "meta": {
- "count": 42
}
}Returns the most recent known position/telemetry per vehicle.
If deviceId is omitted or empty, returns the last location for
every vehicle in the account's scope. If deviceId is supplied but
does not belong to the account, returns an empty list (ownership
guard — see top-level description), not an error.
| deviceId | string Example: deviceId=352093081234567 Device identifier (IMEI). Omit or leave empty to include all
vehicles in the account's scope. If a |
{- "data": [
- {
- "deviceId": "352093081234567",
- "licensePlate": "34 ABC 123",
- "address": "Atatürk Bulvarı No:1, Ankara",
- "latitude": 39.925018,
- "longitude": 32.836956,
- "speed": 62.5,
- "heading": 180,
- "mileageKm": 123456.7,
- "driver": "Ahmet Yilmaz",
- "ignition": true,
- "workingHours": 8.5
}
], - "meta": {
- "count": 42
}
}Returns per-device, per-day distance traveled (km) between date1
and date2 (inclusive). deviceId is optional; omit for all
vehicles in scope. Maximum range: 32 days.
| deviceId | string Example: deviceId=352093081234567 Device identifier (IMEI). Omit or leave empty to include all
vehicles in the account's scope. If a |
| date1 required | string <date> Example: date1=2026-07-01 Range start date, inclusive, |
| date2 required | string <date> Example: date2=2026-07-02 Range end date, inclusive, |
{- "data": [
- {
- "deviceId": "352093081234567",
- "licensePlate": "34 ABC 123",
- "date": "2026-07-01",
- "distanceKm": 214.3
}
], - "meta": {
- "count": 42
}
}Returns one aggregate working-hours total per device over the
date1..date2 range (not one row per day). deviceId is
optional; omit for all vehicles in scope. Maximum range: 32 days.
The always-empty legacy DATE field is removed from this endpoint's
output.
| deviceId | string Example: deviceId=352093081234567 Device identifier (IMEI). Omit or leave empty to include all
vehicles in the account's scope. If a |
| date1 required | string <date> Example: date1=2026-07-01 Range start date, inclusive, |
| date2 required | string <date> Example: date2=2026-07-02 Range end date, inclusive, |
{- "data": [
- {
- "deviceId": "352093081234567",
- "licensePlate": "34 ABC 123",
- "workingHours": 63.25
}
], - "meta": {
- "count": 42
}
}Returns temperature-sensor readings with position/telemetry context
for a single device between date1 and date2. deviceId is
required. Maximum range: 32 days.
| deviceId required | string Example: deviceId=352093081234567 Device identifier (IMEI). Required for this endpoint. If the
device does not belong to the account, the response is an empty
list (HTTP 200), not an error. Omitting it returns HTTP 422 with
|
| date1 required | string <date> Example: date1=2026-07-01 Range start date, inclusive, |
| date2 required | string <date> Example: date2=2026-07-02 Range end date, inclusive, |
{- "data": [
- {
- "deviceId": "352093081234567",
- "licensePlate": "34 ABC 123",
- "timestamp": "2026-07-01T08:15:00+03:00",
- "temperature": 4.2,
- "address": "Atatürk Bulvarı No:1, Ankara",
- "latitude": 39.925018,
- "longitude": 32.836956,
- "speed": 62.5,
- "ignition": true,
- "heading": 180
}
], - "meta": {
- "count": 42
}
}Returns CAN-Bus telemetry readings (engine RPM, coolant temperature,
speed, fuel level, distance, fuel usage, etc.) for a single device
between date1 and date2. deviceId is required. Maximum
range: 32 days. One row per reading timestamp; a signal absent
from a reading is null.
| deviceId required | string Example: deviceId=352093081234567 Device identifier (IMEI). Required for this endpoint. If the
device does not belong to the account, the response is an empty
list (HTTP 200), not an error. Omitting it returns HTTP 422 with
|
| date1 required | string <date> Example: date1=2026-07-01 Range start date, inclusive, |
| date2 required | string <date> Example: date2=2026-07-02 Range end date, inclusive, |
{- "data": [
- {
- "deviceId": "352093081234567",
- "licensePlate": "34 ABC 123",
- "timestamp": "2026-07-01T08:15:00+03:00",
- "engineRpm": 1450,
- "coolantTemp": 87.5,
- "speed": 62,
- "fuelLevelPercent": 74,
- "fuelLevelLitres": 148,
- "totalDistanceKm": 123456.7,
- "totalFuelUsed": 4820.5,
- "fuelRate": 12.3,
- "address": "Atatürk Bulvarı, Edirne"
}
], - "meta": {
- "count": 42
}
}Returns passenger ride records (boarding and alighting time, location,
and coordinates, plus plate and device) for the caller's firm
between date1 and date2 (over the boarding time). Unlike the other
report endpoints, this is scoped by firm, not by device — the caller
sees all passenger rides for their firm. Maximum range: 32 days.
An optional plateNumber filters by plate (partial match).
| date1 required | string <date> Example: date1=2026-07-01 Range start date, inclusive, |
| date2 required | string <date> Example: date2=2026-07-02 Range end date, inclusive, |
| plateNumber | string Example: plateNumber=34 ABC Optional plate filter (partial, case-insensitive match). |
{- "data": [
- {
- "passengerName": "Ahmet Yılmaz",
- "plateNumber": "34 ABC 123",
- "deviceId": "352093081234567",
- "boardingTime": "2026-07-06T08:15:00+03:00",
- "alightingTime": "2026-07-06T08:47:00+03:00",
- "boardingAddress": "Kadıköy, İstanbul",
- "boardingLatitude": 40.9901,
- "boardingLongitude": 29.0301,
- "alightingAddress": "Beşiktaş, İstanbul",
- "alightingLatitude": 41.0422,
- "alightingLongitude": 29.0089
}
], - "meta": {
- "count": 42
}
}Returns historical position/telemetry points for a single device
between date1 and date2. deviceId is required. Maximum
range: 300 days (wider than other date-ranged endpoints).
| deviceId required | string Example: deviceId=352093081234567 Device identifier (IMEI). Required for this endpoint. If the
device does not belong to the account, the response is an empty
list (HTTP 200), not an error. Omitting it returns HTTP 422 with
|
| date1 required | string <date> Example: date1=2026-07-01 Range start date, inclusive, |
| date2 required | string <date> Example: date2=2026-07-02 Range end date, inclusive, |
{- "data": [
- {
- "deviceId": "352093081234567",
- "licensePlate": "34 ABC 123",
- "timestamp": "2026-07-01T08:15:00+03:00",
- "address": "Atatürk Bulvarı No:1, Ankara",
- "latitude": 39.925018,
- "longitude": 32.836956,
- "speed": 62.5,
- "ignition": true,
- "heading": 180
}
], - "meta": {
- "count": 42
}
}Returns historical alarm events with position context for a single
device between date1 and date2. deviceId is required.
Maximum range: 32 days. Unlike the other history/report
endpoints, rows do not include an ignition field.
| deviceId required | string Example: deviceId=352093081234567 Device identifier (IMEI). Required for this endpoint. If the
device does not belong to the account, the response is an empty
list (HTTP 200), not an error. Omitting it returns HTTP 422 with
|
| date1 required | string <date> Example: date1=2026-07-01 Range start date, inclusive, |
| date2 required | string <date> Example: date2=2026-07-02 Range end date, inclusive, |
{- "data": [
- {
- "deviceId": "352093081234567",
- "licensePlate": "34 ABC 123",
- "timestamp": "2026-07-01T08:15:00+03:00",
- "address": "Atatürk Bulvarı No:1, Ankara",
- "latitude": 39.925018,
- "longitude": 32.836956,
- "speed": 62.5,
- "heading": 180,
- "alarm": "Overspeed"
}
], - "meta": {
- "count": 42
}
}