A replay event is one chunk (segment) of a session recording. A full replay is the ordered sequence of segments that share a replayId; the dashboard stitches them back together and plays them alongside the exception they're linked to. Browser only.
Where it comes from
ReplayIntegration records the page with rrweb and sends a segment every flushInterval ms (default 5 s) or once maxSegmentEvents (default 300) have piled up — but only while the session is actually recording:
- a
sessionSampleRateshare of sessions (default 10%) records from the start; - the rest keep a short in-memory buffer and start uploading only when an exception is captured (
onErrorSampleRate, default 100%), so you still get the moments leading up to the error.
Payload
json
{
"type": "replay",
"timestamp": "2026-09-24T10:15:07.000Z",
"tags": {},
"contexts": { "replay.id": "0f6a…" },
"payload": {
"replayId": "0f6a…",
"segmentId": 3,
"events": [ { "type": 3, "data": { … }, "timestamp": 1790244907000 } ]
}
}| Field | Type | Description |
|---|---|---|
replayId | string | The recording this segment belongs to — one per page load. |
segmentId | number | Position of this segment in the recording, starting at 0. |
events | array | Raw rrweb events (DOM snapshots, mutations, input, scroll, …). Their format is rrweb's, not Buglapse's. |
Linking to exceptions
The integration also sets the replay.id context on the client, so every other event from that page — in particular every exception — carries it. That's how an issue's event page finds the replay to show.
Privacy
Inputs are masked by default (maskAllInputs), and elements with the buglapse-block / buglapse-mask classes are excluded or masked before anything leaves the browser. See the integration page for the options.
Quota
Counts as one toward the monthly replay limit — per segment, not per recording.