Arrival Time Report
Average, min, and max arrival time per grouping dimension.
GET
/apidev/v1/reports/gt/arrival-timePermissionAPICLI_RPTGT_TAG
Rate Limit10 req/min (sliding window)
Cache300s (5 min)
Max Range31 days
Overview
Returns arrival-time statistics — average, minimum, and maximum time from task creation to the driver arriving on site — aggregated by a chosen grouping dimension. Use it to monitor response times and detect slow areas or drivers.
- Grouping —
group_bypicks the dimension each row represents (see the values below) - Date basis — the date range always filters on the task finished date (
startdate/enddate) - Filtering — narrow results by devices, drivers, service types, providers, and other catalog filters
Request
Request Headers
Every request to a protected endpoint requires these headers:
| Header | Required | Description |
|---|---|---|
Authorization | Yes | Bearer token obtained from the Login endpoint. Format: Bearer <token> |
X-API-Key | Yes | Company integration key provided during onboarding. Format: gtk_xxx... |
tenant | Yes | Your assigned tenant domain (default: geotareas.com) — always send your assigned tenant |
Content-Type | Conditional | application/json — required for POST and PUT requests |
Query Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
startdate | string | Yes | — | ISO 8601 start date-time |
enddate | string | Yes | — | ISO 8601 end date-time. Max range 31 days |
devices | string | No | All visible | Comma-separated device IDs. Max 500 |
drivers | string | No | All | Comma-separated driver IDs. Max 500 |
service_types | string | No | All | Comma-separated service type IDs. Max 100 |
causes | string | No | All | Comma-separated cause IDs. Max 100 |
subcauses | string | No | All | Comma-separated subcause IDs. Max 100 |
statuses | string | No | All | Comma-separated status codes. Max 100 |
device_groups | string | No | All | Comma-separated device type IDs (the device_group catalog from Fleet / Devices). Filters tasks to devices of those types; combines with devices as an intersection. Max 100 |
origins | string | No | All | Comma-separated origin IDs. Max 100 |
providers | string | No | All | Comma-separated provider IDs. Max 100 |
route_ids | string | No | All | Comma-separated route IDs. Max 100 |
operators | string | No | All | Comma-separated operator IDs. Max 100 |
client_id | string | No | — | Filter by specific client |
account_id | string | No | — | Filter by specific account |
shift_id | string | No | — | Filter by specific shift |
group_by | enum | No | — | Grouping dimension (see below) |
limit | integer | No | 25 | Records per page (1–100) |
offset | integer | No | 0 | Records to skip |
How
device_groups combines with devicesdevice_groups is expanded to every device of those types, and if you also send devices, only the devices present in both lists are kept. If that intersection is empty the report returns no rows.
group_by values
date · month · hour · weekday · department · city · zone · provider · device · device_group · driver · shift · cause · subcause · end_code · origin · telephonist · operator
Code Examples
- cURL
- JavaScript
- Python
curl -s -H "Authorization: Bearer $TOKEN" \
-H "X-API-Key: $APIKEY" \
-H "tenant: $TENANT" \
"https://$TENANT/apidev/v1/reports/gt/arrival-time?startdate=2026-03-01T00:00:00&enddate=2026-03-31T23:59:59&group_by=device&limit=25"
const headers = {
'Authorization': `Bearer ${TOKEN}`,
'X-API-Key': APIKEY,
'tenant': TENANT,
};
const res = await fetch(
`https://${TENANT}/apidev/v1/reports/gt/arrival-time?startdate=2026-03-01T00:00:00&enddate=2026-03-31T23:59:59&group_by=device&limit=25`,
{ headers }
);
const data = await res.json();
import requests
headers = {
"Authorization": f"Bearer {TOKEN}",
"X-API-Key": APIKEY,
"tenant": TENANT,
}
response = requests.get(
f"https://{TENANT}/apidev/v1/reports/gt/arrival-time",
headers=headers,
params={
"startdate": "2026-03-01T00:00:00",
"enddate": "2026-03-31T23:59:59",
"group_by": "device",
"limit": 25,
},
)
data = response.json()
Response Fields
| Field | Type | Description |
|---|---|---|
group_label | string | Display name of the group |
group_id | string | null | Identifier of the group element |
total_tasks | number | Total number of tasks |
avg_arrival_sec | number | Average arrival time in seconds |
min_arrival_sec | number | Minimum arrival time in seconds |
max_arrival_sec | number | Maximum arrival time in seconds |
dist_avg | number | Average distance per task (km) |
Example Response
{
"success": true,
"data": [
{
"group_label": "Truck A-101",
"group_id": "104820579301",
"total_tasks": 47,
"avg_arrival_sec": 1842,
"min_arrival_sec": 480,
"max_arrival_sec": 5400,
"dist_avg": 18.98
},
{
"group_label": "Truck B-205",
"group_id": "104820579402",
"total_tasks": 32,
"avg_arrival_sec": 2100,
"min_arrival_sec": 360,
"max_arrival_sec": 4800,
"dist_avg": 21.45
}
],
"meta": {
"total": 2,
"limit": 25,
"offset": 0
}
}
Errors
| Code | HTTP | Description |
|---|---|---|
VALIDATION_ERROR | 400 | Invalid params: missing dates, range > 31 days, invalid group_by |
UNAUTHORIZED | 401 | Missing, invalid, or expired tenant / Authorization / X-API-Key |
FORBIDDEN | 403 | User lacks required permission |
RATE_LIMITED | 429 | Exceeded 10 req/min |
INTERNAL_ERROR | 500 | Unexpected server error |