SkillhabitDocs

Analytics

Query participation results and aggregate progress statistics.

POST
/analyse/results

Returns a paginated list of user participation results (content progress) for the customer. The request supports filtering by content name, content IDs, group IDs, user IDs, progress state, enrollment type, custom attribute filters, and date ranges (expiry, updated at). Use the options field to control pagination (skip, limit) and sorting (orderBy, order).

AuthorizationBearer <token>

A JSON Web Token

In: header

Request Body

application/json

Optional filters and pagination options; all fields are optional.

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

curl -X POST "https://example.com/analyse/results" \  -H "Content-Type: application/json" \  -d '{    "groupIds": [      "4f5203c8-eff8-4168-9b6e-ec694da5878a"    ],    "userIds": [      "5df9aa85-d5fb-43f1-add5-b4f5f315ad3b"    ],    "contentIds": [      "d69c7cd1-9943-4f7f-b95f-0572b3458e9c"    ],    "progress": [      "APPROVED",      "IN_PROGRESS",      "NOT_STARTED",      "EXPIRED",      "FAILED"    ],    "enrollment": [      "MANDATORY",      "OPTIONAL",      "NOT_ENROLLED"    ],    "attributes": [      {        "customFieldId": "22576317-111e-4373-9d27-b04469f360d3",        "choices": [          "8a9064d1-2226-41e1-b203-33a42063c251"        ]      },      {        "customFieldId": "b4abfb3d-2e42-46d4-bae8-7dd67e0e6d5e",        "choices": [          "39d70428-287e-40ec-b232-9405ab633f57",          "a92b386e-fe6f-460e-80cd-7cd478444a31"        ]      }    ],    "expiryDateRange": {      "start": "2026-03-02T22:00:00.000Z",      "end": "2026-03-28T21:59:59.999Z"    },    "updatedAtDateRange": {      "start": "2026-02-03T22:00:00.000Z",      "end": "2026-03-03T21:59:59.999Z"    },    "options": {      "limit": 25,      "skip": 0,      "orderBy": "updatedAt",      "order": "DESC"    }  }'
{  "list": [    {      "contentId": "string",      "contentType": "string",      "contentName": "string",      "userId": "string",      "userName": "string",      "userDisplayName": "string",      "userAvatarUrl": "string",      "userEmail": "string",      "state": "string",      "occuredAt": 0,      "enrolledAt": 0,      "certificateExpiresAt": 0,      "certificateIssuedAt": 0,      "contentRevision": 0,      "percentageProgress": 0,      "mandatory": true    }  ]}
POST
/analyse/statistics

Returns an overview of participation statistics (counts by state: not started, in progress, approved, failed, expired) for the customer. The request supports the same filters as the results endpoint (content, groups, users, progress, enrollment, attributes, date ranges) but does not include pagination options.

AuthorizationBearer <token>

A JSON Web Token

In: header

Request Body

application/json

Optional filters; all fields are optional.

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

curl -X POST "https://example.com/analyse/statistics" \  -H "Content-Type: application/json" \  -d '{    "groupIds": [      "4f5203c8-eff8-4168-9b6e-ec694da5878a"    ],    "userIds": [      "5df9aa85-d5fb-43f1-add5-b4f5f315ad3b"    ],    "contentIds": [      "d69c7cd1-9943-4f7f-b95f-0572b3458e9c"    ],    "progress": [      "APPROVED",      "IN_PROGRESS",      "NOT_STARTED",      "EXPIRED",      "FAILED"    ],    "enrollment": [      "MANDATORY",      "OPTIONAL",      "NOT_ENROLLED"    ],    "attributes": [      {        "customFieldId": "22576317-111e-4373-9d27-b04469f360d3",        "choices": [          "8a9064d1-2226-41e1-b203-33a42063c251"        ]      },      {        "customFieldId": "b4abfb3d-2e42-46d4-bae8-7dd67e0e6d5e",        "choices": [          "39d70428-287e-40ec-b232-9405ab633f57",          "a92b386e-fe6f-460e-80cd-7cd478444a31"        ]      }    ],    "expiryDateRange": {      "start": "2026-03-02T22:00:00.000Z",      "end": "2026-03-28T21:59:59.999Z"    },    "updatedAtDateRange": {      "start": "2026-02-03T22:00:00.000Z",      "end": "2026-03-03T21:59:59.999Z"    }  }'
{  "statistics": {    "notStartedCount": 0,    "inProgressCount": 0,    "approvedCount": 0,    "failedCount": 0,    "expiredCount": 0  }}
GET
/analyse/event-logs/content/{contentId}/user/{userId}

Returns the progress history (event log) for a specific user and content. Entries are ordered by timestamp descending so the most recent event appears first. Each entry includes the event id, status, timestamp, participation id, and related fields.

AuthorizationBearer <token>

A JSON Web Token

In: header

Path Parameters

contentId*string

Content id whose progress history should be returned.

userId*string

User id whose progress history should be returned.

Response Body

application/json

curl -X GET "https://example.com/analyse/event-logs/content/d69c7cd1-9943-4f7f-b95f-0572b3458e9c/user/5df9aa85-d5fb-43f1-add5-b4f5f315ad3b"
[  {    "id": "507f1f77bcf86cd799439011",    "contentId": "d69c7cd1-9943-4f7f-b95f-0572b3458e9c",    "userId": "5df9aa85-d5fb-43f1-add5-b4f5f315ad3b",    "participationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",    "status": "APPROVED",    "revisionNumber": 1,    "timestamp": "2024-02-01T12:00:00Z",    "mandatory": true,    "manually": true  }]