- Element rules — CSS-selector rules that mask or exclude specific page elements.
- URL rules — scrub sensitive parts of captured URLs (host, path, query).
- Network rules — control whether request and response bodies are captured, redacted, or partially allowlisted.
Safety model
Two lifecycle models sit underneath these tools. Which one applies depends on the rule kind. Element rules use a two-tier scope. When your agent creates an element rule, it lands in preview scope first. Preview rules apply only to sessions opened in preview mode, leaving production capture untouched — so you can create, test, and delete them freely. A rule reaches production only when you promote it to live (all-sessions) scope, and live rules cannot be deleted through the agent tooling. This asymmetry lets the agent autonomously run the entire propose → create → promote cycle while a human retains final authority over what gets removed from production coverage. URL and network rules have no preview step.privacy-url-create and privacy-network-create take effect for all sessions immediately — there is no preview scope to validate in, nothing to promote, and (today) no MCP delete. Double-check the pattern before you create the rule, then confirm it with the matching -list tool afterward.
Element rules
privacy-propose
Scan a session for PII and propose masking rules as a dry-run.
privacy-propose is read-only. It inspects every page of a session, identifies elements that appear to contain personally identifiable information, and returns candidate CSS selectors with a suggested rule name and PII type for each. Nothing is written to Subtext.
Key behaviors:
- Takes a
session_url. All pages in the session are analyzed and results are deduplicated across them. - Returns candidate selectors, not finalized rules — you decide which to act on.
- Optional
block_type(mask, the default, orexclude) sets the kind of rule suggested. - Charges 1 credit per call.
privacy-create to persist them.
privacy-create
Persist element-block rules from CSS selectors in preview scope.
privacy-create takes one or more selectors and writes them as rules scoped to preview sessions only. Matching elements are blocked in the replay viewer when a session is opened in preview mode, so you can verify behavior before rolling out broadly.
Key behaviors:
selectorsis a list of objects, each with aselectorand an optionalpii_typeused to name the rule.- Optional
block_type(mask, the default, orexclude). Unmask rules cannot be created here. - Rules do not affect production capture until explicitly promoted.
- Returns a rule ID for each created rule — save these for
privacy-promoteandprivacy-delete. - Works with selectors you wrote yourself, not just those from
privacy-propose.
Creating a preview rule does not modify previously recorded sessions. It only affects sessions captured after the rule is created and viewed in preview mode.
privacy-list
List element-block (privacy) rules.
privacy-list returns element rules across preview and live scopes. Use it to audit masking coverage, confirm a newly created rule is registered, identify promotion candidates, or spot redundant rules.
Key behaviors:
- Each entry includes the rule ID, selector, scope, and type.
scope_filternarrows results toprevieworall;type_filternarrows tomask,exclude, orunmask.- System-managed rules are hidden by default. Pass
include_system=trueto include them — these cannot be deleted or promoted. - Read-only.
privacy-promote
Promote preview rules to live scope so they apply to all sessions.
privacy-promote escalates one or more preview rules to production. After promotion, every new session your application captures masks elements matching the promoted selectors. The rule also becomes protected — it can no longer be deleted through the agent tooling.
Key behaviors:
rule_idsis a list, so you can promote several rules in one call.- Only
maskandexcluderules can be promoted;unmaskrules are rejected. - Promotion changes each rule’s scope to live in place — confirm the new scope with
privacy-list. - Promotion is immediate. Past recordings are not affected; masking applies to sessions captured afterward.
privacy-delete
Delete preview rules by ID.
privacy-delete removes preview rules permanently. Use it to discard selectors that turned out to be incorrect, overly broad, or no longer needed after a UI change. Only preview rules can be deleted — live rules are protected.
Key behaviors:
rule_idsis a list. Every ID must be preview-scoped; passing a live rule ID is rejected.- Deletion is immediate and irreversible for the rule record itself. You can always recreate a rule with the same selector.
- Does not affect previously captured sessions.
To remove a live rule, use the Privacy section of the Fullstory settings UI. This deliberate friction ensures production masking coverage is never reduced without a conscious manual action.
URL rules
URL rules scrub sensitive parts of captured URLs — a host, a path segment, or a query parameter’s value. They apply to all sessions the moment they’re created; there is no preview scope.privacy-url-list
List URL privacy rules.
Returns every URL rule and its condition and exclusions. Each rule has a guid — you’ll need it to update or reason about a rule. Read-only.
Example usage:
privacy-url-create
Create a URL privacy rule, or update one in place by passing its guid.
A rule has a name plus a condition (which URLs it applies to) and exclusions (which parts to redact). Cover the common case with the simplified fields; reach for advanced only when they can’t express the rule.
Key behaviors:
match_hostandmatch_pathare regexes forming the condition (AND’d together). Leave both empty for an unconditional rule that applies to every URL.exclude_query_paramsredacts the named query parameters’ values while leaving the keys visible.exclude_path/exclude_querytake a raw regex against the path or full query string — use a capture group to redact only part of the match.advancedis a structuredif/excludepattern set over host, path, query,query_param, and hash. It replaces the simplified fields entirely.- Goes live for all sessions immediately.
ssn query parameter’s value (not its key) on URLs whose host matches example\.com.
Updating a rule: pass the rule’s guid (from privacy-url-list) to replace it in place. Update is a full replace, not a merge — send the complete desired state (name, condition, exclusions), or omitted fields are lost.
Built-in rules — the default rule set created when privacy settings are first set up — cannot be updated this way.
Network rules
Network rules control whether the request and response bodies of network calls are captured, redacted, or partially allowlisted. Like URL rules, they apply to all sessions immediately and have no preview scope.privacy-network-list
List network privacy rules.
Returns every network rule, its url_regex, and how it handles request and response bodies. Read-only.
Example usage:
privacy-network-create
Create a network privacy rule, or update the existing rule for a url_regex by passing overwrite=true.
A rule matches network calls by url_regex and sets how their request and/or response bodies are handled.
Key behaviors:
request_bodyandresponse_bodyeach acceptelide(the default — redact the whole body) orwhitelist(keep only named fields).record(capture the full body) increases data capture and must be set up manually — it is rejected here.- When a body mode is
whitelist, list the field names to keep inrequest_allowlist_fields/response_allowlist_fields. - Rules are keyed by
url_regex— there is no separate rule ID. - Goes live for all sessions immediately.
order_id and status in the request body of matching /api/checkout/ calls and redacts everything else.
Updating a rule: creating a rule for a url_regex that already has one is a no-op by default. Pass overwrite=true to replace the existing rule instead of skipping it.

