OR
OpenRemedy

Audit

Immutable record of state-changing actions.

Immutable record of every state-changing action in the tenant.

Route: /audit Role gating: read for all (records are tenant-scoped).

Model

Each row is appended once and never modified.

FieldNotes
Resource typeincident, server, recipe, policy, agent, user, tenant, secret, etc.
Resource IDUUID of the affected row, or NULL for system events
Actioncreated, updated, deleted, executed, approved, auth.login, auth.login_failed, etc.
ActorUser email or agent:<name>; NULL for unauthenticated events such as failed logins
TenantNullable — system events (e.g., failed logins from unknown emails) carry tenant_id = NULL
TimestampUTC, second precision
DetailJSON blob with the diff or change summary
IP addressCaptured from X-Forwarded-For only when the immediate peer is in trusted (RFC1918 / loopback) space; otherwise the actual TCP peer

Filters

  • Querystring ?resource_type=… filters by type.
  • Querystring ?resource_id=… filters by specific resource. The rest of the dashboard links here for "what changed on this resource?"
  • Free-text search on actor and action.

What is NOT audited

  • Read-only requests (GET endpoints).
  • Internal heartbeats and evidence reports from the daemon.
  • WebSocket fanout.

Related routes

  • Every section of the dashboard links into Audit with a pre-applied resource filter when "history" is requested.