Skip to content

Account Security Monitor

The Account Security Monitor gives every user visibility into their own authentication activity and active sessions. Administrators gain additional controls to view and manage security events across all users in the organization.

Every authentication event against your Arbitex account is recorded with full context: timestamp, event type, IP address, device information, and GeoIP-enriched location data. The Account Security Monitor surfaces this history through the Cloud Portal and through the security events API.


The following 12 event types are recorded in the security history. These match the action values returned by the API and displayed in the Cloud Portal event timeline.

Event TypeDescription
auth.login_successSuccessful interactive login (password or passkey)
auth.login_failedFailed login attempt — wrong password, locked account, or unrecognized user
auth.logoutExplicit logout initiated by user
auth.mfa_enabledTOTP or WebAuthn MFA factor enabled on account
auth.mfa_disabledMFA factor disabled by user or admin
auth.mfa_verify_successMFA challenge completed successfully during login
auth.mfa_verify_failedMFA challenge failed (wrong code or expired token)
auth.webauthn_registeredNew WebAuthn passkey registered on the account
auth.webauthn_loginSuccessful login using a WebAuthn passkey
auth.webauthn_revokedWebAuthn passkey removed from account
auth.session_force_logoutSession terminated by an admin force-logout action
auth.session_evictedSession terminated automatically due to concurrent session limit

All events include the user_id of the authenticating user and the source_ip of the origin request.


Navigate to Account → Security or go directly to /portal/my-security.

The security history page shows:

  • Event timeline — the last 90 days of auth events, most recent first, with relative timestamps (absolute on hover)
  • Active Sessions panel — all currently valid sessions with device and location details
  • Filters — event type, date range
  • Auto-refresh — the timeline refreshes automatically every 60 seconds

Each event row shows:

ColumnDescription
IconColor-coded event type indicator (green = success, red = failure, amber = warning)
Event labelHuman-readable event type
Relative timeTime since event (e.g., “5m ago”); hover for absolute timestamp
IP addressSource IP at time of event
LocationCity and country inferred from IP via GeoIP
DeviceBrowser, app, and OS parsed from User-Agent string
Anon IP badgesVPN / Proxy / Tor / Hosting flags when detected

Click any event row to expand full metadata including the raw User-Agent string and any extra event metadata.

Use the filter controls to narrow results:

  • Event type — one of the 12 event types, or “All events”
  • Date range — start date and end date pickers

Query your own auth events using the user_id=me parameter:

Terminal window
curl -H "Authorization: Bearer $TOKEN" \
"https://api.arbitex.ai/v1/orgs/{org_id}/security/events?user_id=me&limit=50"
GET /v1/orgs/{org_id}/security/events

Host: https://api.arbitex.ai

ParameterTypeDescription
user_idstringFilter by user ID. Use me to filter by the authenticated user. Defaults to org-wide (admin only).
event_typestringFilter by exact action string (e.g., auth.login_success)
start_datestringISO 8601 date lower bound (inclusive)
end_datestringISO 8601 date upper bound (inclusive)
offsetintegerPagination offset (default: 0)
limitintegerMax events per page, 1–200 (default: 50)
{
"events": [
{
"id": "evt_01ABC123",
"timestamp": "2026-03-13T10:00:00.000Z",
"action": "auth.login_success",
"user_id": "usr_alice",
"source_ip": "203.0.113.42",
"location": {
"city": "San Francisco",
"country": "US"
},
"anonymous_ip": {
"isp": "Comcast",
"is_vpn": false,
"is_proxy": false,
"is_tor": false,
"is_hosting": false
},
"device": {
"name": "Chrome",
"app": "Chrome 122",
"os": "macOS",
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36..."
},
"extra_metadata": null
}
],
"total": 47,
"offset": 0,
"limit": 50
}

The user_id=me alias resolves to the authenticated user’s own UUID at query time. It allows users to query their own events without knowing their UUID:

Terminal window
# Self-service: retrieve my own auth events
curl -H "Authorization: Bearer $TOKEN" \
"https://api.arbitex.ai/v1/orgs/{org_id}/security/events?user_id=me&event_type=auth.login_failed&limit=10"

Non-admin users can only query user_id=me. Admin users can pass any user_id value to view another user’s events.


The Active Sessions panel at /portal/my-security lists all sessions currently active under your account.

Each session shows:

FieldDescription
CreatedWhen the session was established
Last activeMost recent authenticated request
ExpiresSession expiry time
IP AddressIP at session creation
LocationGeoIP city and country
DeviceBrowser and OS
CurrentBadge indicates the session you are currently using
Terminal window
GET /v1/orgs/{org_id}/security/sessions?user_id={user_id}

Host: https://api.arbitex.ai

