Zone visits feed
One row for each stay of a vehicle in a zone, for the whole fleet. Part of BI analytics in the documentation.
GET/v1/analytics/visits
Returns one row for each stay in a zone (geofence). Filodos pairs each zone entry with the next exit from the same zone by the same vehicle. Rows sort by entry time, then device id.
Use this feed to see how long vehicles stay at depots and at customer sites.
| Parameter | Required | Notes |
|---|---|---|
since | Yes | First fleet-local date, in YYYY-MM-DD form. |
until | Yes | Last fleet-local date, in YYYY-MM-DD form. Both bounds are inclusive. The range cannot exceed 366 days. |
limit | No | Rows per page, from 1 to 5000. Default 1000. |
offset | No | First row to return. Default 0. Use next_ from the answer to read the next page. |
Send an API key with the analytics:read scope in the Authorization header. A key reads data for its organization only. See BI analytics for the rules that all feeds share.
Example
Request:
curl 'https://filodos.gr/filodos-dashboard/api/scoring/v1/analytics/visits?since=2026-10-01&until=2026-10-31&limit=5000' \
-H "Authorization: Bearer filodos_REPLACE_WITH_YOUR_KEY"
Answer (200). The example shows two rows of 156. A real page has up to limit rows. next_offset is null on the last page.
{
"rows": [
{
"device_id": 43,
"vehicle_name": "IKX-1234",
"driver_name": "Nikos Papadopoulos",
"geofence_id": 5,
"geofence_name": "Depot Aspropyrgos",
"zone_type": "depot",
"entered_at": "2026-10-01T06:58:12+03:00",
"exited_at": "2026-10-01T07:41:30+03:00",
"duration_minutes": 43.3,
"open": false
},
{
"device_id": 44,
"vehicle_name": "IKY-5678",
"driver_name": "Anna Georgiou",
"geofence_id": 12,
"geofence_name": "Customer Kifisias 44",
"zone_type": "customer",
"entered_at": "2026-10-31T17:20:00+02:00",
"exited_at": null,
"duration_minutes": null,
"open": true
}
],
"total": 156,
"limit": 5000,
"offset": 0,
"next_offset": null
}
In Excel
- Make the query in the Excel Power Query procedure.
- Set
Feed = "visits"in the query. - Select Close & Load.
The sheet then has one row for each row in the answer. A null value gives an empty cell. Some of the columns of the example look like this:
vehicle_ | driver_ | geofence_ | zone_ | entered_ | exited_ | duration_ |
|---|---|---|---|---|---|---|
| IKX-1234 | Nikos Papadopoulos | Depot Aspropyrgos | depot | 2026-10-01T06:58:12+03:00 | 2026-10-01T07:41:30+03:00 | 43.3 |
| IKY-5678 | Anna Georgiou | Customer Kifisias 44 | customer | 2026-10-31T17:20:00+02:00 |
Fields
Each row has these fields, in this order. A timestamp is ISO 8601 Europe/Athens time with an explicit offset.
| Field | Type | Meaning |
|---|---|---|
device_ | integer | The Filodos device id. |
vehicle_ | text or null | The vehicle name, usually the plate. |
driver_ | text or null | The driver linked to the vehicle at the entry time. |
geofence_ | integer | The zone id. |
geofence_ | text or null | The zone name. null when the zone list is not available. |
zone_ | text or null | depot, customer, no-go, or null when the zone has no type. |
entered_ | timestamp | The entry time, in Europe/Athens time with offset. |
exited_ | timestamp or null | The exit time. null for an open stay. |
duration_ | number or null | The time in the zone. null for an open stay. |
open | boolean | true when the date range has no exit for this entry. |
Only entries and exits in the date range count. An exit without its entry in the range does not appear.
When a vehicle enters a zone again before an exit, the first stay ends at the second entry.
total counts stays, not entries and exits.
Errors
An error answer has a JSON body with a detail field.
| Status | Cause |
|---|---|
401 | The Authorization header is missing, or the key is unknown or revoked. |
403 | The key does not have the analytics:read scope, or the caller is a driver login. |
422 | until is before since, the range is more than 366 days, a date is not in YYYY-MM-DD form, or limit or offset is out of range. |