/dashboard/audit-log records every administrative action taken through the dashboard or API. Each entry captures who performed the action, what changed, when it happened, and from which IP address.
What gets logged
The following action types are recorded:| Action | Description |
|---|---|
config.update | A bot configuration key was changed |
members.update | A member record was updated |
moderation.create | A moderation action was applied (warn, ban, timeout, etc.) |
moderation.delete | A moderation record was removed |
tickets.update | A support ticket was updated |
target_type and target_id identifying the affected object, and a details JSON blob with the full before/after payload.
Browsing the log
Entries are displayed in a table sorted by most recent first, showing 25 entries per page. The table columns are:- Action — a color-coded badge: blue for
create, grey forupdate, red fordelete, and outline for all other types - User — the Discord user ID of the admin who performed the action
- Target — the target type and ID in
type:idformat - Date — the local date and time of the action
- IP — the IP address of the request (visible on wide screens)
details JSON for that entry.
Filtering entries
The filter bar above the table lets you narrow results across four dimensions:Filter by user ID
Filter by user ID
Type a Discord user ID in the search box. Results update automatically after a 300 ms debounce. Click the X inside the field to clear the filter.
Filter by action type
Filter by action type
Use the All actions dropdown to select a specific action type such as
config.update or moderation.create.Filter by date range
Filter by date range
Set a Start date and/or End date using the date pickers. Entries outside the range are excluded. Both filters are optional and can be used independently.
Pagination
When there are more than 25 matching entries, Previous and Next buttons appear at the bottom of the table. The current page and total page count are shown alongside the controls.Real-time streaming
The audit log supports live updates via a WebSocket connection at/ws/audit-log. When the dashboard is open, new entries appear in the table as they are written without requiring a page refresh.
The WebSocket protocol uses HMAC-authenticated tickets:
Real-time streaming is automatically managed by the dashboard. You do not need to configure it manually when using the web UI.
Exporting data
Use the export endpoint to download the full filtered log outside the paginated view.- CSV export
- JSON export
The CSV file includes all filtered entries up to a maximum of 10,000 rows. The columns match the database schema:The
details column is JSON-encoded and quoted according to RFC 4180.Log retention
The number of days audit entries are retained is controlled by theauditLog.retentionDays configuration key. Entries older than the retention window are purged automatically.