Audit API
The activity endpoints power the Platform Audit page in the UI. All of them require the Admin user role. The list and insights endpoints accept a shared set of filters so the activity log, summary cards, and chart can stay in sync. The changeset endpoint returns the property changes behind a single update record, and the verbs endpoint lists the action verbs available for filtering.
Tip
For complete API documentation, including request and response schemas, visit the API docs on your Qualytics deployment.
All endpoints are served from your Qualytics deployment (e.g., https://your-instance.qualytics.io). The paths below include the /api prefix.
List Activity
Return a paginated list of activity records, optionally filtered by user, action, date range, or timeframe window.
Endpoint: GET /api/activity
Permission: Admin user role
Query parameters
| Parameter | Type | Description |
|---|---|---|
users |
list[int] |
One or more user IDs. When set, only activity attributed to the listed users is returned. |
actions |
list[str] |
One or more action verbs (create, update, delete, and others). Filters to the listed verbs only. |
start_date |
date |
The earliest date to include. Use with end_date for an explicit range. |
end_date |
date |
The latest date to include. Use with start_date for an explicit range, or with timeframe as the anchor. |
timeframe |
string |
One of week, month, quarter, year. When set, derives start_date from end_date. |
offset |
int |
Timezone offset in minutes. Applied to the timeframe window boundaries so the date range honors the caller's local calendar. |
include_internal |
bool |
When true (the default), includes activity from internal users. Set to false to exclude them. |
page |
int |
Page number, starting at 1. |
size |
int |
Page size. |
Example request and response
Request:
curl -X GET "https://your-instance.qualytics.io/api/activity?timeframe=week&end_date=2026-06-10&include_internal=false&page=1&size=20" \
-H "Authorization: Bearer YOUR_TOKEN"
Response:
{
"items": [
{
"transaction": {
"id": 184221,
"issued_at": "2026-06-10T18:42:11Z",
"user": {
"id": 14,
"name": "Yannique Kameka",
"user_name": "yannique",
"email": "yannique@example.com"
}
},
"verb": "update",
"object_type": "QualityCheck",
"object_id": 9821
}
],
"total": 134,
"page": 1,
"size": 20,
"pages": 7
}
Response schema
| Field | Type | Description |
|---|---|---|
items |
list[object] |
The page of activity records. |
items[].transaction.id |
integer |
Unique transaction identifier. |
items[].transaction.issued_at |
string |
The action timestamp in UTC. |
items[].transaction.user |
object or null |
The actor (display name, username, email). null when the user account no longer exists. |
items[].verb |
string |
The action verb (create, update, delete, activate, archive, and so on). |
items[].object_type |
string |
The CamelCase entity type (QualityCheck, Anomaly, and others). Datastores record their specific type, such as JdbcDatastore or DfsDatastore. |
items[].object_id |
integer or null |
The ID of the affected entity, when applicable. |
total |
integer |
Total number of records matching the filters. |
page |
integer |
Current page number. |
size |
integer |
Page size. |
pages |
integer |
Total number of pages. |
Info
For the UI equivalent, see Filter Activity.
Activity Changeset
Return the property changes recorded for a single update activity. This is the endpoint that powers the Changes section of the activity side panel.
Endpoint: GET /api/activity/{transaction_id}/changeset
Permission: Admin user role
Path and query parameters
| Parameter | Type | Description |
|---|---|---|
transaction_id |
int |
Path parameter. The transaction identifier of the activity record (items[].transaction.id from List Activity). |
object_type |
string |
Required. The CamelCase entity type recorded by the activity (items[].object_type). |
object_id |
int |
Required. The ID of the affected entity (items[].object_id). |
Example request and response
Request:
curl -X GET "https://your-instance.qualytics.io/api/activity/184221/changeset?object_type=QualityCheck&object_id=9821" \
-H "Authorization: Bearer YOUR_TOKEN"
Response:
Response schema
The response is an object with one key per changed property. Each value is a two-element array holding the original value first and the updated value second. null in the first position means the property had no value before the update. Nested objects are returned whole (original and updated versions side by side), and the raw response can include system-managed values, such as update timestamps, that the UI's Changes section hides.
Sensitive values, such as integration credentials, are never exposed. The response shows ********** only on the side where a credential had a value.
Change details remain available after the entity is deleted. When no change record matches the given combination of transaction, entity type, and entity ID, the endpoint returns 404 Not Found.
Info
For the UI equivalent, see How It Works.
Activity Insights
Return aggregated activity statistics for the timeframe window. This is the endpoint that powers the summary cards and the activity chart.
Endpoint: GET /api/activity/insights
Permission: Admin user role
Query parameters
| Parameter | Type | Description |
|---|---|---|
report_date |
date |
The end of the timeframe window. Defaults to today when omitted. |
timeframe |
string |
One of week, month, quarter, year. Defaults to month. |
offset |
int |
Timezone offset in minutes. Applied before date extraction so daily bucketing in actions_per_day groups by the caller's local calendar date. |
include_internal |
bool |
When true (the default), includes internal users in total_actions, top_actor, top_entity_type, and actions_per_day. The unique_actors count always excludes internal users. |
users |
list[int] |
Limit the aggregation to one or more user IDs. |
actions |
list[str] |
Limit the aggregation to one or more action verbs (create, update, delete, and so on). |
Example request and response
Request:
curl -X GET "https://your-instance.qualytics.io/api/activity/insights?timeframe=week&report_date=2026-06-10&include_internal=true" \
-H "Authorization: Bearer YOUR_TOKEN"
Response:
{
"unique_actors": 7,
"total_actions": 134,
"top_actor": {
"id": 14,
"name": "Yannique Kameka",
"user_name": "yannique",
"email": "yannique@example.com",
"action_count": 48
},
"top_entity_type": {
"object_type": "Anomaly",
"count": 62
},
"actions_per_day": [
{ "date": "2026-06-04", "user_count": 18, "system_count": 4 },
{ "date": "2026-06-05", "user_count": 11, "system_count": 6 },
{ "date": "2026-06-06", "user_count": 0, "system_count": 0 },
{ "date": "2026-06-07", "user_count": 0, "system_count": 0 },
{ "date": "2026-06-08", "user_count": 22, "system_count": 7 },
{ "date": "2026-06-09", "user_count": 25, "system_count": 8 },
{ "date": "2026-06-10", "user_count": 28, "system_count": 5 }
]
}
Response schema
| Field | Type | Description |
|---|---|---|
unique_actors |
integer |
Number of distinct human users with at least one action in the window. Always excludes internal users. |
total_actions |
integer |
Total number of actions in the window. Respects include_internal. |
top_actor |
object or null |
The user with the highest action count in the window. Includes id, name, user_name, email, and action_count. |
top_entity_type |
object or null |
The entity type with the highest action count. Includes object_type (CamelCase) and count. |
actions_per_day |
list[object] |
One entry per day in the window, with date, user_count, and system_count. The page aggregates these into wider buckets (week, month, quarter) when needed. |
Info
For the UI equivalent, see Summary Section.
Activity Verbs
Return the distinct action verbs present in the activity log, sorted alphabetically. This is the endpoint that powers the Actions filter on the page, and it is the quickest way to discover the values you can pass to the actions parameter of List Activity and Activity Insights.
Endpoint: GET /api/activity/verbs
Permission: Admin user role
The endpoint takes no parameters.
Example request and response
Request:
curl -X GET "https://your-instance.qualytics.io/api/activity/verbs" \
-H "Authorization: Bearer YOUR_TOKEN"
Response:
Info
For the UI equivalent, see Filter Activity.
Error Responses
| Status Code | Description |
|---|---|
401 Unauthorized |
Missing or invalid API token. |
403 Forbidden |
User does not have the Admin role. |
404 Not Found |
Activity Changeset only: no change record matches the given transaction, entity type, and entity ID. |
422 Unprocessable Entity |
Invalid timeframe, offset, or date value. On the changeset endpoint, also a missing object_type or object_id, or a non-integer transaction_id or object_id. |
Error response examples
403 Forbidden:
422 Unprocessable Entity (invalid timeframe):
Permission Summary
| Operation | Minimum Permission |
|---|---|
| List activity | Admin user role |
| Get activity changeset | Admin user role |
| Get activity insights | Admin user role |
| List activity verbs | Admin user role |