Audit Log
Every change to values, secrets, schema definitions, and releases is recorded in an immutable audit log. The log answers: who changed what, when, and from where.
What is logged
| Event | Logged fields |
|---|---|
| Value set / updated | key, old value*, new value*, scope, scope_ref, user_id, timestamp |
| Secret sealed | key, scope, scope_ref, public_key prefix, user_id, timestamp |
| Schema synced | plugin, created/updated/unchanged counts, user_id, timestamp |
| Release created | version, etag, environment, config snapshot hash, user_id, timestamp |
| App key created | key name, prefix, environment, user_id, timestamp |
| App key revoked | key id, revoked_by, timestamp |
| Token created | prefix, user_id, org_id, timestamp |
| Token revoked | token_id, timestamp |
*Secret values are never logged in plaintext.
Querying the audit log
# All events for the current project
npx orbseal audit list
# Filter by event type
npx orbseal audit list --type value_set
# Filter by user
npx orbseal audit list --user admin@acme.com
# Filter by key
npx orbseal audit list --key taskflow:max_seats
# Time range
npx orbseal audit list --from 2026-01-01 --to 2026-06-01
# JSON output for piping
npx orbseal audit list --json | jq '.events[] | select(.type == "release_created")'
REST API
GET /v1/workspaces/:ws/projects/:proj/audit
Query parameters:
| Param | Description |
|---|---|
type |
Filter by event type (see table above) |
user_id |
Filter by actor user ID |
key |
Filter by plugin:key |
from |
ISO date lower bound |
to |
ISO date upper bound |
limit |
Max results (default 50, max 500) |
cursor |
Pagination cursor from previous response |
Response:
{
"events": [
{
"id": "01943b7a-...",
"type": "value_set",
"actor_id": "019e99f6-...",
"actor_email":"admin@acme.com",
"key": "taskflow:max_seats",
"scope": "workspace",
"scope_ref": "platform",
"old_version": 2,
"new_version": 3,
"timestamp": "2026-06-06 22:44:11"
}
],
"cursor": "eyJpZCI6Ij..."
}
Release diff
You can compare two releases to see exactly what changed between deployments:
npx orbseal releases diff platform taskflow production 1 2
taskflow:max_seats 5 → 10
taskflow:features {"ai_assist":false} → {"ai_assist":true}
taskflow:time_tracking — → false
Retention
Audit events are retained for 90 days on the free plan and 2 years on paid plans. Events are append-only — they cannot be deleted or modified.
Webhooks
You can subscribe to audit events via webhooks to push them into your own logging or alerting system (e.g. Datadog, Splunk, Slack):
npx orbseal webhooks create \
--url https://hooks.yourapp.com/orbseal \
--events value_set,release_created,key_revoked
Webhook payloads are signed with HMAC-SHA256 using a shared secret.
Compliance use cases
- SOC 2 — evidence that only authorised users changed config
- GDPR — track when personal-data-adjacent config (e.g. retention periods) was changed
- Incident response — pinpoint the exact change that preceded a production incident
- Change management — gate releases behind audit approval workflows