Skip to main content

Control Arrival Time Report

Arrival time distribution across time bands per grouping.

GET/apidev/v1/reports/gt/control-arrival-time
PermissionAPICLI_RPTGT_CTLL
Rate Limit10 req/min (sliding window)
Cache300s (5 min)
Max Range31 days

Overview​

Returns how arrival times spread across fixed time bands (0–15, 15–30, 30–45, 45–60, and 60+ minutes), with the task count in each band plus the average, aggregated by a chosen grouping dimension. Use it to see the shape of your response times, not just the average.

  • Grouping — group_by picks 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
This report does not match the "Promised Arrival Time Control" screen yet

The web screen with the same name measures something different: it compares each task's actual arrival time against the time promised to the customer and reports how many were met, how many were exceeded, and the compliance percentage. This endpoint returns arrival time bands instead, and its avg_time_sec is the average travel time in seconds (the screen shows minutes). Do not reconcile the two side by side. Aligning this endpoint with the screen is planned and will change the response fields.


Request​

Request Headers​

Every request to a protected endpoint requires these headers:

HeaderRequiredDescription
AuthorizationYesBearer token obtained from the Login endpoint. Format: Bearer <token>
X-API-KeyYesCompany integration key provided during onboarding. Format: gtk_xxx...
tenantYesYour assigned tenant domain (default: geotareas.com) — always send your assigned tenant
Content-TypeConditionalapplication/json — required for POST and PUT requests

Query Parameters​

ParameterTypeRequiredDefaultDescription
startdatestringYes—ISO 8601 start date-time
enddatestringYes—ISO 8601 end date-time. Max range 31 days
devicesstringNoAll visibleComma-separated device IDs. Max 500
driversstringNoAllComma-separated driver IDs. Max 500
service_typesstringNoAllComma-separated service type IDs. Max 100
causesstringNoAllComma-separated cause IDs. Max 100
subcausesstringNoAllComma-separated subcause IDs. Max 100
device_groupsstringNoAllComma-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
originsstringNoAllComma-separated origin IDs. Max 100
providersstringNoAllComma-separated provider IDs. Max 100
route_idsstringNoAllComma-separated route IDs. Max 100
operatorsstringNoAllComma-separated operator IDs. Max 100
client_idstringNo—Filter by specific client
account_idstringNo—Filter by specific account
shift_idstringNo—Filter by specific shift
group_byenumNo—Grouping dimension (see below)
limitintegerNo25Records per page (1–100)
offsetintegerNo0Records to skip
How device_groups combines with devices

device_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 -s -H "Authorization: Bearer $TOKEN" \
-H "X-API-Key: $APIKEY" \
-H "tenant: $TENANT" \
"https://$TENANT/apidev/v1/reports/gt/control-arrival-time?startdate=2026-03-01T00:00:00&enddate=2026-03-31T23:59:59&group_by=device&limit=25"

Response Fields​

FieldTypeDescription
group_labelstringDisplay name of the group
group_idstring | nullIdentifier of the group element
total_tasksnumberTotal number of tasks
band_0_15numberTasks with arrival time 0–15 min
band_15_30numberTasks with arrival time 15–30 min
band_30_45numberTasks with arrival time 30–45 min
band_45_60numberTasks with arrival time 45–60 min
band_60_plusnumberTasks with arrival time > 60 min
avg_time_secnumberAverage arrival time in seconds

Example Response​

{
"success": true,
"data": [
{
"group_label": "Truck A-101",
"group_id": "104820579301",
"total_tasks": 47,
"band_0_15": 18,
"band_15_30": 12,
"band_30_45": 8,
"band_45_60": 5,
"band_60_plus": 4,
"avg_time_sec": 1560
},
{
"group_label": "Truck B-205",
"group_id": "104820579402",
"total_tasks": 32,
"band_0_15": 10,
"band_15_30": 9,
"band_30_45": 6,
"band_45_60": 4,
"band_60_plus": 3,
"avg_time_sec": 1740
}
],
"meta": {
"total": 2,
"limit": 25,
"offset": 0
}
}

Errors​

CodeHTTPDescription
VALIDATION_ERROR400Invalid params: missing dates, range > 31 days, invalid group_by
UNAUTHORIZED401Missing, invalid, or expired tenant / Authorization / X-API-Key
FORBIDDEN403User lacks required permission
RATE_LIMITED429Exceeded 10 req/min
INTERNAL_ERROR500Unexpected server error