Read the audit trail of a node
const url = 'https://work.optidata.cloud/api/drives/1/nodes/300754/audit?filter%5B%5D=share_permission_create';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}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.
Authorizations
Section titled “Authorizations”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters”Numeric id of the drive. Read it from GET /drives/config.json.
Numeric id of the node (file or folder).
Query Parameters
Section titled “Query Parameters”Restrict to these audit actions. Unknown action names fail validation.
Example
[ "share_permission_create"]Number of items per page.
Responses
Section titled “ Responses ”A page of audit entries, grouped by day.
object
Audit entries keyed by day label.
object
One recorded action against a node.
object
What was done.
Compact representation of a user, embedded in other payloads.
object
Tenant-wide identifier of the user. Use this, not id, on account endpoints.
Present where the payload includes it (for example audit entries).
Details of an anonymous share-link visitor, when there was one.
Whether the action was performed by the platform itself.
Friendly device name derived from the raw user agent.
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
Present on sharing actions: the resolved target of the grant and whether it was a group.
object
object
object
null on the last page.
Examples
{ "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.
Authentication failures use an error key rather than message.
object
Examples
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.
Generic error envelope used by policy, binding and framework failures.
object
Human-readable description of the failure.
Examples
{ "message": "No query results for model [App\\Models\\Node] 99999999"}The request body or query string failed validation.
object
The first validation message.
Validation messages keyed by field name.
object
Examples
{ "message": "The name field is required.", "errors": { "name": [ "The name field is required." ] }}Rate limit exceeded. Retry after the window resets.
Generic error envelope used by policy, binding and framework failures.
object
Human-readable description of the failure.
Examples
{ "message": "Too Many Attempts."}