Filodos

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.

ParameterRequiredNotes
sinceYesFirst fleet-local date, in YYYY-MM-DD form.
untilYesLast fleet-local date, in YYYY-MM-DD form. Both bounds are inclusive. The range cannot exceed 366 days.
limitNoRows per page, from 1 to 5000. Default 1000.
offsetNoFirst row to return. Default 0. Use next_offset 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

  1. Make the query in the Excel Power Query procedure.
  2. Set Feed = "visits" in the query.
  3. 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_namedriver_namegeofence_namezone_typeentered_atexited_atduration_minutes
IKX-1234Nikos PapadopoulosDepot Aspropyrgosdepot2026-10-01T06:58:12+03:002026-10-01T07:41:30+03:0043.3
IKY-5678Anna GeorgiouCustomer Kifisias 44customer2026-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.

FieldTypeMeaning
device_idintegerThe Filodos device id.
vehicle_nametext or nullThe vehicle name, usually the plate.
driver_nametext or nullThe driver linked to the vehicle at the entry time.
geofence_idintegerThe zone id.
geofence_nametext or nullThe zone name. null when the zone list is not available.
zone_typetext or nulldepot, customer, no-go, or null when the zone has no type.
entered_attimestampThe entry time, in Europe/Athens time with offset.
exited_attimestamp or nullThe exit time. null for an open stay.
duration_minutesnumber or nullThe time in the zone. null for an open stay.
openbooleantrue 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.

StatusCause
401The Authorization header is missing, or the key is unknown or revoked.
403The key does not have the analytics:read scope, or the caller is a driver login.
422until 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.