Activity feed
Use this endpoint to read the activity feed of a project. For example, to export an audit trail of changes, or to react to changes made by others.
| Method | Path | Description |
|---|---|---|
GET | /api/collaboration/activity-feed | List the activity of a project, newest first. |
The request requires the X-Project-Id header and the Project viewer role or higher. Only events of that project are returned.
Query parameters
| Parameter | Description |
|---|---|
page | The page number, starting at 0. Default: 0. |
size | The page size, from 1 to 100. Default: 100. |
sort | The sort order. See Sorting. Default: occurredAt,desc. |
artifactTypes | Only return these artifact types. Repeat the parameter for several values: ATTRIBUTE, ATTRIBUTE_CONNECTOR, POLICY, CACHE_PROFILE, PROJECT, TEMPLATE, REPORT, or DOMAIN. |
operations | Only return these operations. Repeat the parameter for several values: CREATE, UPDATE, DELETE, or LEAVE_PROJECT. |
actorIds | Only return changes made by these users or clients. Repeat the parameter for several IDs. |
artifactFqn | Only return changes to artifacts whose name contains this text, ignoring case. |
fromOccurredAt, toOccurredAt | Only return events in this period, inclusive, as ISO-8601 date and times, such as 2026-10-01T00:00:00Z. |
All filters are combined, with one exception: when you use both actorIds and artifactFqn, an event is returned if it matches either of them.
Sorting
Sort by occurredAt, actorId, artifactType, or operation. Add asc or desc after the field names. Fields without a direction are sorted in ascending order. You can repeat the parameter for several sort criteria.
sort=occurredAt,desc
sort=actorId,operation,asc&sort=occurredAt,desc
Any other field is rejected with 400 and the INVALID_SORT_FIELD error code.
Example
curl -G "https://<authorization-hub-url>/api/collaboration/activity-feed" \
-H "Authorization: Bearer <access_token>" \
-H "X-Project-Id: <project-id>" \
--data-urlencode "artifactTypes=ATTRIBUTE" \
--data-urlencode "operations=CREATE" \
--data-urlencode "fromOccurredAt=2026-10-01T00:00:00Z" \
--data-urlencode "size=20"
Response
{
"pageMetadata": {
"requestedPageSize": 20,
"requestedPageNumber": 0,
"totalElements": 1,
"totalPages": 1,
"currentPageNumberOfElements": 1,
"currentPageNumber": 0,
"hasNextPage": false,
"hasPrevPage": false
},
"content": [
{
"id": "6f1c2d3e-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"projectId": "e00f12c8-8f3a-40ac-81a7-5a762abc7288",
"occurredAt": "2026-10-13T09:15:30Z",
"actorId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
"artifactType": "ATTRIBUTE",
"artifactFqn": "resource.department",
"versionId": "0f7b5bd2-9d5f-45f0-a9b9-8c8d0f4a6a11",
"operation": "CREATE",
"fieldChanges": []
}
]
}
| Field | Description |
|---|---|
occurredAt | When the change was applied. |
actorId | The ID of the user or M2M client that made the change. For changes saved from My workspace, it is whoever staged the change. |
artifactType, artifactFqn | What changed. A policy is named <package>/<file>, a project by its name, and a domain by its name. |
versionId, previousVersionId | The versions the change created and replaced. |
operation | CREATE, UPDATE, DELETE, or LEAVE_PROJECT. |
fieldChanges | The fields that changed, each with a field, an oldValue, and a newValue. Adding or removing a project member is recorded under the field member: the newValue is the user ID when a member is added, and the oldValue is the user ID when a member is removed or leaves, with the other value empty. Member role changes use the field memberRole, with values in the format <userId>:<ROLE>. |
What is recorded
The feed records the creation, update, and deletion of:
- attributes
- attribute connectors
- cache profiles
- policies
- policy insights templates and reports
- projects, including changes to their members
Composing a domain is recorded as a creation, and rolling one back as an update. Changes made through the API are recorded in the same way as changes made in the interface.