SLA Multi-level Report
Were finished tasks resolved within the target time? Counts of in-SLA and out-of-SLA tasks per group, measured against a configurable threshold.
/apidev/v1/reports/gt/sla-multilevelOverview
For finished tasks, this report compares each task's total resolution time against a service-level target and classifies it as in-SLA (resolution time at or below the threshold) or out-of-SLA (above it). Results are aggregated per group — by provider, device, driver, service type, cause, geography, date, and more — and include the average resolution time, the average deviation from the threshold, and a compliance percentage.
The target time is supplied per request via sla_threshold_minutes (default 60). This lets you evaluate the same data against different SLA targets — for example 30 minutes for premium service or 120 minutes for standard service — without changing any company configuration. Choose how rows are grouped with group_by (defaults to provider).
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 (e.g. 2026-03-01T00:00:00). |
enddate | string | Yes | — | ISO 8601 end date-time. Max range 92 days from startdate. |
sla_threshold_minutes | integer | No | 60 | SLA target in minutes. Tasks resolved within this time count as in-SLA; tasks above it count as out-of-SLA. Range 1–100000. |
group_by | string | No | provider | How rows are grouped. One of: provider, device, driver, cause, subcause, service_type, product, origin, shift, end_code, comm_media, route, country, department, city, zone, client, telephonist, operator, resource_type, date, month, weekday, hour. |
devices | string | No | — | Comma-separated device IDs. Max 500. |
drivers | string | No | — | Comma-separated driver IDs. Max 500. |
providers | string | No | — | Comma-separated provider IDs. Max 100. |
service_types | string | No | — | Comma-separated service type IDs. Max 100. |
causes | string | No | — | Comma-separated cause IDs. Max 100. |
subcauses | string | No | — | Comma-separated subcause IDs. Max 100. |
statuses | string | No | — | Comma-separated task 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 | — | Comma-separated origin IDs. Max 100. |
route_ids | string | No | — | Comma-separated route IDs. Max 100. |
operators | string | No | — | Comma-separated operator IDs. Max 100. |
client_id | string | No | — | Single client ID. |
account_id | string | No | — | Single account ID. |
shift_id | string | No | — | Single shift ID. |
limit | integer | No | 25 | Number of records per page (1–100). |
offset | integer | No | 0 | Number of records to skip for pagination. |
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.
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/sla-multilevel?startdate=2026-03-01T00:00:00&enddate=2026-03-15T23:59:59&sla_threshold_minutes=45&group_by=driver&limit=25"
const res = await fetch(
`https://${TENANT}/apidev/v1/reports/gt/sla-multilevel?startdate=2026-03-01T00:00:00&enddate=2026-03-15T23:59:59&sla_threshold_minutes=45&group_by=driver&limit=25`,
{
headers: {
'Authorization': `Bearer ${TOKEN}`,
'X-API-Key': APIKEY,
'tenant': TENANT,
},
}
);
const data = await res.json();
import requests
response = requests.get(
f"https://{TENANT}/apidev/v1/reports/gt/sla-multilevel",
headers={"Authorization": f"Bearer {TOKEN}", "X-API-Key": APIKEY, "tenant": TENANT},
params={
"startdate": "2026-03-01T00:00:00",
"enddate": "2026-03-15T23:59:59",
"sla_threshold_minutes": 45,
"group_by": "driver",
"limit": 25,
},
)
data = response.json()
Response
Response Fields
| Field | Type | Description |
|---|---|---|
group_label | string | Display name of the group (e.g. driver, device, provider). |
group_id | string | null | Internal ID of the group, or null when not resolvable. |
total | number | Total finished tasks in the group. |
dentro | number | Tasks resolved within the SLA threshold (in-SLA). |
fuera | number | Tasks resolved above the SLA threshold (out-of-SLA). |
tiempo_promedio_min | number | Average total resolution time, in minutes. |
desviacion_promedio_min | number | Average deviation from the threshold, in minutes (positive means over target). |
cumplimiento_pct | number | SLA compliance percentage (dentro / total * 100). |
Example Response
{
"success": true,
"data": [
{
"group_label": "Carlos Martinez",
"group_id": "10293",
"total": 120,
"dentro": 98,
"fuera": 22,
"tiempo_promedio_min": 41.6,
"desviacion_promedio_min": -3.4,
"cumplimiento_pct": 81.67
}
],
"meta": {
"total": 1,
"limit": 25,
"offset": 0
}
}
Errors
| Code | HTTP | Description |
|---|---|---|
VALIDATION_ERROR | 400 | Invalid params: missing dates, range > 92 days, invalid enum values, sla_threshold_minutes out of range. |
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. |