Watch what happened before the error.
Session replay plays back the page, the clicks, the scrolling, the page changes and the failed requests from the minute before an error, right on the issue. It is opt-in, and every input is masked in the person’s browser before anything leaves it.
Part of production monitoring, on every plan.
Private by default
Replay is built so you can turn it on without a long privacy review.
Inputs masked in the browser
Inputs, textareas and dropdowns are masked before recording. Passwords keep no length.Your own markers
Adddata-checked-maskto hide text, ordata-checked-blockto leave an element out.No query strings
Page and link addresses are recorded without their query strings. Canvas and cross-origin iframes are never recorded.Your workspace only
No public links. Replays are deleted after your plan’s retention.
Records around errors, not every visit
- onErrorSampleRate decides how many error sessions keep their replay.
- sampleRate records a fraction of whole sessions from the start, when you want them.
- Each recording has a length and size cap per plan; past it the recorder stops quietly and your app never sees an error.
Script tag
<script src="https://getchecked.twelveai.app/sdk/checked.v1.min.js"
data-key="ck_pub_..."
data-replay="true"></script>npm (checkd-browser)
Checked.init({
key: "ck_pub_...",
replay: {
onErrorSampleRate: 1, // keep the last minute, upload it when an error happens
sampleRate: 0, // fraction of sessions recorded from the start
load: () => import("checkd-browser/replay"),
},
});Plays back on the issue
- A Replays page lists every recording, with filters for an issue, a release, a page address and whether anything went wrong.
- Each replay links to the issues it belongs to, and each issue to its replays.
- Browser, system, device, viewport and release on every replay.
Turn a real session into a test
Questions people ask
What replay records, what it never records, and who can see it.
Is session replay on by default?
No. It stays off until you add data-replay="true" to the script tag or pass replay to Checked.init. It loads as a separate script, so pages without replay never download the recorder.
What gets masked?
Every input, textarea and dropdown is masked in the browser before anything is recorded, and passwords show a fixed mask so not even their length is kept. Add data-checked-mask to hide the text inside an element, data-checked-block to leave an element out entirely, or turn on maskAllText.
What is never recorded?
Typed values, canvas, cross-origin iframes, query strings in page and link addresses, and nothing at all when the browser has Do Not Track or Global Privacy Control turned on.
Does it record every visit?
By default it records around errors only: the browser keeps the last minute in memory and uploads it when an error or failed request is captured, then keeps recording the rest of that visit. You can also record a fraction of whole sessions with sampleRate.
Who can watch a replay?
Members of your workspace only. Replays have no public links and are deleted after your plan’s replay retention period.
Which plans include it?
Every plan, including Free. Paid plans keep more replays for longer. Saving a replay as a journey needs a plan with journeys (Starter, Business or Team).
Works with the rest of Check’d
- Production monitoringErrors, failed requests and slow pages from real users, in one inbox with your test findings.
- AI explain and fixA plain-English cause and fix for any issue, then a pull request you review.
- Import from any docs linkSwagger UI, Redoc, Postman, ReadMe, Mintlify and more, or a file.
- JourneysRecord a journey once in the browser and replay it on every release.
- For developersThe checked CLI, the MCP server and the SDKs, open source on npm.
Turn on replay in one attribute
Add the SDK, set data-replay, and the next error comes with its replay. No card needed.