Users API
Returns one row per learner who has at least one training assignment in the organization or group associated with the API client.
List users
GET /api/v1/users
Required scope: training.read. See Authentication for obtaining and using an access token.
curl --request GET \
--url "https://courses.e-learningcourses.com/api/v1/users?page=1&pageSize=1000&includeArchived=false" \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header "Accept: application/json"
Query parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
page | integer | 1 | Page number. Must be at least 1. |
pageSize | integer | 1000 | Users per page. Must be from 1 through 5000. |
includeArchived | boolean | false | Set to true to include archived assignments when determining which learners are returned. |
Response
{
"data": [
{
"firstName": "Alex",
"lastName": "Morgan",
"email": "alex.morgan@example.com",
"lastLoginUtc": "2026-09-18T13:24:10Z",
"registeredUtc": "2026-08-12T09:15:00Z",
"lastAssignedUtc": "2026-09-03T08:30:00Z"
}
],
"pagination": {
"page": 1,
"pageSize": 1000,
"totalRecords": 1,
"totalPages": 1
}
}
User fields
| Field | Type | Description |
|---|---|---|
firstName | string or null | Learner's first name. |
lastName | string or null | Learner's last name. |
email | string or null | Learner's email address. When present, it matches the email field in the Training Records API. |
lastLoginUtc | date-time or null | Most recent login, in UTC. Null when the learner has not logged in. |
registeredUtc | date-time or null | Registration date and time, in UTC. |
lastAssignedUtc | date-time or null | Most recent matching training assignment, in UTC. Archived assignments are considered only when includeArchived=true. |
Pagination
Users are returned in a stable order by email. Continue requesting pages until page reaches totalPages. A response with no matching users has an empty data array and totalPages equal to 0.
Errors
| HTTP status | Meaning |
|---|---|
400 Bad Request | A paging parameter is invalid. |
401 Unauthorized | The bearer token is missing, invalid, or expired. |
403 Forbidden | The token lacks training.read, or the API client is no longer authorized for its scope. |
429 Too Many Requests | The shared API rate limit was exceeded. |
500 Internal Server Error | An unexpected server error occurred. |
See Authentication rate limits for the shared limit.
OpenAPI
https://courses.e-learningcourses.com/api/v1/openapi.json