Stream the rrweb recording and narration events used by the replay player
Returns the ordered player event rows for one task, test run, exploration, or Replay recording. The stream contains rrweb DOM events plus the thought, note, error, and system events shown as replay subtitles. It excludes injected diagnostic streams such as network-exchange and layout-geometry.
Rendering the rrweb stream
- Fetch pages in order. When next_cursor is non-null, make the same request again with its after_task_id and after_seq; stop when next_cursor is null.
- Reassemble rrweb-chunk rows before rendering. Each chunk payload is { chunk_id, index, total, data }. Group by chunk_id, order all total pieces by index, concatenate data, and JSON.parse the result. Treat the completed row as event_type: "rrweb". Keep the incomplete-chunk map across page requests because one event can span pages.
- Select rows whose event_type is rrweb, in their returned order, and pass their payload values to rrweb. The array must include rrweb Meta and FullSnapshot events before it can render:
import { Replayer } from 'rrweb'
import 'rrweb/dist/style.css'
const events = joinedRows.filter(row => row.event_type === 'rrweb').map(row => row.payload)
const replayer = new Replayer(events, { root: document.querySelector("#replay") })
replayer.play()
For a recording that is still running, retain the Replayer and call replayer.addEvent(row.payload) for new rrweb rows instead of rebuilding it. Sort by payload.timestamp only if events were accumulated from multiple live polls that may have arrived out of timestamp order.
Rendering narration
thought, note, error, and system rows are subtitles, not rrweb events. Use client_ts as the subtitle timestamp, falling back to Date.parse(created_at) when it is null. Their text is normally in payload.text or payload.message; note payloads with kind: "step" also carry the action and step index.
Request
- Base URL: https://qa.replay.io
- URL: https://qa.replay.io/api/v1/projects/{project_id}/recording-events
- Auth: HTTP bearer
Path parameters
Query parameters
Exactly one source identifier is required.
Exactly one source identifier is required.
Exactly one source identifier is required.
Exactly one source identifier is required.
Opaque task cursor returned by next_cursor.
Sequence cursor returned by next_cursor.
Response
A byte-bounded page containing events and next_cursor.
Changes
No recorded changes to this operation across all 1 revision of this API.