Skip to main content

Documentation Index

Fetch the complete documentation index at: https://jam.dev/docs/llms.txt

Use this file to discover all available pages before exploring further.

Auto-blur hides sensitive content in real time during Recording Link sessions. Blurred content never reaches Jam’s servers.

How it works

The Jam.js snippet automatically detects and blurs sensitive content during recording sessions. When a customer records:
  1. Sensitive elements are blurred in real time. If an end-user needs to access blurred content, they can pause the recording.
  2. Only the blurred version is captured. Sensitive data never reaches Jam’s servers.
  3. The final Jam shows blurred content exactly as during recording. Console logs show <redacted>.
What gets blurred: only the elements you want Applies to: Jams requested via Intercom or Recording Link
By default, Jam recognizes the same privacy selectors used by FullStory, Hotjar, LogRocket, Sentry, and others. If you’re already using these tools, your existing privacy setup works automatically with Jam.

Setup

Blurred content is only supported on sites with verified Jam.js installations. Follow the Recording Links setup guide before proceeding.
Blurring is enabled by default once the snippet is installed.

Quickstart

Want to blur something?

Use data attributes:
<span data-jam-blur>{ccNumber}</span>
Or meta tag:
<meta name="jam:blur" content=".secret-stuff" />
Or SDK:
jam.initialize({ blurSelectors: ".secret-stuff" });

Want to unblur something?

<span class="cc-number" data-jam-blur="no">{ccNumber}</span>

What gets blurred automatically

Standard selectors

  • Jam: [data-jam-blur]
  • rrweb: .rr-block, .rr-mask, .rr-ignore
  • Standard HTML autocomplete attributes: cc-number, cc-exp, cc-csc, tel, email
  • Common name/id patterns for SSN, bank accounts, credit cards, photo IDs, driver’s license

Session replay tools

  • FullStory: .fs-exclude, .fs-mask, .fs-block, .fs-unmask (unblur)
  • Hotjar: [data-hj-suppress], [data-hj-masked]
  • LogRocket: [data-private]
  • Microsoft Clarity: [data-clarity-mask], [data-clarity-unmask] (unblur)
  • Sentry: .sentry-block, .sentry-mask, [data-sentry-block], [data-sentry-mask]
  • OpenReplay: [data-openreplay-obscured], [data-openreplay-hidden]
  • Highlight.io: .highlight-block, .highlight-mask, .highlight-ignore
  • ContentSquare: [data-cs-mask], [data-cs-encrypt], [data-cs-capture] (unblur)
  • Matomo: [data-matomo-mask]

Analytics tools

  • Heap: [data-heap-redact-text], [data-heap-redact-attributes], [data-heap-ignore], .heap-ignore
  • Amplitude: [data-amp-mask], [data-amp-unmask] (unblur)

Add custom selectors

Using SDK

import * as jam from "@jam.dev/recording-links/sdk";

jam.initialize({ blurSelectors: ".my-custom-blur-class" });

// or array
jam.initialize({ blurSelectors: [".blur-class-1", ".blur-class-2"] });

// or function
jam.initialize({ blurSelectors: () => `.my-${Math.ceil(Math.random() * 100)}-blur-class` });

Using script tag with meta tags

<meta name="jam:blur" content=".my-custom-blur-class" />

Opt out of blurring for specific elements

Use [data-jam-blur="no"]:
<div class="rr-block" data-jam-blur="no">Blurred in rrweb, but not in Jam</div>

Test before you ship

1

Create a Recording Link

Create a Recording Link using your verified recording URL.
2

Start a test recording

Click your own link and start recording.
3

Visit pages with sensitive content

Navigate to pages that should be blurred and confirm the behavior.

Limitations

  • Content in iframes cannot be selectively blurred
  • Flashes of unblurred content may occur during captured pageloads
  • When browser window is resized during recording, blurred content may briefly become visible