Skip to main content
The audit log is an append-only record of who did what on the control plane. Every sensitive mutation — an agent update, a key rotation, a role change, a denied policy, a credit top-up — is captured as an immutable entry attributed to the acting principal (a member or an API key). Use it to answer “who changed this, when, and from which request?” for security review, incident response, and compliance. Reads require the audit:read scope. Entries are never modified or deleted; the log only grows.

The audit entry object

string
Entry id (e.g. aud_01H...).
object
The principal that performed the action.
string
The audited action (see Audited actions).
string
The kind of resource affected (e.g. agent, api_key, member, webhook_endpoint, session, credits).
string | null
Id of the affected resource, when the action targets one.
string
The x-request-id of the request that produced the entry — join this to your own logs and to the error envelope.
object
Action-specific detail (e.g. the before/after role on a role change, the to_version on a rollback, the denied tool on a policy denial).
string
When the action occurred.

List audit logs

GET /v1/audit_logs returns entries newest-first. Cursor-paginated — see Pagination.

Filters

string
Filter to a single principal id (a member usr_… or key key_…).
string
Filter to a single resource id (e.g. a specific agt_…).
string
Filter to one action string (e.g. api_key.rotated).
string
Filter to the entries one request wrote, by the request_id it carried.
string
Lower bound (inclusive) on created_at: a date like 2026-08-01 or a timestamp like 2026-08-01T00:00:00Z (send an offset’s + as %2B). Anything else is 400 validation_failed with param: "from".
string
Upper bound (exclusive) on created_at: a date like 2026-08-01 or a timestamp like 2026-08-01T00:00:00Z (send an offset’s + as %2B). Anything else is 400 validation_failed with param: "to".

Audited actions

The following control-plane actions are captured in the initial release. The list grows over time; treat action as an open string and branch on the prefixes you care about.
Each entry pins the exact request_id, so an audited action, its error envelope (if it failed), and your own request logs all correlate on one id. Money movements additionally carry an actor on the ledger, so spend is attributable without cross-referencing the audit log.