Terminal window
curl -H "Authorization: Bearer $TOKEN" \
"https://api.arbitex.ai/v1/orgs/{org_id}/security/sessions?user_id=me"
{
"sessions": [
{
"session_id": "sess_01DEF456",
"user_id": "usr_alice",
"created_at": "2026-03-13T08:00:00Z",
"last_activity_at": "2026-03-13T10:15:00Z",
"source_ip": "203.0.113.42",
"location": {
"city": "San Francisco",
"country": "US"
},
"device": {
"name": "Chrome",
"app": "Chrome 122",
"os": "macOS",
"user_agent": "Mozilla/5.0 ..."
},
"is_current": true
}
],
"current_session_id": "sess_01DEF456"
}

Cloud Portal:

  1. Find the session in the Active Sessions panel.
  2. Click Revoke on the row.
  3. Confirm the revocation dialog.

The session is invalidated immediately. Any in-flight requests using that session token will receive 401 Unauthorized. The event is logged as auth.session_force_logout.

You cannot revoke your current session from the UI; use Sign Out instead.

API:

Terminal window
# Revoke a single session
DELETE /v1/orgs/{org_id}/security/sessions/{session_id}
Terminal window
curl -X DELETE \
-H "Authorization: Bearer $TOKEN" \
"https://api.arbitex.ai/v1/orgs/{org_id}/security/sessions/sess_01DEF456"

Returns 204 No Content on success.


Each event and session record includes device information parsed from the HTTP User-Agent header at the time of authentication:

FieldDescription
device.nameBrowser or application name (Chrome, Firefox, Safari, Edge)
device.appBrowser name and major version
device.osOperating system (Windows, macOS, Linux, iOS, Android)
device.user_agentRaw User-Agent string (visible in expanded event row)

Arbitex does not install tracking software or use browser fingerprinting beyond the standard User-Agent string.

Every authentication event is enriched with geographic location data using the MaxMind GeoLite2 database:

FieldDescription
location.cityCity name (best-effort; may be absent for some IPs)
location.countryISO 3166-1 alpha-2 country code
anonymous_ip.ispInternet service provider for the source IP
anonymous_ip.is_vpnTrue if the IP is a known VPN exit node
anonymous_ip.is_proxyTrue if the IP is a known open proxy
anonymous_ip.is_torTrue if the IP is a Tor exit node
anonymous_ip.is_hostingTrue if the IP belongs to a hosting or cloud provider

Accuracy notes:

  • City-level accuracy is approximately 80% for covered IPs.
  • Private, RFC 1918, and CGNAT addresses resolve to an empty location.
  • GeoIP data is best-effort and should not be used as a sole indicator for access control decisions.

Air-gap deployments:

Outpost deployments with OUTPOST_AIRGAP=true use the bundled MMDB fallback (/etc/arbitex/geoip/GeoLite2-City.mmdb). Events still receive GeoIP enrichment; however, the database may lag the current MaxMind release. Update the MMDB file manually as part of routine air-gap media refreshes.


Administrators with the admin or security_auditor role can view and manage security events for any user in the organization.

Navigate to Admin → Users → [User] → Security Events.

The admin view provides the same event timeline and filter controls as the user self-service view, plus:

  • All event types across all 12 categories
  • Export — download events as CSV for audit evidence
  • Force Logout — terminate all active sessions for the selected user
Terminal window
# List auth events for a specific user
curl -H "Authorization: Bearer $ADMIN_TOKEN" \
"https://api.arbitex.ai/v1/orgs/{org_id}/security/events?user_id={user_id}&limit=50"
# List all active sessions for a user
curl -H "Authorization: Bearer $ADMIN_TOKEN" \
"https://api.arbitex.ai/v1/orgs/{org_id}/security/sessions?user_id={user_id}"
# Force-logout all sessions for a user
curl -X DELETE \
-H "Authorization: Bearer $ADMIN_TOKEN" \
"https://api.arbitex.ai/v1/orgs/{org_id}/security/users/{user_id}/sessions"

Returns 204 No Content on successful session revocation.

The admin sessions view shows all active sessions across the organization.

Admins can:

  • Search by user email or IP address
  • Filter by session age or location country
  • Revoke individual sessionsDELETE /v1/orgs/{org_id}/security/sessions/{session_id}
  • Revoke all sessions for a userDELETE /v1/orgs/{org_id}/security/users/{user_id}/sessions

All force-logout actions are logged as auth.session_force_logout with the admin’s identity as the actor and the target session ID in the event metadata.


The Account Security Monitor does not send automated alerts by default. To configure alerts on suspicious auth events (e.g., auth.login_failed spikes, logins from new countries), route audit events to your SIEM and define alert rules there.

See SIEM Integration Guide for connector configuration.


Auth event records follow the standard audit log retention policy:

  • Hot (searchable): 90 days
  • Archive: 2 years (compliance export)

Events older than 90 days are available via the compliance export API. See Compliance Audit Evidence Guide.