Skip to main content

Audit Log

The Audit Log is an append-only record of every security-sensitive action taken inside a SyAuth workspace: logins (successful and failed), password changes, OAuth client lifecycle, API token creation/revocation, workspace membership changes, and more.

It gives you three things out of the box:

  • Traceability — who did what, from which IP, at what time.
  • Incident response — filter by actor, target, IP, or event type to reconstruct a timeline.
  • Compliance — a documented activity trail for SOC 2, ISO 27001, and GDPR assessments.

Events are immutable: there is no update or delete endpoint, and no admin can rewrite history.


View the audit log in the Dashboard

Open the SyAuth Dashboard and click Audit Log in the sidebar.

Filters available at the top of the page:

FilterMatches
Event typeExact event, e.g. login_success, oauth_client_secret_reset
Severityinfo, warn, error
Actor IDThe UUID of the developer or end user who performed the action
IP addressThe source IP captured from the request
From / ToA time window on created_at

Each row expands to show the full JSON payload: metadata, user_agent, request_id, linked oauth_client_id, and any event-specific details.


API reference

GET /developer/audit/

Lists events for a workspace. The authenticated developer must be a member of the workspace; cross-workspace listing is not supported.

Query parameters

ParameterTypeRequiredDescription
workspace_idUUIDyesWorkspace to list events for
event_typestringnoExact event-type match (see table below)
severityinfo | warn | errorno
actor_idstringnoUUID or developer id of the actor
actor_typedeveloper | end_user | api_token | oauth_client | system | anonymousno
target_idstringnoTarget entity id
ip_addressstringnoSource IP
fromISO-8601noLower bound on created_at
toISO-8601noUpper bound on created_at
limitintegerno1–100, default 50
cursorISO-8601noPagination cursor — pass next_cursor from the previous response

Response

{
"results": [
{
"id": "a8c7e2f0-0000-4000-8000-000000000000",
"workspace_id": "b1...",
"event_type": "oauth_client_secret_reset",
"severity": "warn",
"actor_type": "developer",
"actor_id": "dev_01HZ...",
"actor_email": "[email protected]",
"target_type": "OAuthClient",
"target_id": "c2...",
"oauth_client_id": "c2...",
"ip_address": "203.0.113.42",
"user_agent": "Mozilla/5.0 ...",
"request_id": "req_7f1a",
"message": "OAuth client 'Web App' secret rotated",
"metadata": {},
"created_at": "2026-04-17T10:12:34Z"
}
],
"next_cursor": "2026-04-17T10:09:01Z",
"limit": 50
}

Paginate by passing next_cursor back as cursor on the next request. next_cursor is null when you have reached the end.

cURL example

curl -G "https://api.syauth.com/developer/audit/" \
--data-urlencode "workspace_id=b1..." \
--data-urlencode "event_type=login_failure" \
--data-urlencode "from=2026-04-17T00:00:00Z" \
-H "Cookie: sessionid=..."

Event catalog

Full list of event types currently emitted:

Authentication

EventSeverityWhen emitted
login_successinfoEnd user logged in
login_failurewarnWrong password or user not found
logoutinfoEnd user logged out
registerinfoNew end user account created
email_verify_sendinfoVerification email sent
email_verify_confirminfoEmail verification completed
password_reset_requestinfoPassword reset email sent
password_reset_confirmwarnPassword reset completed
password_updatewarnAuthenticated user changed own password

OAuth / clients

EventSeverityWhen emitted
oauth_client_createinfoNew OAuth client created
oauth_client_updateinfoOAuth client configuration changed
oauth_client_deletewarnOAuth client deleted
oauth_client_secret_resetwarnClient secret rotated
oauth_token_issueinfoAccess/refresh token issued (planned)
oauth_token_revokewarnToken revoked (planned)
oauth_consent_grantinfoEnd user granted consent to a client (planned)

Workspace

EventSeverityWhen emitted
workspace_createinfoNew workspace created
workspace_updateinfoWorkspace settings changed (planned)
workspace_deletewarnWorkspace deleted
workspace_member_addwarnDeveloper added as member
workspace_member_removewarnMember removed
workspace_invite_sendinfoInvitation sent (planned)
workspace_invite_acceptinfoInvitation accepted (planned)

Credentials

EventSeverityWhen emitted
api_token_createwarnAPI token created
api_token_revokewarnAPI token revoked
dev_token_createwarnDeveloper access token created (planned)
dev_token_revokewarnDeveloper access token revoked (planned)

End-user management

EventSeverityWhen emitted
user_createinfoDeveloper created an end user (planned)
user_updateinfoEnd user profile changed (planned)
user_deletewarnEnd user deleted (planned)
user_group_assigninfoUser added to group (planned)
user_group_unassigninfoUser removed from group (planned)

External providers and custom databases

EventSeverityWhen emitted
external_provider_createinfoSocial/OIDC provider configured (planned)
external_provider_updateinfoProvider reconfigured (planned)
external_provider_deletewarnProvider removed (planned)
custom_db_connectinfoCustom database connection created (planned)
custom_db_disconnectwarnCustom database disconnected (planned)
custom_db_sync_failerrorCustom database sync failed (planned)

Events marked (planned) have their event-type constants reserved and may be empty today; they will be populated as the emit points are wired in subsequent releases. The constant list is append-only — new events are added, never renamed.


Event fields

FieldNotes
idUUID, stable identifier for the event
workspace_idUUID of the owning workspace, or null for pre-workspace/system events
event_typeOne of the catalog above
severityinfo | warn | error
actor_typeWho initiated the action
actor_idUUID / developer id — may be null for anonymous events like a login attempt against a non-existent email
actor_emailBest-effort email of the actor for display purposes
target_typeEntity class name, e.g. OAuthClient, ExtsUser, ExtsApiToken
target_idTarget entity id
oauth_client_idLinked OAuth client for end-user events
ip_addressExtracted from X-Forwarded-For or REMOTE_ADDR
user_agentTruncated to 1000 chars
request_idFrom X-Request-Id header — pair this with your own logs for a full trace
messageShort human-readable summary (≤ 255 chars)
metadataArbitrary JSON with event-specific fields
created_atISO-8601 UTC

Operational characteristics

  • Append-only — no update or delete endpoints.
  • Resilient — if the audit write fails for any reason (cache unavailable, transient DB error), the surrounding request still succeeds. Audit must never break the flow it observes.
  • Workspace-scoped — every read is gated by explicit WorkspaceMember or owner check. There is no cross-tenant listing.
  • Indexed on (workspace, -created_at), (workspace, event_type, -created_at), actor_id, target_id, and ip_address for fast filtered queries.
  • Retention — events are retained indefinitely on current plans. Tiered retention (e.g. 90 days for Free, unlimited for Business) will be documented when introduced.

Using the audit log well

  • Wire an alert on login_failure spikes per IP. Credential stuffing usually shows up as bursts of login_failure with a common ip_address.
  • Track credential rotations. oauth_client_secret_reset, api_token_create, and api_token_revoke together tell you whether your rotation policy is being followed.
  • Reconcile with request logs via request_id. The same id is available in your application logs if you forward X-Request-Id; this turns the audit log into the canonical anchor for cross-system incident timelines.
  • Protect the dashboard. Only workspace owners and members can read the log — make sure your workspace membership hygiene matches the sensitivity of the data.