List sessions, cursor-paginated
VIEWER+. Scoped to the caller's active org. Filters: `?search=` (matches `externalId`, case-insensitive), `?projectIds=id1,id2`, `?range=` preset (`today` / `7d` / `30d` / `all`), `?sort=date|duration`, `?sortDir=asc|desc`. Display name is resolved server-side via the 4-step chain.
/api/sessionsVIEWER+. Scoped to the caller's active org. Filters: ?search= (matches externalId, case-insensitive), ?projectIds=id1,id2, ?range= preset (today / 7d / 30d / all), ?sort=date|duration, ?sortDir=asc|desc. Display name is resolved server-side via the 4-step chain.
Query Parameters
"today" | "retention""date" | "duration""desc" | "asc"1 <= value <= 100Response Body
application/json
curl -X GET "https://loading/api/sessions"{
"data": [
{
"id": "ses_p1q2r3s4",
"externalId": "9b2e1d4c-6a3f-4f8e-9b1d-2c8a4e6f7a90",
"projectId": "prj_x9y8z7w6",
"projectName": "Production",
"url": "https://your-app.com/checkout",
"duration": 184320,
"eventCount": 1247,
"createdAt": "2026-04-26T10:30:00.000Z",
"trackedUserId": "tu_t5u6v7w8",
"userId": "usr_abc123",
"userDisplayName": "alex@your-app.com",
"userTraits": {
"plan": "pro",
"email": "alex@your-app.com"
}
}
],
"nextCursor": "eyJjcmVhdGVkQXQiOiIyMDI2LTA0LTI2VDEwOjMwOjAwLjAwMFoifQ=="
}Revoke a pending invite DELETE
OWNER-only. Hard-delete (not a status flip) so the refresh-or-create path on `POST` keeps its idempotency without filtering revoked rows.
Full session detail for the replay page GET
VIEWER+ of the owning org. Returns metadata + the full marker list (timeline anchors). Event stream is loaded separately via the `/events` sibling endpoint as gzip-compressed batches.