Skip to content

Get full event timeline for a single RUM session.

GET
/rum/{app_id}/sessions/{session_id}
curl --request GET \
--url https://api.siteqwality.com/rum/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/sessions/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0 \
--header 'Authorization: Bearer <token>'
app_id
required
string format: uuid

RUM application identifier

session_id
required
string format: uuid

Session identifier

Session detail

Media type application/json
object
session
required
object
session_id
required
string
user_id
string | null
user_email
string | null
browser
required
string
os
required
string
country
required
string
device_type
required
string
first_seen
required
string
last_seen
required
string
view_count
required
integer format: int64
error_count
required
integer format: int64
rage_click_count
required

Frustration signals the SDK detects on click actions and stores in rum_events.frustration. Always present, never null: a session with none reports 0.

serde(default) is deserialization-side robustness only, so a ClickHouse row missing the key cannot make parse_lines drop the whole session (it swallows parse errors with filter_map(...ok())). The serializer always emits these, so schema(required = true) keeps the generated OpenAPI honest: without it utoipa infers optional from the serde default and the published contract disagrees with the real one, while the sibling view_count / error_count stay required.

integer format: int64
dead_click_count
required
integer format: int64
error_click_count
required
integer format: int64
action_count
required

Total user actions in the session, summed from rum_measures.

Reads 0 for every session recorded so far: the browser SDK hardcodes action_count: 0 on the measures it emits. See the caveat on build_rum_sessions_list_query in common/src/db/rum_analytics.rs. Not rendered anywhere in the dashboard for that reason.

integer format: int64
has_replay
required
boolean
events
required
Array<object>
object
event_id
required
string
session_id
required
string
view_id
required
string
timestamp
required
string
type
required
string
url
required
string
resource_type
string | null
resource_url
string | null
duration_ms
number | null format: double
transfer_size
integer | null format: int64
error_message
string | null
error_source
string | null
error_stack
string | null
error_fingerprint
string | null
action_type
string | null
action_target
string | null
frustration
string | null
long_task_duration_ms
number | null format: double
user_id
string | null
user_email
string | null
Example generated
{
"session": {
"session_id": "example",
"user_id": "example",
"user_email": "example",
"browser": "example",
"os": "example",
"country": "example",
"device_type": "example",
"first_seen": "example",
"last_seen": "example",
"view_count": 1,
"error_count": 1,
"rage_click_count": 1,
"dead_click_count": 1,
"error_click_count": 1,
"action_count": 1,
"has_replay": true
},
"events": [
{
"event_id": "example",
"session_id": "example",
"view_id": "example",
"timestamp": "example",
"type": "example",
"url": "example",
"resource_type": "example",
"resource_url": "example",
"duration_ms": 1,
"transfer_size": 1,
"error_message": "example",
"error_source": "example",
"error_stack": "example",
"error_fingerprint": "example",
"action_type": "example",
"action_target": "example",
"frustration": "example",
"long_task_duration_ms": 1,
"user_id": "example",
"user_email": "example"
}
]
}

Missing or invalid authentication

Session not found

Internal server error