Skip to content

Read the audit trail of a node

GET
/drives/{drive}/nodes/{node}/audit
curl --request GET \
--url 'https://work.optidata.cloud/api/drives/1/nodes/300754/audit?filter%5B%5D=share_permission_create' \
--header 'Authorization: Bearer <token>'

Who did what to the node and when, newest first, grouped by day: the result object is keyed by a human date label, each holding that day’s entries.

Entries carry the acting user (or the guest data of an anonymous share-link visitor), the originating IP, a friendly device name, and a context object whose contents depend on the action — a sharing action resolves the user or group it targeted, a content change embeds the matching history entry, and a move resolves the human-readable paths it went from and to.

drive
required
integer format: int64

Numeric id of the drive. Read it from GET /drives/config.json.

node
required
integer format: int64

Numeric id of the node (file or folder).

filter[]
Array<string>

Restrict to these audit actions. Unknown action names fail validation.

Example
[
"share_permission_create"
]
pageSize
integer
>= 1

Number of items per page.

A page of audit entries, grouped by day.

Media typeapplication/json
object
result
required

Audit entries keyed by day label.

object
key
additional properties
Array<object>

One recorded action against a node.

object
action

What was done.

string
user
One of:

Compact representation of a user, embedded in other payloads.

object
id
integer format: int64
uuid

Tenant-wide identifier of the user. Use this, not id, on account endpoints.

string format: uuid
name
string
email
string format: email
status

Present where the payload includes it (for example audit entries).

string
Allowed values: active inactive blocked
deleted_at
string | null format: date-time
avatar_url
string | null format: uri
full_name
string
created_at
string format: date-time
guest_data

Details of an anonymous share-link visitor, when there was one.

object | null
is_guest
boolean
is_system

Whether the action was performed by the platform itself.

boolean
is_mobile
boolean
ip
string | null
user_agent

Friendly device name derived from the raw user agent.

string | null
context

Action-specific details. Sharing actions carry the share and grant ids, content changes embed the matching history entry, and moves resolve the paths involved.

object
key
additional properties
any
share

Present on sharing actions: the resolved target of the grant and whether it was a group.

object
action
string
isGroup
boolean
target
object
key
additional properties
any
pagination
required
object
nextPage

null on the last page.

integer | null
size
integer
filter
Array<string>
Examples
Exampleaudit
{
"result": {
"06/12/2026": [
{
"action": "share_permission_create",
"user": {
"uuid": "9c1f0e2a-4d31-4d8a-8c1a-1f0b6b1f9a10",
"name": "Jane Doe",
"email": "jane.doe@acme.example",
"status": "active"
},
"created_at": "2026-06-12T19:31:36.000000Z",
"guest_data": null,
"is_guest": false,
"is_system": false,
"is_mobile": false,
"ip": "203.0.113.24",
"user_agent": "Chrome on Windows 10",
"context": {
"share_id": 773,
"share_permission_id": 4616,
"actions": "manage"
}
}
]
},
"pagination": {
"nextPage": 2,
"size": 30,
"filter": []
}
}

Missing, malformed or expired authentication key.

Media typeapplication/json

Authentication failures use an error key rather than message.

object
error
required
string
Examples
Examplemissing

No bearer token sent

{
"error": "JWT passport exception: Missing bearer token in request"
}

The resource does not exist, or does not belong to the given drive.

Media typeapplication/json

Generic error envelope used by policy, binding and framework failures.

object
message
required

Human-readable description of the failure.

string
Examples
Examplemissing
{
"message": "No query results for model [App\\Models\\Node] 99999999"
}

The request body or query string failed validation.

Media typeapplication/json
object
message
required

The first validation message.

string
errors
required

Validation messages keyed by field name.

object
key
additional properties
Array<string>
Examples
Exampleinvalid
{
"message": "The name field is required.",
"errors": {
"name": [
"The name field is required."
]
}
}

Rate limit exceeded. Retry after the window resets.

Media typeapplication/json

Generic error envelope used by policy, binding and framework failures.

object
message
required

Human-readable description of the failure.

string
Examples
Examplethrottled
{
"message": "Too Many Attempts."
}