Security & privacy

Built for the questions your security team will ask

Who can see what, what the snippet never collects, what the AI is allowed to see and do, and where the data lives.

Tenancy

Isolation enforced twice

Organisation on every row

Every query is scoped to the caller’s organisation in code; a guessed id from another organisation answers 404.

Row-level security underneath

Postgres row-level security enforces the same boundary. Each request’s session is pinned to the caller’s organisation, and the API connects as an ordinary role so the policy binds.

ClickHouse, too

ClickHouse has no row-level security, so the engine refuses any statement without the organisation predicate, and tests assert it on every generated statement. The console uses a read-only user.

Identity

Your sign-in, roles and an audit trail

ControlDetail
Sign-inThe Insight platform identity: OIDC with your identity provider, or local accounts
Rolesadmin (projects, keys, users), analyst (dashboards, reports, segments, alerts, agents), viewer (read), auditor (audit trail)
API keysPersonal API keys for scripts and MCP clients; they carry the person’s role
Write toolsAgent and MCP tools that create dashboards, segments, annotations or alerts, or start investigations, need an editor
Write keysThe snippet’s key can only send events. Allowed origins per project reject other sites (403); keys can be rotated
Collection

What the snippet never collects

NeverHow
Form valuesInputs, textareas and selects are never read; form analytics sends timings, counts and a length bucket only
Passwords and card dataPassword fields and autocomplete="cc-*" or card-like fields are skipped entirely
Masked text[data-private] text is sent as **** and masked in replay
Blocked regions[data-clickiq-block] sends no events and is not recorded
Replay inputsEvery input is masked in recordings by default
Native replayText inputs, password fields, web views and private views are painted black on the device before a frame is encoded (React Native: by the server before storage); the server refuses an unmasked frame
Prompts of your own AI agentsAgent analytics drops prompt and response text unless both the SDK and the project opt in
IP addressesUsed for the geo lookup and never stored
Without consentclickiq("consent", false) stops everything and clears the queue, ids, cookie and recording; Do Not Track and Global Privacy Control can be honoured per project
AI boundaries

What the model sees, and what it cannot do

No SQL from the model

The model plans typed QuerySpecs against your catalog; the engine validates and runs them under the caller’s tenancy. It cannot query what the caller could not.

Compacted results only

Insights and narratives see computed numbers, not raw events. Session summaries read the event timeline, not the recording, so masked content never reaches the model.

Checked output

Finding kinds, console links, selectors and replay evidence are checked against the data; anything that does not match is dropped or the rules answer is used.

Your provider

Bedrock, Azure OpenAI, Vertex, OCI or an OpenAI-compatible endpoint in your own account.

Or no model

With the model switched off, every AI surface answers by rules, labelled as such.

Bounded agents

Agents have a step and time budget, call only registry tools, and record every call for review.

Survey text redacted

Before open-text survey answers reach the model, emails and phone numbers are removed and each answer is cut to 500 characters. Agent tools get counts and themes, never the raw answers.

Statistics before words

An experiment readout sees only computed numbers; a verdict that would ship on a sample-ratio mismatch is replaced by the rules.

Public reads never call it

A shared replay shows the cached AI summary; no public request reaches the model.

Sharing and outbound

Links you control, requests that cannot be turned inward

ControlDetail
Share linksOne resource per link (a replay, report, dashboard or investigation) with the scopes you choose: replay, comments, AI summary. Expiry 1–90 days; revocable; views counted. Only editors create them
Link tokens32 random bytes, shown once; only a SHA-256 hash is stored. Revoked or expired links answer 410; unknown ones 404
Public readsRate-limited per token and per client; each read runs on a database session pinned to the link’s organisation, so row-level security stops even a forged link row. A shared session includes no person record
Webhooks and export endpointshttp(s) only; loopback, private, link-local, CGNAT, cloud metadata and IPv4-mapped addresses are refused. DNS is resolved when the hook is saved and again when it is sent, every answer is checked, the request connects to the checked address, and redirects are not followed
Tokens in logsThe live stream, agent-run stream and PDF routes accept the token in the URL because browsers cannot set headers there; the API’s logs redact token=. Strip it in any proxy log in front of it too
CommentsOnly people in the organisation can read or write them; mentions resolve only to active members of the organisation
Data

Residency, retention and erasure

DeploymentYour cloud account or data centre: AWS, Azure, GCP, OCI or on-premises
ResidencyOne database and bucket per region; a Postgres is never shared across regions
EncryptionTLS required to the database; encryption at rest from the managed services; secrets resolved from your secret manager
RetentionPer project, enforced daily: whole monthly partitions dropped, the rest deleted in batches, replays and their objects removed
ErasureOne call removes a person: every id they used, their sessions, events and replay objects (in ClickHouse too); another removes a single session
SamplingOptional per project: whole sessions are kept or dropped on the device by a hash of the session id, so a dropped session sends nothing at all, replay included
Warehouse exportOnly to a destination an editor configures in your own cloud; the destination is probed before use, and file:// destinations can be turned off

Send us your security questionnaire

We answer it against the product as it ships, with the configuration that applies to your deployment.

Contact us