Workflow User Productivity Report
Per-user workflow workload — completed, pending, and overdue tasks, average completion time, SLA compliance, and reassignments.
/apidev/v1/reports/workflow/user-productivityOverview
Aggregates workflow task activity per assigned user over the date range. Each row reports the user, their completed, pending, and overdue task counts, the average completion time, the SLA compliance percentage, and how many tasks were reassigned. Overdue is computed against the company's current time. Results are paginated and ordered server-side. Use the optional filters to narrow by workflow definition or a single assignee.
slaCompliancePercent is meaningful only when SLA tracking is configured for the company. When SLA is not configured, no tasks carry an SLA outcome and the value defaults to 100.
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). Filters by task creation date. |
enddate | string | Yes | — | ISO 8601 end date-time. Max range 92 days from startdate. |
definition_ids | string | No | — | Comma-separated workflow definition IDs to include. Max 100. |
assignee_id | string | No | — | Filter to a single assigned user ID. |
sort_by | string | No | completedTasks | Column to sort by. One of: completedTasks, pendingTasks, overdueTasks, avgCompletionSeconds, reassignments, userName, slaMet, slaTotal. |
sort_dir | string | No | desc | Sort direction: asc or desc. |
limit | integer | No | 25 | Number of records per page (1–100). |
offset | integer | No | 0 | Number of records to skip for pagination. |
sort_by is validated per reportThis report accepts exactly these values:
completedTasks · pendingTasks · overdueTasks · avgCompletionSeconds · reassignments · userName · slaMet · slaTotal
Anything else returns 400 VALIDATION_ERROR, and the message names the accepted values. Until 2026-08-16 an unrecognised sort_by was silently ignored and the report came back in its default order, so a mis-typed column looked like it had worked.
Code Examples
- cURL
- JavaScript
- Python
curl -s -H "Authorization: Bearer $TOKEN" \
-H "X-API-Key: $APIKEY" \
-H "tenant: $TENANT" \
"https://$TENANT/apidev/v1/reports/workflow/user-productivity?startdate=2026-03-01T00:00:00&enddate=2026-03-31T23:59:59&limit=25"
const res = await fetch(
`https://${TENANT}/apidev/v1/reports/workflow/user-productivity?startdate=2026-03-01T00:00:00&enddate=2026-03-31T23:59:59&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/workflow/user-productivity",
headers={"Authorization": f"Bearer {TOKEN}", "X-API-Key": APIKEY, "tenant": TENANT},
params={"startdate": "2026-03-01T00:00:00", "enddate": "2026-03-31T23:59:59", "limit": 25},
)
data = response.json()
Response
Response Fields
| Field | Type | Description |
|---|---|---|
usuid | string | User ID. |
userName | string | User name. |
completedTasks | number | Tasks completed in the period. |
pendingTasks | number | Tasks pending or in progress. |
overdueTasks | number | Pending tasks past their due date (vs company current time). |
slaCompliancePercent | number | SLA compliance rate for the user's tasks. Defaults to 100 when SLA is not configured. |
avgCompletionSeconds | number | Average completion time in seconds. |
reassignments | number | Number of tasks reassigned. |
Example Response
{
"success": true,
"data": [
{
"usuid": "552398174620055",
"userName": "Carlos Martinez",
"completedTasks": 37,
"pendingTasks": 6,
"overdueTasks": 2,
"slaCompliancePercent": 91.89,
"avgCompletionSeconds": 7420.5,
"reassignments": 3
}
],
"meta": {
"total": 1,
"limit": 25,
"offset": 0
}
}
Errors
| Code | HTTP | Description |
|---|---|---|
VALIDATION_ERROR | 400 | Invalid params: missing dates, range > 92 days, invalid enum values. |
INVALID_DATE_RANGE | 400 | Date range invalid or greater than 92 days. |
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. |