We only use essential cookies and local storage required for authentication, preferences, and core functionality. We do not use analytics, advertising, or third-party tracking technologies. Privacy · Terms
Security

Your data, locked down at every layer.

We're not a broker. We don't hold your money, your card, or your broker password. We do hold your research, dashboards, and AI conversations — and we treat them like the keys to a vault.

Encryption
AES-256
at rest, TLS 1.2+ in transit
Database isolation
100%
Row Level Security on every table
Card data we hold
None
Stripe-only — PCI-DSS scope removed
Broker passwords
None
SnapTrade brokers the link
Defense in depth

Eight layers, one promise.

Each layer is independent — a failure in one doesn't compromise the rest. Every claim below maps to shipped code; we don't list controls we haven't built.

Account & authentication

Every account is hardened from sign-up. We verify a real human with phone OTP, fingerprint the device, and refuse known throwaway emails — before your row is ever created.

  • Phone OTP verification on signup (E.164, SMS via Supabase Auth)
  • Device fingerprint blocklist (UA + screen + canvas + timezone → SHA-256)
  • Server-side disposable-email rejection via Auth Hook
  • Phone + fingerprint blocklists outlive account deletion
  • OAuth (Google) supported — no password stored for SSO users
  • TOTP MFA available for any account, with QR enrollment

Sessions & access control

You can see every device that's signed in, where it is, and when it last touched the app. Revoking a session is one click — and we re-check session expiry every minute, with a five-minute warning before kick-out.

  • Multi-device session list with user-agent + last-active
  • One-click revoke per session (or revoke all)
  • Five-minute expiry warning toast before sign-out
  • Server-side session invalidation via dedicated edge function
  • Role-based access control (free / pro / pro_plus / admin)
  • Atomic per-user daily LLM token cap, race-safe at the database

Data isolation & encryption

Your dashboards, watchlists, AI conversations, and broker tokens are walled off at the database level. Even a bug in our app code can't return another user's row — Postgres enforces it for us.

  • Row Level Security on every table — no exceptions
  • TLS 1.2+ in transit (HSTS preloaded, two-year max-age)
  • AES-256 at rest (Supabase-managed; us-east-1)
  • SnapTrade per-user secrets encrypted at rest with AES-256
  • Application secrets only in server-side env vars — never in client bundles
  • No third-party analytics or trackers loaded by default

Infrastructure & abuse defense

Versatum runs on Vercel and Supabase — both SOC 2 Type II audited providers. We add a thick layer on top: strict CSP, anti-scraping rate limits, and a request firewall on every API.

  • Strict Content Security Policy — no inline scripts from unknown origins
  • X-Frame-Options DENY — clickjacking impossible
  • Cross-Origin-Opener-Policy + Cross-Origin-Resource-Policy isolation
  • Per-user 100 req/min rate limit on edge functions
  • Permissions-Policy disables camera, mic, geolocation, USB, payment, motion
  • X-Robots-Tag noindex on every API path

AI & prompt safety

The Copilot only sees the JSON of the widget you're focused on — not your account, balances, or unrelated data. We never train external models on your prompts.

  • Per-widget JSON-grounded prompts — no leakage across surfaces
  • BYO-LLM supported — point at your own private model (Pro+/Enterprise)
  • Conversation history is yours; deletable in one click
  • Vision LLM screenshots stay client-side until you send them
  • No prompt or conversation data is sold or shared with advertisers
  • LLM token cap prevents runaway cost and runaway prompts

Brokerage & money flow

Versatum is not a broker. We never custody your money or hold your broker password — SnapTrade brokers your link, Stripe processes your payment, and both speak directly to your bank without us in the middle.

  • SnapTrade integration — no broker passwords ever touch our server
  • Stripe Checkout for billing — no card data ever touches our server
  • PCI-DSS scope eliminated by design (we never see PANs)
  • Broker order tickets show full impact preview before you confirm
  • Per-account 1s rate limiter on live order placement
  • Connection-broken events surfaced — no silent stale balances

Privacy & data rights

You own your data. Export everything we hold on you in JSON in a single click, or delete the account and we hard-wipe every linked row — including upstream broker tokens.

  • GDPR Art. 15/17 self-service export (every artifact, structured JSON)
  • CCPA / CPRA compliance — no sale of personal information
  • Account delete is a hard-delete: cascade-wipes all linked rows
  • SnapTrade connection torn down in the same delete flow
  • Activity log retained 730 days; sessions ≤180 days
  • Standard Contractual Clauses for any non-US transfer

