Event Types

SeaWatch writes 24 event types, grouped below by what they are about. Each carries a success or failure status alongside its details.

Authentication

EventDescriptionActorTarget
login_successUser successfully authenticatedUserUser
login_failureAuthentication attempt failedNoneUser (if identified)

login_success details:

{
  "client_id": "my-frontend",
  "grant_type": "password",
  "ip_address": "203.0.113.42"
}

login_failure details:

{
  "reason": "invalid_credentials",
  "client_id": "my-frontend",
  "username": "alice"
}

Failed logins have no actor

When a login fails, the user is not yet authenticated, so actor_id is typically null. The target_id is set when the user could be identified (valid username, wrong password).

Password

EventDescriptionActorTarget
password_resetPassword was reset by an adminAdminUser
password_reset_requestedUser requested a password reset emailSystemUser
password_reset_completedUser completed the password reset flowUserUser

These three events trace the full password reset lifecycle. A password_reset_requested without a matching password_reset_completed might indicate a user who abandoned the flow, or an attacker testing email enumeration.

User

EventDescriptionActorTarget
user_createdNew user account createdAdmin or SystemUser
user_email_verifiedA user confirmed their email addressUserUser
user_deletedUser account deletedAdminUser

User creation events record whether the account came from an admin, from self-registration, or from a client’s service account.

Role

EventDescriptionActorTarget
role_assignedRole assigned to a userAdminUser
role_unassignedRole removed from a userAdminUser
role_createdNew role createdAdminRole
role_removedRole deletedAdminRole

Role events are critical for access control audits. They answer: “Who granted this user admin permissions, and when?”

Client

EventDescriptionActorTarget
client_createdNew OAuth2 client registeredAdminClient
client_deletedClient removedAdminClient
client_secret_rotatedClient secret was regeneratedAdminClient
client_secret_viewedSomeone read a client’s secretAdminClient

client_secret_rotated invalidates the old secret, so an unexpected one is worth a look. client_secret_viewed is the quieter sibling: nothing changed, but a credential left the system, and that is exactly the trail you want during an incident.

Sessions

EventDescriptionActorTarget
session_createdA user session was establishedUserUser
session_revokedA session was revokedAdmin or UserUser

Maintenance

EventDescriptionActorTarget
client_maintenance_enabledMaintenance mode was turned onAdminClient
client_maintenance_disabledMaintenance mode was turned offAdminClient

Maintenance mode blocks access while it is on, subject to a whitelist. Both transitions are recorded, so a window that stayed open longer than intended is visible after the fact.

Email

EventDescriptionActorTarget
email_sentA transactional email was handed to the SMTP serverSystemUser
email_not_sentDelivery failedSystemUser

email_not_sent is the one to alert on. A password reset that never left the building looks identical to a user ignoring it, unless you are watching this event.

Federation

EventDescriptionActorTarget
identity_provider_link_removedA federated identity was unlinked from a userAdmin or UserUser

Configuration

EventDescriptionActorTarget
realm_config_changedRealm settings were modifiedAdminRealm

Configuration changes reach far: turning registration on, changing a token lifetime, lowering a lockout threshold. SeaWatch records what changed, not just that something did.

The `unknown` type

Reading an event whose stored type matches no known variant yields unknown rather than a guess. A row written by a newer version, or a corrupt one, can never be misread as a successful login.