WorkOS Events
WorkOS Events give you a single, chronological feed of everything happening across your WorkOS environment: authentication attempts, directory sync activity, SSO connection changes, organization and membership updates, role and permission changes, and more. RunReveal polls the WorkOS Events API and ingests every event type, giving security and compliance teams a durable audit trail and a foundation for detections on identity activity.

Setup
WorkOS Events are collected via API polling against the WorkOS Events API (GET /events).
- Go to Sources in RunReveal
- Click the WorkOS Events source tile
- Give it a name
- Fill in your API Key
- Optionally set an Organization ID Filter to scope ingestion to a single WorkOS organization. Leave it blank to ingest events across all organizations.
- Click Connect Source
API Key Configuration
Creating the API Key:
- Sign in to the WorkOS Dashboard
- Navigate to API Keys
- Create an API key (or reuse an existing one) with access to the Events API
- Copy the key — store it securely
The key is sent to WorkOS as a bearer credential in the Authorization header on every request.
The WorkOS Events API requires an explicit list of event types on every request — there is no catch-all. RunReveal always requests the full known set of WorkOS event types, so you automatically ingest everything WorkOS emits without configuring anything.
Collected Events
RunReveal stores the WorkOS event name (e.g. authentication.sso_succeeded, dsync.user.created, organization.updated) in the eventName field and normalizes the most useful fields across the different WorkOS event shapes. Event categories include:
- authentication — email verification, magic auth, MFA, OAuth, password, passkey, and SSO successes and failures
- dsync — directory sync activation, user and group lifecycle changes
- connection — SSO connection activation, deactivation, and certificate events
- organization / organization_membership / organization_domain — organization lifecycle and membership changes
- session — session creation and revocation
- user — user create, update, and delete
- role / permission / api_key / vault — and more
Event Data Structure
RunReveal normalizes the following from each event where present:
- Event Name — The WorkOS event type (
event), stored aseventName - Actor Information — Email, user id, and username (
actor.email,actor.id,actor.username) - Organization — The organization id (
woOrganizationID/tags.organization_id), including auth events that nest it underdata.sso.organization_id - Network Context — The client IP address (
srcIP) and user agent (tags.user_agent)
Data Collection
- Collection Method: API polling every minute
- Pagination: Cursor-based, walking forward in time with a high water mark on the last event id
- Backfill: On first connection RunReveal backfills the last 30 days of events (bounded per poll so a large backlog drains over multiple polls)
- Event Format: JSON with normalized fields for consistent querying
Verify It's Working
Once added the source logs should begin flowing within a few minutes.
You can validate we are receiving your logs by running the following SQL query.
Schema
The following columns are exposed for this source. RunReveal applies schema normalization across all sources, ensuring uniform field names and data types for cross-source queries and reusable detection logic.
Table: workos_events_logs (52 columns)
workos_events_logs (52 columns)| Column | Type |
|---|---|
workspaceID | String |
sourceID | String |
sourceType | String |
sourceTTL | UInt32 |
receivedAt | DateTime |
id | String |
eventTime | DateTime |
eventName | String |
eventID | String |
srcIP | String |
srcASCountryCode | String |
srcASNumber | UInt32 |
srcASOrganization | String |
srcCity | String |
srcConnectionType | String |
srcISP | String |
srcLatitude | Float64 |
srcLongitude | Float64 |
srcUserType | String |
dstIP | String |
dstASCountryCode | String |
dstASNumber | UInt32 |
dstASOrganization | String |
dstCity | String |
dstConnectionType | String |
dstISP | String |
| Column | Type |
|---|---|
dstLatitude | Float64 |
dstLongitude | Float64 |
dstUserType | String |
actor | Map(String, String) |
tags | Map(String, String) |
resources | Array(String) |
serviceName | String |
enrichments | Array(Tuple(data Map(String, String), name String, provider String, type String, value String)) |
readOnly | Bool |
rawLog | String |
woEventID | String |
woEventType | String |
woType | String |
woStatus | String |
woUserID | String |
woEmail | String |
woUsername | String |
woFirstName | String |
woLastName | String |
woOrganizationID | String |
woDirectoryID | String |
woConnectionID | String |
woIPAddress | String |
woUserAgent | String |
woErrorCode | String |
woErrorMessage | String |
Helpful Links
- WorkOS Events API - Reference for the Events API and pagination
- WorkOS Event Types - The full catalog of event types WorkOS emits
- WorkOS Dashboard - Manage API keys and configuration