---
title: Audit logs
description: Read the history of changes to a group's members.
url: https://hexelstudio.com/docs/identity/audit-logs
---

Hexel Studio keeps a history of membership changes for each group in your organization. Use it to see who was added to or removed from a group, and when.

<Note>
An organization-wide audit log is not available through the API yet. The `GET /v1/organizations/{organization_id}/audit-logs` and `GET /v1/audit/logs` endpoints exist, but Hexel Studio does not currently write new events to them, so they return an empty list or only older entries. Don't rely on them for compliance or investigations.
</Note>

## Read a group's history

```bash
curl https://api.hexelstudio.com/v1/groups/<group-id>/audit-logs \
  -H "Authorization: Bearer $ACCESS_TOKEN"
```

The caller needs an access token for the organization the group belongs to. A group of another organization answers `404`, like one that doesn't exist.

The response is an array of entries, newest first. There is no paging: the response holds the group's whole history.

```json
[
  {
    "id": "<entry-id>",
    "group_id": "<group-id>",
    "action": "MEMBER_REMOVED",
    "target_user_id": "<user-id>",
    "created_at": "2026-10-20T10:15:00Z"
  },
  {
    "id": "<entry-id>",
    "group_id": "<group-id>",
    "action": "MEMBER_ADDED",
    "actor_user_id": "<admin-user-id>",
    "target_user_id": "<user-id>",
    "created_at": "2026-10-18T08:02:00Z"
  }
]
```

<ResponseField name="id" type="string">
  The entry's ID.
</ResponseField>

<ResponseField name="group_id" type="string">
  The group the change was made to.
</ResponseField>

<ResponseField name="action" type="string">
  `MEMBER_ADDED` or `MEMBER_REMOVED`.
</ResponseField>

<ResponseField name="actor_user_id" type="string">
  Who added the member. Present on `MEMBER_ADDED` entries.
</ResponseField>

<ResponseField name="target_user_id" type="string">
  The user who was added or removed.
</ResponseField>

<ResponseField name="created_at" type="string">
  When the change was made (RFC 3339).
</ResponseField>

## What is recorded

| Change | Entry |
| --- | --- |
| A member is added to one of your groups with `POST /v1/groups/{group_id}/members` | `MEMBER_ADDED`, with the caller as `actor_user_id` |
| A member is removed with `DELETE /v1/groups/{group_id}/members/{user_id}` | `MEMBER_REMOVED` |
| Someone joins the organization by being added directly | `MEMBER_ADDED` on the organization's **Default Team** group |

Changes to member roles are not recorded here. Member roles are backed by groups that Hexel Studio manages, and those groups have no history entries. See [Members](https://hexelstudio.com/docs/identity/members#member-roles).

For managing groups and their members, see [Groups](https://hexelstudio.com/docs/identity/groups).
