New: the AI firewall watches every module and explains each incident in plain words. See how it works

Audit log

See who did what in your organisation – the columns, filters, CSV export, the hash chain check, retention, anonymisation and who may do what.

The audit log records sensitive actions in your organisation: sign-ins and failures, member and role changes, credential and key changes, high-impact commands, firmware actions, deletions, setting changes and more. Rows are never edited by the application. Use the log to answer “who changed this, and when?”, to support an investigation, and as evidence for an audit. The list of recorded actions is in What is audited.

Open the log

Open Audit Logs at the address /admin/audit-logs of your organisation. It says “Tamper-evident record of actions taken in this organization”. You need the Admin role or higher.

The newest events come first. Select a row to open Audit Log Detail.

What a row holds

Column or fieldMeaning
TimeWhen it happened.
ActorWho did it: a member, the system, an API key or a service. The detail adds Actor type and Actor ID.
On behalf ofWhen someone acted for someone else, the person acted for. The actor stays the true actor.
ActionWhat was done, for example iot_device.credential.rotated or auth.login_failed.
SeverityLow, Medium, High or Critical.
ResourceResource type and Resource ID of what was changed, for example iot_device and the device id.
MetadataExtra facts, such as the changed field names. Secrets, passwords, tokens and keys are never written.
IP and User agentWhere the request came from.
Integrity (hash chain)Prev hash and Row hash of the row (see below).

High and critical events also fire the audit.high_risk webhook, so you can forward them to your own security tools. See Webhooks.

Find events

Use the filters above the table:

FilterUse
ActorSearch by email…
ActionPart of the action name, for example auth.login or iot_rpc
SeverityOne severity
Date rangeFrom and To

Clear filters resets them. Over the API you can also filter by resource type and resource id:

GET /tenant/{tenantId}/api/audit-logs?resourceType=iot_device&resourceId=<deviceId>&fromDate=2026-11-01&toDate=2026-11-08&page=1&pageSize=100

pageSize is at most 100 by default; Max Page Size in the audit log settings can raise it up to 500.

Export

Export CSV downloads the log for the date range of the filter. Over the API you can choose CSV or NDJSON and limit the export to one actor, for example to answer a person’s request to see their data:

GET /tenant/{tenantId}/api/audit-logs/export?format=ndjson&actorId=<userId>&fromDate=2026-01-01&toDate=2026-11-08

Tamper evidence

Each row is linked to the previous row of your organisation by a hash chain: a row’s hash covers its content and the hash of the row before it. Any change or deletion of a kept row breaks the chain. To check the chain, call:

GET /tenant/{tenantId}/api/audit-logs/verify

The answer is { "ok": true, "checked": <rows> } for an intact chain, or "ok": false with brokenAt naming the first row that does not fit. After old rows were removed by retention, the first kept row refers to a row that is gone; the check accepts that start point.

Retention

Open Audit Logs > settings (Audit Log Settings):

SettingDefaultMeaning
Retention Period (days)0How long rows are kept before the nightly purge deletes them. 0 keeps them forever. Set it per your compliance needs, for example 2,555 days for a seven-year hold.
Max Page Size100The largest page an API caller may ask for, at most 500.

The audit log is recorded on every plan. If a plan does not include reading the log, the list and the export are refused until the plan includes it again; nothing is lost in between.

Privacy

An owner can anonymise a person in the log: the link between the rows and the person is withdrawn, while the actions themselves stay and the chain still verifies. This is part of answering an erasure request; see Privacy and data erasure.

POST /tenant/{tenantId}/api/audit-logs/anonymize
Content-Type: application/json

{ "actorId": "<userId>" }

Permissions

ActionDefault role
Read the logAdmin
ExportAdmin
Verify the chainAdmin
Anonymise a personOwner
Purge expired rows nowOwner

A member’s own events also appear on their member page, on the Activity tab. See Users and roles.