Platform Reference

Audit Log Reference

Every platform action recorded in FlowOS — event types by module, field schema, query API, retention policy, and SIEM export.

The audit log is an immutable, append-only record of every significant action taken in your FlowOS workspace. Records are written synchronously within the same database transaction as the action they describe, so partial writes are impossible.

Audit records cannot be edited or deleted via the API. The only way records disappear is automated retention expiry. Workspace owners can configure retention in Settings → Workspace → Security.

Event Schema

Every audit event shares the same top-level schema regardless of type. Module-specific data lives in the before, after, changes, and metadata fields.

FieldTypeDescription
idvarchar(26)ULID primary key, prefixed aud_.
actionvarchar(100)Dotted action string, e.g. incident.resolved.
entity_typevarchar(100)Resource type: incident | change | user | workflow | ...
entity_idvarchar(26)ID of the affected record.
entity_numbervarchar(20)Human number (INC-1042) at event time.
entity_titletextTitle/name at event time.
actor_idvarchar(26)User, token, workflow, or system that triggered the action.
actor_typeenumuser | api_token | workflow | system
actor_nametextDisplay name of the actor.
actor_ipinetRequest IP. Null for system/workflow actors.
beforejsonbField snapshot before change (null on create).
afterjsonbField snapshot after change (null on delete).
changesjsonbArray of { field, from, to } diffs (updates only).
metadatajsonb{ requestId, userAgent, sessionId, ... }
workspace_idvarchar(26)Owning workspace.
environmentenumdevelopment | staging | production
created_attimestamptzEvent timestamp. Indexed for range queries.

Event Catalog

Complete list of action strings, grouped by module. The action field is always a lowercase dotted string.

ModuleActionDescription
ITSMincident.createdA new incident record was created.
ITSMincident.updatedOne or more incident fields changed.
ITSMincident.resolvedStatus transitioned to resolved.
ITSMincident.closedStatus transitioned to closed.
ITSMincident.reopenedA resolved/closed incident was reopened.
ITSMincident.assignedAssigned team or user changed.
ITSMincident.escalatedSeverity increased or on-call was paged.
ITSMincident.deletedIncident record permanently deleted.
ITSMchange.createdChange request created.
ITSMchange.submittedChange moved to review status.
ITSMchange.approvedA CAB reviewer approved.
ITSMchange.rejectedA CAB reviewer rejected.
ITSMchange.implementedChange marked as completed.
ITSMchange.rolled_backChange rolled back.
ITSMproblem.createdProblem record created.
ITSMproblem.known_errorProblem promoted to known error.
ITSMproblem.resolvedProblem resolved.
ITSMcatalog.item.createdNew service catalog item defined.
ITSMcatalog.item.publishedCatalog item made visible to users.
ITSMcatalog.request.submittedUser submitted a service request.
ITSMcatalog.request.approvedRequest approved.
ITSMcatalog.request.fulfilledRequest marked fulfilled.
ITSMkb.article.publishedKnowledge article published.
ITSMkb.article.archivedKnowledge article archived.
ITSMsla.breachAn SLA response or resolution target was breached.
ITSMsla.warningSLA is within warning threshold.
ITSMcmdb.ci.createdNew CI registered.
ITSMcmdb.ci.updatedCI attributes changed.
ITSMcmdb.relationship.createdRelationship edge added between CIs.
Workflowworkflow.createdWorkflow definition created.
Workflowworkflow.publishedDraft version activated.
Workflowworkflow.deactivatedWorkflow set to inactive.
Workflowworkflow.deletedWorkflow deleted.
Workflowrun.startedWorkflow run began executing.
Workflowrun.completedRun finished successfully.
Workflowrun.failedRun failed with an error.
Workflowrun.cancelledRun cancelled by user or API.
Workflowrun.approval.requestedRun paused waiting for approval.
Workflowrun.approval.approvedApproval given, run resuming.
Workflowrun.approval.rejectedApproval rejected, run failed.
Authuser.loginSuccessful login.
Authuser.login.failedFailed login attempt.
Authuser.logoutUser logged out.
Authuser.mfa.enrolledMFA method added.
Authuser.mfa.removedMFA method removed.
Authuser.password.changedPassword changed.
Authuser.password.resetPassword reset via link.
Authuser.session.revokedSession invalidated by admin.
Authuser.invitedInvitation email sent.
Authuser.invitation.acceptedInvited user completed sign-up.
Authuser.deactivatedUser account deactivated.
Authuser.reactivatedAccount restored.
Authapi_token.createdAPI token generated.
Authapi_token.revokedAPI token revoked.
Settingsrole.createdCustom role defined.
Settingsrole.updatedRole permissions changed.
Settingsrole.deletedRole removed.
Settingsrole.assignedRole assigned to a user.
Settingsrole.unassignedRole removed from a user.
Settingssso.configuredSSO provider saved.
Settingssso.enabledSSO enforced for the workspace.
Settingssso.disabledSSO enforcement removed.
Settingsworkspace.updatedWorkspace settings changed.
Settingssecret.createdSecret stored in vault.
Settingssecret.deletedSecret removed from vault.
Settingswebhook.createdOutbound webhook configured.
Settingswebhook.deletedWebhook removed.
Integrationconnector.createdIntegration connector added.
Integrationconnector.updatedConnector config changed.
Integrationconnector.deletedConnector removed.
Integrationconnector.testedTest connection run.

Query API

All audit events are queryable via the standard Records API. The table slug is audit_events.

GET
/api/v1/tables/audit_events/records

List audit events with filters, pagination, and sorting.

GET
/api/v1/tables/audit_events/records/:id

Fetch a single audit event by ID.

Query Examples

bash
# All P1 incident resolutions in the past 30 days
GET /api/v1/tables/audit_events/records
  ?filter[action]=incident.resolved
  &filter[created_at][gte]=2026-05-01

# All actions by a specific user
GET /api/v1/tables/audit_events/records
  ?filter[actor_id]=usr_01HX...
  &sort=-created_at
  &pageSize=100

# All login failures
GET /api/v1/tables/audit_events/records
  ?filter[action]=user.login.failed

# All settings changes
GET /api/v1/tables/audit_events/records
  ?filter[entity_type]=workspace
  &sort=-created_at

Retention Policy

  • Default: 365 days. Events older than this are automatically purged nightly.
  • Extended: Upgrade to a Compliance plan for up to 7-year retention with WORM (Write Once Read Many) guarantees.
  • Minimum: 90 days (cannot be set lower).
  • Policy is workspace-scoped. Each workspace sets its own retention in Settings → Workspace → Security → Audit Retention.

SIEM Export

Forward audit events to your SIEM in real time using one of three methods:

Webhook Forwarding

Create a webhook subscribed to the audit.* event group in Integrations → Webhooks. Every audit event is POSTed as JSON within 2 seconds of occurrence. Supports HMAC signature verification.

Syslog (UDP/TCP)

Configure a Syslog target in Settings → Workspace → Security → Syslog Export. Events are formatted as RFC-5424 structured syslog messages. Supported facilities: LOCAL0–LOCAL7.

Bulk Export API

bash
# Export all events for a date range as newline-delimited JSON
GET /api/v1/audit/export
  ?from=2026-05-01
  &to=2026-06-01
  &format=ndjson
Authorization: Bearer <token>

Exports are streamed. For large date ranges, use cursor pagination via the after parameter (an event ID).

If you use Datadog, Splunk, or Elastic, the pre-built connector in Integration Studio handles auth, batching, and field mapping automatically — no custom webhook needed.