Monitoring & incident response

Auth events, abuse signals, and webhook failures are logged and watched. If something looks wrong, you'll know — and we'll know first.

  • Activity log captures logins, MFA changes, exports, deletes
  • Stripe webhooks signed with HMAC + verified server-side
  • SnapTrade webhooks verified before any state mutation
  • Sentry-ready error pipeline (CSP allow-list configured)
  • Past-due payment shows an in-app banner, never a silent lapse
  • Security report channel: security@versatum.ai
How a request travels

From your browser to your data — every checkpoint.

Every authenticated request passes through five enforcement points before it touches a row in the database.

  1. 1
    Browser
    Strict CSP, HSTS, COOP/CORP. JS bundle integrity-pinned by Vite hashes.
  2. 2
    Edge function
    JWT verified via Supabase. Unauth requests denied at this layer.
  3. 3
    Rate limiter
    100 req/min/user. Atomic counter — no race window for floods.
  4. 4
    Token cap
    Free tier: 20k LLM tokens/day. Atomic RPC, UTC midnight reset.
  5. 5
    Postgres + RLS
    Row Level Security as a final gate — even if every prior layer fails, you can't read another user's row.
Trusted infrastructure

We stand on audited shoulders.

We don't host our own data center, our own payment switch, or our own broker rails. We integrate the providers who already pass the hardest audits in the industry — so you inherit them.

Vercel
Hosting & edge functions — SOC 2 Type II, ISO 27001
Supabase
Auth, DB, Realtime — SOC 2 Type II, HIPAA-eligible
Stripe
Payments — PCI-DSS Level 1 service provider
SnapTrade
Broker integration — SOC 2 Type II audited
Cloudflare
DNS & DDoS — Turnstile bot challenges on auth flows
Alpaca / FMP
Market data — read-only, no PII transmitted
Coordinated disclosure

Found something? We want to hear it.

Good-faith security research is welcome. We follow industry-standard coordinated disclosure and offer safe harbor against legal action when you stay within the rules below.

01
Email security@versatum.ai
Include a clear reproduction, the affected URL, and any payload. We acknowledge within 1 business day.
02
We triage within 72 hours
Severity is set per CVSS 3.1. Critical and high issues page on-call. Medium/low issues get a tracked timeline.
03
Fix → verify → disclose
You can request to be credited in our disclosure log once the patch ships. Safe-harbor applies for good-faith research.
Out of scope: denial-of-service, social engineering of staff, physical attacks, spam reports, third-party services that aren't ours (Vercel, Supabase, Stripe, SnapTrade — report directly to them), and findings that require root on a victim's device. Everything else: please send it to security@versatum.ai.
Common worries

The questions you actually want answered.

Do you sell or share my trading data?
No. We don't sell, rent, or trade personal data. We don't run third-party advertising trackers. The only third parties that ever see your data are the infrastructure providers we explicitly use to deliver the service (Supabase, Vercel, Stripe, SnapTrade) — listed above.
Can Versatum see my brokerage password?
No. We integrate brokers via SnapTrade. The OAuth-style flow happens between you and your broker — we receive a per-user opaque secret used to sign requests, encrypted at rest. Your password never touches our system.
Can Versatum see my card number?
No. Billing is handled entirely by Stripe Checkout. The card form is on Stripe's domain. We receive a Stripe customer ID and a subscription status — nothing else. We are out of PCI-DSS scope by design.
What happens if I delete my account?
We hard-delete your auth record and cascade-wipe every linked row — dashboards, watchlists, Copilot conversations, ML strategies, RL backtests, sessions, and activity log. SnapTrade connections are torn down in the same flow. Phone and device fingerprint are added to abuse blocklists so they survive deletion (anti-abuse signal only).
How do you protect against AI prompt injection?
The Copilot is grounded in the JSON of the widget you're focused on — not your account, balances, or unrelated data. Indirect prompt injection in news content can't access your portfolio because the model never had it. Critical actions (live trade routing) require an explicit confirm step that no LLM can take on your behalf.
Where is my data stored?
Supabase (Postgres) in us-east-1, with row-level security ensuring you can only read your own records. Static assets and serverless functions run on Vercel (us-east-1). If you're outside the US, your data is transferred under Standard Contractual Clauses.

Trade with confidence.
We've handled the security so you don't have to.