Trust

Security

Exactly how SignalVault handles the data that passes through it, written for the person who has to sign off on using it. Where we don't have something yet, this page says so.

Payloads at rest
AES-256-GCM
Transport
TLS 1.2 or 1.3
API keys
HMAC-SHA256, never stored
Data region
Stockholm, Sweden
01

Data protection

Prompts and responses
Encrypted at rest with AES-256-GCM via Cloak/Ecto. Never written in plaintext.
Encryption keys
Held in environment configuration, never stored alongside the data they protect.
Backups
Daily snapshots of the database volume, kept for 5 days in the same region. The volume is encrypted, and payloads stay encrypted inside the snapshots.
API keys
Stored only as an HMAC-SHA256 hash, keyed with a secret held outside the database. Raw keys are never persisted and are shown once, at creation.
Key prefixes
sk_live_ and sk_test_ identify the environment without exposing the secret.
Detected PII and secrets
On proxied requests, redacted or blocked before the request reaches the provider, according to the rules set on your app.
Not encrypted
Metadata you attach, model and tool names, a tool's error message, token counts and rule decisions. They are stored as sent, so keep personal data out of metadata.
02

Transport

External connections
TLS 1.3 where the client supports it, TLS 1.2 at minimum; older versions are refused. HTTPS enforced on every API endpoint and on the dashboard.
Certificates
Managed by Cloudflare at the edge and by the hosting provider behind it, both with automatic renewal.
Application to database
A private network encrypted at the network layer (WireGuard), never exposed to the public internet.
03

Access control

Dashboard sign-in
Session-based authentication with bcrypt password hashing.
Session cookies
HttpOnly, Secure and SameSite.
Rate limits
20 requests per minute on sign-in, 120 per minute on API endpoints.
Tenant isolation
Every app-scoped request is checked against the signed-in account before any data is read.
Forms
CSRF protection on every form.
Signup abuse
Cloudflare Turnstile, a honeypot field, disposable-email blocking and rate limiting.
04

Retention and deletion

Event retention
Starter 30 days, Growth 90 days, Compliance 2 years.
Purge
Expired events are deleted automatically each night by a scheduled job. Your app's Settings shows the stored record count and the next purge cutoff.
Payload sampling
Optional on Growth and Compliance. Guardrails still run on every request — only payload storage is sampled.
Deleting an app
Removes its events, rules and API keys at once.
Deleting your account
From Account › Security, with your password, once no subscription is active or unpaid. Your account and every app, event, rule and key in it are removed at once. Database snapshots that still hold them expire within 5 days.
05

Infrastructure

Hosting
Fly.io. The application and its database both run in the Stockholm region (arn).
Secrets
Held in environment variables. None in source control. Database credentials are rotated via configuration.
Dependencies
Checked for known advisories in CI on every change.
Logging
Structured JSON logs in production, kept in Axiom for 30 days. Prompt and response payloads are never written to them, and request bodies are kept out of error reports.
Uptime
Monitored externally, with live history linked from the status page.
06

Sub-processors

Every third party that can touch data passing through SignalVault, and what each one receives.

Service Purpose Data received Region
Fly.io Application and database hosting All application data, including encrypted payloads Stockholm
Axiom Log storage and search Application logs: request metadata and account email addresses EU
Cloudflare DNS, proxy, bot protection Requests and responses in transit, including prompts sent through the proxy, and IP addresses Global
Resend Transactional and alert email Email address, alert contents EU (Ireland)
Stripe Payments and invoicing Billing contact and payment method US / EU
Sentry Error monitoring Error reports, with credentials and request bodies removed EU
Umami Analytics on the public site Page views, collected without cookies EU
UptimeRobot Uptime monitoring None —

Model providers are not on this list: a proxied request goes to the provider you chose, with your own key.

07

Certifications and reports

SignalVault is run by a small team, and we'd rather tell you what we don't have than imply otherwise.

SOC 2
Not certified. The controls on this page are documented, and we complete security questionnaires on request.
Automated checks
Every change runs static security analysis (Sobelow) and a dependency audit in CI, and cannot be deployed until both pass.
Evidence exports
CSV and JSON exports of your audit log support your own compliance reviews.
08

Report a vulnerability

If you've found something, email us before disclosing it publicly. We aim to confirm receipt within 48 hours and tell you what we're doing about it. We don't run a bounty programme, but we credit reporters in the changelog unless you'd rather we didn't.

security@signalvault.io

Please don't

  • Run automated scans against production
  • Access or modify another account's data
  • Test denial of service