Skip to main content

Audit Logging

Autentico records security-relevant events in an audit log stored in the audit_logs table. The log captures who did what, when, and from where -- providing a trail for security review, compliance, and incident investigation.

Configuration​

curl -X PUT https://auth.example.com/admin/api/settings \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"audit_log_retention": "720h"}'
SettingDefaultDescription
audit_log_retention720h (30 days)How long audit logs are kept. Set to 0 to disable logging, -1 to keep logs forever.

When retention is set to 0 or empty, audit events are not recorded at all. The background cleanup job purges expired entries based on the retention duration.

Event types​

EventTargetDescription
login_successuserSuccessful password or federation login
login_faileduserFailed login attempt
mfa_successuserSuccessful MFA verification
mfa_faileduserFailed MFA verification
passkey_login_successuserSuccessful passkey authentication
passkey_login_faileduserFailed passkey authentication
password_changeduserUser changed their password
password_reset_requesteduserPassword reset email was sent
password_reset_completeduserPassword was successfully reset
user_createduserNew user account created
user_updateduserUser profile updated
user_deactivateduserUser account deactivated
user_reactivateduserUser account reactivated
user_deleteduserUser account permanently deleted
user_unlockeduserUser account unlocked after lockout
mfa_enrolleduserUser enrolled in TOTP MFA
mfa_disableduserTOTP MFA disabled for user
passkey_addeduserPasskey credential registered
passkey_removeduserPasskey credential removed
logoutuserUser logged out
session_revokedsessionIndividual session revoked
all_user_sessions_revokedsessionAll sessions for a user revoked
other_sessions_revokedsessionAll sessions except current revoked
token_revokedtokenToken revoked
client_createdclientOAuth2 client registered
client_updatedclientOAuth2 client updated
client_deletedclientOAuth2 client deleted
settings_updatedsettingsSystem settings changed
settings_importedsettingsSettings imported from file
federation_createdfederationFederation provider added
federation_updatedfederationFederation provider updated
federation_deletedfederationFederation provider removed
deletion_approveduserAccount deletion request approved

Querying audit logs​

GET /admin/api/audit-logs

curl "https://auth.example.com/admin/api/audit-logs?event=login_failed&order=desc&limit=50" \
-H "Authorization: Bearer $ADMIN_TOKEN"

Query parameters​

ParameterDefaultDescription
event--Filter by event type (e.g. login_failed, user_created)
search--Search across actor_username, target_id, ip_address, detail
sortcreated_atSort field: created_at, event
orderdescSort order: asc, desc
created_at_from--Date range start (ISO 8601, e.g. 2026-01-01T00:00:00Z)
created_at_to--Date range end (ISO 8601)
limit100Max results per page (1--100)
offset0Number of results to skip

Response​

{
"items": [
{
"id": "cq1abc123",
"event": "login_failed",
"actor_id": null,
"actor_username": "",
"target_type": "user",
"target_id": "user-456",
"detail": "{\"username\":\"alice\"}",
"ip_address": "192.168.1.100",
"created_at": "2026-05-09T14:30:00Z"
}
],
"total": 42
}

Examples​

Failed logins in the last 24 hours:

curl "https://auth.example.com/admin/api/audit-logs?event=login_failed&created_at_from=2026-05-08T14:30:00Z" \
-H "Authorization: Bearer $ADMIN_TOKEN"

All events for a specific IP address:

curl "https://auth.example.com/admin/api/audit-logs?search=192.168.1.100" \
-H "Authorization: Bearer $ADMIN_TOKEN"

Settings changes:

curl "https://auth.example.com/admin/api/audit-logs?event=settings_updated" \
-H "Authorization: Bearer $ADMIN_TOKEN"

Audit log record structure​

Each audit event stores the following fields in the audit_logs table:

ColumnTypeDescription
idTEXTUnique event ID (xid)
eventTEXTEvent type (see table above)
actor_idTEXTID of the user who performed the action (nullable -- null for failed logins)
actor_usernameTEXTUsername of the actor at the time of the event
target_typeTEXTType of entity affected: user, client, session, token, settings, federation
target_idTEXTID of the affected entity
detailTEXTJSON string with additional context (e.g. {"method":"federation","provider":"google"})
ip_addressTEXTClient IP address
created_atDATETIMEWhen the event occurred
tip

The actor_id is null for events where the acting user is unknown, such as failed login attempts. The actor_username may still be populated from the bearer token when available.