API

Audit log

Read and filter organization activity.

The Audit API is a read-only feed of the append-only audit log for your active organization: an event per significant action (logins, member changes, deployments, settings edits, and more), newest first. In the dashboard this is the Audit page; there's no dedicated CLI command — reach it through openship api.

List audit events

Every event is scoped to your active organization. Access is gated by role: owners and admins always see the log, plain members are denied, and restricted users need an explicit audit:read grant on the org-level audit resource. See permissions & roles.

Query parameters

All parameters are optional. Choose one pagination mode: pass cursor (keyset) or page/perPage (offset). Cursor mode is recommended for anything that streams pages — it survives concurrent writes without shifting rows; page mode powers the dashboard's "Showing 1–50 of N" count.

const result = await ship.audit.list();
console.log(result);
# Cursor mode — newest 50 deployment-failure events
curl -G "$OPENSHIP_URL/api/audit" \
  -H "Authorization: Bearer $OPENSHIP_TOKEN" \
  --data-urlencode "cursor=" \
  --data-urlencode "limit=50" \
  --data-urlencode "eventType=deployment.failed"

Prop

Type

Response

Each event row carries id, eventType, resourceType, resourceId, before/after JSON snapshots (mutation events only; otherwise null), ipAddress, userAgent, and createdAt. Rows are enriched with an actor object ({ id, email, name }) resolved from actorUserId, or null for system-emitted events.

The pagination envelope depends on the mode:

  • Cursor mode → { data, pageInfo: { hasNextPage, endCursor } }. Pass endCursor back as cursor for the next page; there is no total.
  • Offset mode → { data, total, page, perPage }.

Errors

403 — not permitted

Your role can't read the audit log. Members are denied by default; ask an owner/admin to grant audit:read on the org's audit resource, or view the log from an admin account. See permissions & roles.

Empty results, not an error

Filters that match nothing return 200 with an empty data array. Double-check eventType spelling (it's the exact dot-namespaced tag) and that resourceId belongs to your organization. Retention is org-configurable (default 90 days), so events older than the window are pruned and won't appear.

Operations

OperationSDKREST API
Read filtered, paginated audit events.audit.list(input?)GET /api/audit
audit:read
Read available audit filter values.audit.facets(input?)GET /api/audit/facets
audit:read
Read audit retention settings.audit.getSettings()GET /api/audit/settings
audit:read
Change audit retention settings.audit.updateSettings(input)PATCH /api/audit/settings
audit:write

On this page