You can retrieve event history information on all users in your organization using the AchieveIt REST API. The data is returned as a JSON object and includes all change events made to a user. You can retrieve this information for all user in the organization, or for specific set of users based on the ID.
Request Specification
Endpoint URL
Make an HTTP POST request to the following endpoint:
https://api.achieveit.com/exports/events/usersAuthorization Header
Include your API key as part of an authorization header. The API key must be associated with a user that has User Manager access for the organization.
Authorization: API-KEY <YOUR_API_KEY>Parameters
The API has a set of required parameters that must be provided in the post in order to retrieve the correct information. The maximum number of events that can be return per API request is 2000. Please review the "Paging and Fetching More Data" section to learn how to page through larger data sets.
Parameter Options
| Parameter | Type | Default | Description |
|---|---|---|---|
start | datetime | Min value datetime | The starting date and time you want to retrieve information from |
end | datetime | Current datetime | The ending date and time you want to retrieve information from |
sortDirection | string | desc | Either asc (ascending) or desc (descending). |
ids | string array | n/a | This parameter is optional and will default to all users the API User has access to. You can optionally provide one or more User IDs. |
Example Request
JSON object using cURL in Bash:
// Bash
curl -X POST "https://api.achieveit.com/events/users" \
-H "Authorization: API-KEY 12004478285f4f4eb21cd25e62ba5eb7" \
-H "Content-Type: application/json" \
-d '{
"start": "2026-06-30",
"end": "2026-06-30",
"sortDirection": "asc",
"ids": ["b93c6913-8ff8-4b77-3633-08de10d6989c"]
}'
JSON object using PowerShell in Bash:
// PowerShell
# Define JSON payload
$json = @'
{
"start": "2026-06-30",
"end": "2026-06-30",
"sortDirection": "asc",
"ids": ["b93c6913-8ff8-4b77-3633-08de10d6989c"]
}
'@
# Send POST request
Invoke-RestMethod `
-Uri "https://api.achieveit.com/events/users" `
-Method Post `
-Headers @{ "Authorization" = "API-KEY 12004478285f4f4eb21cd25e62ba5eb7" } `
-Body $json `
-ContentType "application/json"
Response
Response Codes
The API returns one of the following HTTP status codes
| Code | Notes |
|---|---|
200 OK | Exporting the records was successful, and the content of the response includes the requested event details for each user. |
403 Forbidden | The user associated with the specified API key does not have access to view user event history. |
Example Response
If successful, the response body will be a JSON object that has two major properties:
events: An array of user event history.nextPageKey: If more records exist for your request, this value will be populated. See the "Paging and Fetch More Data" section below for more details.
{
"events": [
{
"changeType": "Modified",
"changedAt": "2026-08-20T18:23:36.305403Z",
"user": { // user being updated
"id": "ec0e03c0-956b-41fa-32e3-08de0c110df2",
"name": "Tim Testing",
"email": "x@y.com"
},
"actor": { // user who made the update
"id": "9ee85a65-5f4a-4a1d-9194-da7503bec1af",
"name": "AchieveIt User",
"email": "achieveit@email.com"
},
"previousValue": {
"lastName": "Johnson",
"firstName": "Test"
},
"newValue": {
"lastName": "Testing",
"firstName": "Tim"
}
},
{
"changeType": "Modified",
"changedAt": "2026-08-17T15:44:27.852459Z",
"user": {
"id": "ce888a40-e0e2-4ffa-81e8-1dc24c87f44c",
"name": "James Hilliard",
"email": "jhilliard@achieveit.com"
},
"actor": {
"id": "ce888a40-e0e2-4ffa-81e8-1dc24c87f44c",
"name": "James Hilliard",
"email": "jhilliard@achieveit.com"
},
"previousValue": {
"dailyDigestEmailHour": 0
},
"newValue": {
"dailyDigestEmailHour": 2
}
}
],
"nextPageKey": "2026-06-30T00:00:00.0000000Z|c10f0ddd-8286-e118-fcc5-a5552741095a
}
Paging and Fetching More Data
Certain requests will return data sets that are larger than the 2000 item page size. In these instances, you will need to make multiple requests in order to get the full data set. You will know if your request contains more data if the response returns a value in the nextPageKey property. You can then use this value as a query parameter to fetch the next page of results.
Query Parameter
All parameter data should remain the same based on the initial request you made. The only difference is that you will need to include a query parameter passing the nextPageKey that you received from the previous request.
Query Parameter Options
| Parameter | Type | Default | Description |
|---|---|---|---|
nextPageKey | string | n/a | This value is used as a query parameter to fetch the next page of results. The response will only contain the nextPageKey if more than 2000 records existing for your query. |
Example Request
JSON object using cURL in Bash:
// Bash
curl -X POST "https://api.achieveit.com/events/users?nextPageKey=''" \
-H "Authorization: API-KEY 12004478285f4f4eb21cd25e62ba5eb7" \
-H "Content-Type: application/json" \
-d '{
"start": "2026-06-30",
"end": "2026-06-30",
"ids": ["b93c6913-8ff8-4b77-3633-08de10d6989c"]
}'
JSON object using PowerShell in Bash:
// PowerShell
# Define JSON payload
$json = @'
{
"start": "2026-06-30",
"end": "2026-06-30",
"ids": ["b93c6913-8ff8-4b77-3633-08de10d6989c"]
}
'@
# Send POST request
Invoke-RestMethod `
-Uri "https://api.achieveit.com/events/users?nextPageKey=''" `
-Method Post `
-Headers @{ "Authorization" = "API-KEY 12004478285f4f4eb21cd25e62ba5eb7" } `
-Body $json `
-ContentType "application/json"