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.
Event Description 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
Event Description 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
Event Description schema.deployeddb:sync applied schema changesschema.rolled_backdb:rollback executedfunction.deployedEdge function created or updated function.deletedEdge function deleted cron.createdCron job created webhook.createdWebhook endpoint registered
Event Description 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
Event Description 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 :
Filter Options Date range Last 1h / 24h / 7d / 30d / custom Event type Category or specific event name User Filter by actor email or user ID IP address Filter by source IP Status All / success / failure
Each audit event contains:
Field Description 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 failureip_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 :
# 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>"
Tier Retention Default 90 days Enterprise 1 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.