Skip to content

List user sessions for a RUM application.

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

A listed session has a measure in [from, to] and a page view in its extended range. Each session is summarized over its whole lifetime, so duration_ms, first_seen and last_seen are never clipped by the range. total and total_with_replay count every session matching the query exactly. Page with next_cursor; the cursor keeps the first page’s range, so new sessions never shift later pages. Filters use the RUM filter grammar in f; the older single-filter parameters still work and combine with them. Filtering on console_message needs body access; without it, error_message and search skip errors captured from the console.

app_id
required
string format: uuid

RUM application identifier

from
string

ISO 8601. Sessions active in [from, to] are listed. Default: 30 days before to.

to
string

ISO 8601. Default: now.

search
string

Case-insensitive match on any user id or email the session carried, a session id prefix, any visited URL or any error message in the session.

browser
string

Same as f=browser:eq:<value>.

os
string

Same as f=os:eq:<value>.

country
string

ISO 3166-1 alpha-2 code. Same as f=country:eq:<value>.

device_type
string

Same as f=device:eq:<value>.

url
string

Case-insensitive substring of any URL the session visited. Same as f=url:contains:<value>.

error_fingerprint
string

Only sessions with an error event in this group. Same as f=error_issue:eq:<value>.

has_error
boolean

true keeps sessions with at least one error event.

has_replay
boolean

true keeps sessions with a replay that can still be played.

has_frustration
boolean

true keeps sessions carrying at least one frustration signal (rage, dead or error click). false and absent mean no filter.

sort
string

started (default), duration, active_time, errors, frustration (the score), friction (rage, dead and error clicks) or pages.

order
string

desc (default) or asc.

limit
integer format: int32

Page size, default 50, at most 100.

offset
integer format: int32

Rows to skip, at most 10,000. Prefer cursor; the two cannot be combined.

f
Array<string>

Filters in the RUM filter grammar, <field>:<op>[:<value>], repeatable, at most 20. All must hold. See the RUM reference for the fields and operators.

cursor
string

next_cursor of the previous page. The query must otherwise be the same; from and to may be left out, and then come from the cursor.

cohort
string

Opaque analytics cohort from a returned session_query. Keeps exact view membership.

Sessions

Media type application/json
object
sessions
required
Array<object>
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

Earliest measure, event or replay segment of the session.

string
last_seen
required

Latest measure, event or replay segment of the session.

string
view_count
required
integer format: int64
error_count
required

Error events in the session.

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. 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.

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 sessions recorded by SDKs that hardcode action_count: 0 on their measures. Not rendered in the dashboard for that reason.

integer format: int64
has_replay
required
boolean
duration_ms
required

last_seen minus first_seen, over the session’s whole lifetime.

integer format: int64
entry_url
required

URL of the session’s first page view.

string
live
required

Activity in the last 2 minutes.

boolean
active_ms
required

Time the user was active (input, visible tab); 0 when the SDK reported none.

integer format: int64
failed_request_count
required

Requests with status 0 or 400 and above.

integer format: int64
console_error_count
required
integer format: int64
frustration_score
required

0 to 100: round(100 * (1 - exp(-(3 * rage + 2 * error clicks + dead + 2 * errors + failed requests) / 10))). The inputs are the counts on this row.

integer format: int32
anonymous_id
string | null
entry_route
required

Route of the first page view; empty when unknown.

string
exit_url

URL of the last page view.

string | null
region
string | null
release
string | null
env
string | null
service
string | null
sdk_version
string | null
replay_reason

Why there is no replay: expired (past the replay retention), or the SDK’s reason: not_sampled, consent, gpc, opted_out, privacy_url, too_large, request_budget. Absent when there is a replay or no reason is known.

string | null
replay_bytes

Stored replay size, when has_replay.

integer | null format: int64
window_count
required

Browser tabs the session used; 0 when the SDK sent no window.

integer format: int64
viewed_by_me
required

The caller watched this session’s replay in the last 90 days.

boolean
total
required

Every session matching the query, exact.

integer format: int64
total_with_replay
required

Sessions in total with a replay that can still be played.

integer format: int64
next_cursor

Pass as cursor for the next page; absent on the last page.

string | null
Example generated
{
"sessions": [
{
"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,
"duration_ms": 1,
"entry_url": "example",
"live": true,
"active_ms": 1,
"failed_request_count": 1,
"console_error_count": 1,
"frustration_score": 1,
"anonymous_id": "example",
"entry_route": "example",
"exit_url": "example",
"region": "example",
"release": "example",
"env": "example",
"service": "example",
"sdk_version": "example",
"replay_reason": "example",
"replay_bytes": 1,
"window_count": 1,
"viewed_by_me": true
}
],
"total": 1,
"total_with_replay": 1,
"next_cursor": "example"
}

Invalid query parameter or cursor

Missing or invalid authentication

A filter on console messages without body access

Application not found

Internal server error

Query time limit exceeded; narrow the range or filters