Skip to main content

Activity Summary Report

Monthly per-person activity calendar: one row per person, one cell per day, with shift, rest, and absence status.

GET/apidev/v1/reports/cpm/activity-summary
PermissionAPICLI_RPTCPM_RESUMENACTIVIDAD
Rate Limit10 req/min
Cache300s
Max Range1 month

Overview​

Returns a calendar-style summary for the selected month. Each person appears once, with a list of daily activity entries that show the worked shift, rest periods, hours worked and rested, kilometers driven, and the day-level status (worked, rest day, or absence). Use it to review attendance and workload across an entire month at a glance.

  • Month view — the period is a single calendar month; days up to the current company date are evaluated, future days are left empty
  • Day status — each day carries a status so you can spot absences, rest days, and breaches without parsing raw timestamps
  • Scope filters — narrow results by person, device, device type, or shift category

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
monthstringYes—Target month in ISO 8601 (e.g. 2026-03 or 2026-03-01). Covers the full calendar month.
driversstringNoAll visibleComma-separated person IDs. Max 500.
devicesstringNoAll visibleComma-separated device IDs. Max 500.
device_typesstringNo—Comma-separated device type IDs. Max 100.
shift_categoriesstringNo—Comma-separated shift category IDs. Max 50.
limitintegerNo25Number of people per page (1–100).
offsetintegerNo0Number of people to skip for pagination.

Code Examples​

curl -s -H "Authorization: Bearer $TOKEN" \
-H "X-API-Key: $APIKEY" \
-H "tenant: $TENANT" \
"https://$TENANT/apidev/v1/reports/cpm/activity-summary?month=2026-03&limit=25"

Response​

Response Fields​

Each item in data is a person with an activities array of daily entries.

FieldTypeDescription
person_idstring | nullPerson identifier.
person_namestring | nullPerson name.
person_imagestring | nullPerson image URL.
total_worked_minutesnumberMinutes worked across the month (sum of activities[].worked_minutes).
total_discount_minutesnumberDeducted minutes across the month (late arrivals + early departures).
activitiesarrayOne entry per day of the month (see below).

Activity entry (activities[])

One entry per day of the month, including days with no shift (they carry day, date and status only) — the same cells the web matrix paints.

FieldTypeDescription
daynumber | nullDay of the month (1–31).
datestring | nullDate of the entry (YYYY-MM-DD).
shift_idstring | nullWork-shift identifier.
shift_linenumber | nullRest line number inside the shift.
shift_namestring | nullShift/schedule name.
device_namestring | nullDevice (vehicle) name.
shift_startstring | nullShift start timestamp.
shift_endstring | nullShift end timestamp.
rest_startstring | nullRest start timestamp.
rest_endstring | nullRest end timestamp.
qra_timestring | nullEffective shift-start mark (QRA).
qtp_timestring | nullEffective shift-end mark (QTP).
start_addressstring | nullAddress where the shift started.
end_addressstring | nullAddress where the shift ended.
worked_minutesnumber | nullMinutes worked that day (shift span minus rest).
discount_minutesnumber | nullDeducted minutes that day (late arrival + early departure).
statusstring | nullDay status: OK (complied), WARN (needs review), ERROR (breach). null = no shift that day.
status_reasonstring | nullReason code behind the status (e.g. absent). null when there is none.
editedbooleantrue when a supervisor corrected one of the day's marks.
edited_bystring | nullWho corrected the mark.
shifts_countnumberShifts of that day (> 1 = several shifts in one day). 0 = no shift.
Not available

Kilometers (kms_shift / kms_rest) and rested hours are not returned by this report: the monthly matrix engine does not compute them. Earlier drafts of this page listed worked_hours, rested_hours, kms_shift and kms_rest — only the worked time exists, and it is published as worked_minutes. Per-shift kilometers are available in Activity Detail.

Example Response​

{
"success": true,
"data": [
{
"person_id": "982710394857201700",
"person_name": "Carlos Martinez",
"person_image": "https://cdn.example.com/people/982710394857201700.jpg",
"total_worked_minutes": 9450,
"total_discount_minutes": 65,
"activities": [
{
"day": 5,
"date": "2026-03-05",
"shift_id": "982710394857201664",
"shift_line": 1,
"shift_name": "Morning Shift",
"device_name": "Unit-105",
"shift_start": "2026-03-05T07:00:00",
"shift_end": "2026-03-05T15:00:00",
"rest_start": "2026-03-05T11:00:00",
"rest_end": "2026-03-05T11:30:00",
"qra_time": "2026-03-05T07:02:00",
"qtp_time": "2026-03-05T15:04:00",
"start_address": "Av. Reforma 1234, Col. Centro",
"end_address": "Calle Madero 456, Col. Centro",
"worked_minutes": 450,
"discount_minutes": 0,
"status": "OK",
"status_reason": null,
"edited": false,
"edited_by": null,
"shifts_count": 1
},
{
"day": 6,
"date": "2026-03-06",
"shift_id": null,
"shift_line": null,
"shift_name": null,
"device_name": null,
"shift_start": null,
"shift_end": null,
"rest_start": null,
"rest_end": null,
"qra_time": null,
"qtp_time": null,
"start_address": null,
"end_address": null,
"worked_minutes": null,
"discount_minutes": null,
"status": "ERROR",
"status_reason": "absent",
"edited": false,
"edited_by": null,
"shifts_count": 0
}
]
},
{
"person_id": "982710394857201701",
"person_name": "Laura Hernandez",
"person_image": null,
"total_worked_minutes": 7680,
"total_discount_minutes": 0,
"activities": [
{
"day": 5,
"date": "2026-03-05",
"shift_id": "982710394857201999",
"shift_line": null,
"shift_name": "Night Shift",
"device_name": "Unit-203",
"shift_start": "2026-03-05T22:00:00",
"shift_end": "2026-03-06T06:00:00",
"rest_start": null,
"rest_end": null,
"qra_time": "2026-03-05T22:00:00",
"qtp_time": "2026-03-06T06:00:00",
"start_address": "Ruta 8 Km 24",
"end_address": "Ruta 8 Km 24",
"worked_minutes": 480,
"discount_minutes": 0,
"status": "OK",
"status_reason": null,
"edited": true,
"edited_by": "supervisor.mendez",
"shifts_count": 1
}
]
}
],
"meta": {
"total": 2,
"limit": 25,
"offset": 0
}
}

Errors​

CodeHTTPDescription
VALIDATION_ERROR400Invalid parameters (e.g. malformed month).
UNAUTHORIZED401Missing, invalid, or expired tenant / Authorization / X-API-Key
FORBIDDEN403User lacks required permission.
RATE_LIMITED429Exceeded 10 req/min.
INTERNAL_ERROR500Unexpected server error.