← All documentationContents ↓

API Reference: Audit Log

Query the audit log of data changes by record, collection, user, action type, or date range.

Overview

The Audit Log records data changes in your Simply360 team — INSERT, UPDATE, and DELETE operations with user attribution, timestamp, and (on detail reads) before/after value snapshots. Use it for compliance reporting, debugging unexpected changes, and reconstructing deleted data.

Key Concepts

  • Change tracking — Each entry captures the operation type (INSERT / UPDATE / DELETE), the affected table and record, and the changed columns.
  • Attribution — Each entry carries the acting user (or API principal) and an operationSource describing the producer path (dashboard, API, automation, wizard, sync, and so on).
  • Queryable — Filter by table, record, operation type, source, actor, and date range.
  • Immutable — Audit log entries cannot be modified or deleted via the API.

Endpoints

MethodPathPurpose
GET/v1/audit-logList audit log entries with filters.
GET/v1/audit-log/statsAggregate statistics (totals by operation type, recent activity).
GET/v1/audit-log/tables/summaryPer-table change summaries.
GET/v1/audit-log/records/{tableName}/{recordSimplyId}Full history for one record (with value snapshots).
GET/v1/audit-log/{auditLogEntryKey}One entry's details (with value snapshots).

List Audit Log Entries

Query by Record

Record filters take the table name plus the record's public simplyId (recordSimplyId requires tableName).

const history = await s360.auditLog.list({
  tableName: 'DataRecord',
  recordSimplyId: 'WXYZ-5678-IJKL',
  limit: 100,
});

for (const entry of history.data) {
  console.log(`${entry.operationAt}: ${entry.operationType} (${entry.operationSource})`);
}
curl -s "https://api.simply360.app/v1/audit-log?tableName=DataRecord&recordSimplyId=WXYZ-5678-IJKL&limit=100" \
  -H "Authorization: Bearer $S360_API_KEY"

Query by Operation Type and Date Range

const updates = await s360.auditLog.list({
  operationType: 'UPDATE',
  dateFrom: '2026-06-01T00:00:00Z',
  dateTo: '2026-07-01T00:00:00Z',
  limit: 100,
});
curl -s "https://api.simply360.app/v1/audit-log?operationType=UPDATE&dateFrom=2026-06-01T00:00:00Z&limit=100" \
  -H "Authorization: Bearer $S360_API_KEY"

Get a Specific Entry

Each list entry includes an opaque auditLogEntryKey. Pass it back to fetch the entry's details, including operationContext, previousValues, and newValues.

const entry = await s360.auditLog.get(entryKeyFromList);
console.log(entry.data.previousValues, entry.data.newValues);
curl -s "https://api.simply360.app/v1/audit-log/$AUDIT_LOG_ENTRY_KEY" \
  -H "Authorization: Bearer $S360_API_KEY"

Filter Parameters

ParameterTypeDescription
tableNamestringFilter by audited table (e.g. DataRecord).
recordSimplyIdstringFilter by one record's public simplyId. Requires tableName.
operationTypestringINSERT, UPDATE, or DELETE.
operationSourcestringProducer path filter (e.g. API, automation, wizard, sync).
operationByUserSimplyIdstringFilter by acting user.
operationByTeamUserLinkSimplyIdstringFilter by acting team-user link.
dateFrom / dateTostringISO 8601 bounds on operationAt.
searchstringFree-text match against table name and record key.
sortField / sortOrderstringoperationAt (default), tableName, operationType, operationSource, or recordKey; ASC or DESC (default).
limitintegerEntries per page (default 50, max 100).
offsetintegerSkip count for pagination.

Per-Record Audit Trail

For convenience, the Data Records SDK exposes a record-scoped helper that calls the audit-log records endpoint with the table name pre-filled:

const trail = await s360.dataRecords.getAuditLog('WXYZ-5678-IJKL', { limit: 50 });
curl -s "https://api.simply360.app/v1/audit-log/records/DataRecord/WXYZ-5678-IJKL?limit=50" \
  -H "Authorization: Bearer $S360_API_KEY"

Usage Notes

  • All audit-log endpoints require the DATA_RECORD_LOGS feature permission. Session tokens and OAuth tokens additionally need the records:read scope.
  • The single-entry and per-record endpoints return previousValues / newValues snapshots and therefore require full data access (403 DATA_PERMISSION_DENIED otherwise). Certain sensitive columns are always redacted from snapshots.
  • auditLogEntryKey is an opaque key returned by the list endpoint — treat it as a token, not a simplyId.
  • Batch operations generate individual audit entries for each affected record.
  • Each list entry includes changedColumns; use the detail endpoints when you need the retained before/after values.