Skip to content

Audit log

Sigil writes one row to audit_events for every state-changing, security-sensitive action. The portal’s Audit log page reads from it; you can also query it from your backend.

GET /v1/orgs/{orgID}/audit

Portal-only (Kratos session). Query params:

NameTypeNotes
event_typestringFilter to one of the values listed below.
successbooltrue (default both) or false.
limitintDefault 50, max 200.
offsetint

Response:

{
"data": {
"items": [
{
"id": "aud_xxx",
"timestamp": "2026-05-04T22:00:00Z",
"organization_id": "org_xxx",
"user_identity_id": "usr_xxx",
"wallet_id": "wal_xxx",
"actor_type": "end_user",
"actor_id": "usr_xxx",
"event_type": "wallet.created",
"payload": { "chain_type": "evm", "address": "0x…" },
"success": true,
"error_code": ""
}
],
"total": 1234,
"limit": 50,
"offset": 0
},
"error": null
}

Event types

Stable strings, safe to switch on:

TypeWhen
wallet.createdIframe successfully created a wallet.
recovery.initiatedOTP email sent for a recovery process.
recovery.verifiedOTP accepted, shares returned to iframe.
recovery.completedPolynomial rotated, new shares persisted.
api_key.createdPortal user minted a key.
api_key.revokedPortal user revoked a key.
org.auth_updatedAuth config changed (sigiloidc, issuer, etc).
org.settings_updatedBranding / allowed origins / support email.
org.recovery_mode_updatedCustomer-managed ↔ Sigil-managed.
webhook.updatedRecovery webhook URL upserted.
webhook.removedRecovery webhook deleted.

Reliability

Audit writes are best-effort: a failure to write does not abort the originating request. We’d rather drop an audit row than refuse to authenticate a user. Failures are surfaced in the runtime logs with audit insert failed.