REST API
Session replay
List, play back, and delete session replays — recorded rrweb event streams of a visitor's session — for one of the current team's sites. A site is addressed by {siteKey} (UUID or domain). All endpoints require Authorization: Bearer {token}. See Conventions for the base URL, headers, and date-range conventions shared by every endpoint.
A session only appears in this API once it has a full rrweb snapshot and at least 2 recorded events — a single-event session has nothing worth playing back.
List replays
GET /api/sites/{siteKey}/replays
Paginated — the standard data/meta/links envelope (see Response envelope), at a fixed internal page size of 20. Advance with ?page=; there is no per_page parameter for this endpoint.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
siteKey |
string | Yes | Site UUID or domain. |
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
range |
string | No | Preset date range (see Date ranges). Default today. |
from |
string | No | Custom range start, Y-m-d. Requires to. |
to |
string | No | Custom range end, Y-m-d. Requires from. |
min_duration |
int | No | Minimum session duration in seconds, 0–86400. Default 30. |
page |
int | No | Page number (fixed 20-per-page). Default 1. |
Only a subset of the shared dashboard filters apply to this list, because replay metadata only carries a session's last-seen dimensions: path (substring match on the recorded page URL), country, browser, os, and device/size. Any other filter key (e.g. referrer, goal) is silently ignored here.
Response — each item in data:
| Field | Type | Description |
|---|---|---|
session_id |
string (uuid) | Session id. |
visitor_id |
string (uuid) | Visitor id. |
identified_user_id |
string | Identified user id, or "" when the visitor was never identified. |
display_name |
string | Human-readable label for the session's visitor/user. |
page_url |
string | The page the recording started on. |
country / region / city |
string | Location. |
browser / browser_version |
string | Browser and version. |
os / os_version |
string | Operating system and version. |
device |
string | Device kind. |
language |
string | Browser language. |
event_count |
int | Number of recorded rrweb events. |
duration_seconds |
int | Session duration, floored to whole seconds. |
start_time / end_time |
string (ISO 8601) | Recording start/end. |
Status: 200 OK.
curl "https://clickbase.so/api/sites/example.com/replays?min_duration=30" \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"
await fetch('https://clickbase.so/api/sites/example.com/replays?min_duration=30', { headers: { Authorization: `Bearer ${token}`, Accept: 'application/json' } })
requests.get('https://clickbase.so/api/sites/example.com/replays', params={'min_duration': 30}, headers={'Authorization': f'Bearer {token}', 'Accept':'application/json'})
Get a replay
GET /api/sites/{siteKey}/replays/{sessionId}
Metadata plus the full hydrated rrweb event stream for one session's player.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
siteKey |
string | Yes | Site UUID or domain. |
sessionId |
string (uuid) | Yes | Session id. Unknown or non-UUID returns 404. |
Response — a flat object:
| Field | Type | Description |
|---|---|---|
metadata |
object | Same fields as a list row, plus hostname. |
events |
array | Ordered rrweb events: { type, timestamp, data } — type is the rrweb event type (0–6), timestamp is a millisecond epoch, data is the rrweb event payload. |
Status: 200 OK. A foreign/unknown sessionId returns 404 Not Found.
curl "https://clickbase.so/api/sites/example.com/replays/{sessionId}" \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"
await fetch(`https://clickbase.so/api/sites/example.com/replays/${sessionId}`, { headers: { Authorization: `Bearer ${token}`, Accept: 'application/json' } })
requests.get(f'https://clickbase.so/api/sites/example.com/replays/{session_id}', headers={'Authorization': f'Bearer {token}', 'Accept':'application/json'})
Delete a replay
DELETE /api/sites/{siteKey}/replays/{sessionId}
Permanently delete a session replay — its recorded event blobs and all ClickHouse rows. Cannot be undone; there is no soft-delete or TTL for replays.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
siteKey |
string | Yes | Site UUID or domain. |
sessionId |
string (uuid) | Yes | Session id. Unknown or non-UUID returns 404. |
Status: 204 No Content. A foreign/unknown sessionId returns 404 Not Found.
curl -X DELETE "https://clickbase.so/api/sites/example.com/replays/{sessionId}" \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"
await fetch(`https://clickbase.so/api/sites/example.com/replays/${sessionId}`, { method: 'DELETE', headers: { Authorization: `Bearer ${token}`, Accept: 'application/json' } })
requests.delete(f'https://clickbase.so/api/sites/example.com/replays/{session_id}', headers={'Authorization': f'Bearer {token}', 'Accept':'application/json'})
Enable session replay
POST /api/sites/{siteKey}/replays/enable
Route name: api.sites.replays.enable. Turns on track_session_replay for the site so the tracker starts recording new sessions. This is the only replay-specific enable toggle; see Tracking configuration for the Web Vitals and error-tracking equivalents and for the response fields shared by all three.
Response — the updated site (SiteResource, same shape as Sites, including track_session_replay: true). Status: 200 OK.
curl -X POST "https://clickbase.so/api/sites/example.com/replays/enable" \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"
await fetch('https://clickbase.so/api/sites/example.com/replays/enable', { method: 'POST', headers: { Authorization: `Bearer ${token}`, Accept: 'application/json' } })
requests.post('https://clickbase.so/api/sites/example.com/replays/enable', headers={'Authorization': f'Bearer {token}', 'Accept':'application/json'})