Skip to content

Audit Log

The Pulsabase Audit Log provides a tamper-evident record of all significant actions performed in your project. Audit events are streamed to ClickHouse via NATS and retained independently of your main database.

pulsabase-idp / pulsabase-core / pulsabase-edge / pulsabase-storage
└── NATS Audit stream → pulsabase-audit-writer → ClickHouse (pulsabase_audit)

All services publish audit.* events to a dedicated, isolated NATS cluster (nats-audit). The audit writer consumes and persists them durably.

Authentication Events (from pulsabase-idp)

Section titled “Authentication Events (from pulsabase-idp)”
EventDescription
user.signed_inSuccessful password or OAuth login
user.sign_in_failedFailed password / OTP attempt
user.signed_outExplicit sign-out
user.token_refreshedTokens refreshed via refresh_token
user.password_reset_requestedPassword reset email triggered
user.password_reset_confirmedPassword changed via reset link
user.password_changedPassword changed while authenticated
user.mfa_enrolledTOTP MFA enrolled for a user
user.mfa_disabledTOTP MFA disabled for a user
user.email_verifiedUser confirmed their email
user.createdNew user registered (email or OAuth)
user.disabledUser account disabled by admin
user.deletedUser account deleted
EventDescription
role.createdNew role created
role.deletedRole deleted
permission.createdNew permission defined
permission.assignedPermission assigned to a role
role.assigned_to_userRole granted to a user
provider.upsertOAuth provider configured
provider.deleteOAuth provider removed
EventDescription
schema.deployeddb:sync applied schema changes
schema.rolled_backdb:rollback executed
function.deployedEdge function created or updated
function.deletedEdge function deleted
cron.createdCron job created
webhook.createdWebhook endpoint registered
EventDescription
storage.upload.completedFile successfully uploaded
storage.upload.failedFile upload rejected (ACL or quota)
storage.downloadFile download presigned URL issued
storage.deleteFile deleted
storage.policy.updatedACL policy changed for a folder
EventDescription
edge.invokedFunction invoked (sync or async)
edge.invoked.successFunction completed successfully
edge.invoked.errorFunction failed (step error or timeout)

Access audit logs from Dashboard → Audit:

FilterOptions
Date rangeLast 1h / 24h / 7d / 30d / custom
Event typeCategory or specific event name
UserFilter by actor email or user ID
IP addressFilter by source IP
StatusAll / success / failure

Each audit event contains:

FieldDescription
timestampExact UTC timestamp (microsecond precision)
event_typeEvent name (e.g., user.signed_in)
actor_idUser ID who performed the action (or system)
actor_emailUser’s email at time of action
project_idThe project affected
resource_typeWhat was acted upon (user, schema, file, etc.)
resource_idID of the specific resource
statussuccess or failure
ip_addressClient IP address
user_agentClient user-agent string
metadataStructured context (provider name, old/new values, error message)

Audit logs can be exported in JSON or CSV format via Dashboard → Audit → Export:

Terminal window
# API export (requires admin token)
curl "https://your-idp.pulsabase.io/management/projects/{project_id}/audit-logs?format=json&from=2026-01-01&to=2026-03-01" \
-H "Authorization: Bearer <admin_access_token>"
TierRetention
Default90 days
Enterprise1 year+ (configurable)

Audit logs are stored in ClickHouse with a time-ordered schema, making large-range queries (for compliance exports) very fast even at high volume.