How we protect customer credentials, control AI data flow, and isolate tenant data. For the deep technical reference see docs/SECURITY.md in the codebase, or request the full security whitepaper.
Every site credential, API token, TOTP seed, and captured session cookie is sealed with per-tenant envelope encryption:
v2:<keyId>:…), so keys can be rotated without re-reading every row.LLM calls are an obvious egress point. Each organization controls, from its settings page:
Defaults preserve current behavior; enterprises opt into the stricter posture without changing any application code.
Every table enforces Postgres Row Level Security. Users see only their own rows, or rows belonging to an organization they are a member of. Organization membership has four roles (owner, admin, member, viewer); org-scoped policies are additive on top of personal-ownership policies.
The service role (which bypasses RLS) is confined to server-side code that genuinely needs it — e.g. decrypting credentials at the moment a run launches.
Customers choose how Bacheon authenticates into their portals. We never need — and for SSO/MFA sites never receive — the customer's primary password:
Each customer can configure retention windows. Defaults:
A scheduled job enforces these windows; expired data is hard deleted.
| Provider | Purpose | Data exposed |
|---|---|---|
| Supabase (AWS) | Postgres database, auth, object storage | All persisted data, gated by RLS |
| Vercel | Application hosting | Data in transit during request handling |
| Google Cloud KMS | Key-encryption-key for credential envelope encryption | Wrapped data-encryption keys only — never plaintext |
| Steel | Remote browser execution | Site credentials/sessions, page contents during a run |
| OpenAI | LLM inference (chat default, tools) | Prompt content — page text, metrics (subject to PII redaction) |
| Anthropic | LLM inference (agent default) | Prompt content — page text, metrics (subject to PII redaction) |
| Cohere (optional) | Retrieval reranking | Retrieved knowledge-base snippets (opt-out per org) |
| Braintrust (optional) | LLM observability | Prompt + response traces (opt-out per org) |
SOC 2 Type II is an audited attestation, not a feature: it requires an auditor to observe controls over a 6–12 month window. We do not hold one today. We operate as SOC 2-ready and the formal engagement is in progress.
GDPR — we sign a Data Processing Agreement with each customer, maintain the sub-processor list above, and honour data-subject deletion requests through the retention pipeline.
Zero-retention LLM terms — the chat path sets a 24-hour OpenAI prompt-cache window; longer retention with individual providers is governed by their enterprise terms, which we confirm before processing customer data through them.
Security questions or vulnerability reports?
Reach out to your account contact for the full security whitepaper, DPA, or coordinated-disclosure process. For security issues found in the platform, please email security@vxalabs.com.