Trust Center
The real controls protecting your documents.
What DocTalk actually does to keep your uploads private, isolated, and unused for model training. And — openly — what we haven't certified yet.
01 — Encryption & transit
AES-256 encryption at rest
Uploaded documents are written to MinIO with SSE-S3 server-side encryption by default. Production (Railway) runs MinIO with KMS enabled so SSE-S3 is always applied. In unsupported self-hosted deployments without KMS, MinIO may fall back to unencrypted writes — that is a deployment choice, not a silent downgrade in production.
backend/app/services/storage_service.py · upload_file()
TLS 1.2+ in transit
Every network hop — browser to Vercel edge, edge to Railway backend, backend to LLM providers — uses TLS. HSTS with max-age=63072000 and includeSubDomains is set on the apex domain.
No training on your data
DocTalk routes LLM calls through OpenRouter. Your documents and questions are never used by DocTalk to train models. Provider-side retention depends on the upstream model (DeepSeek / Mistral) — for guaranteed zero retention we rely on OpenRouter's account-level privacy setting (operational control, not yet code-enforced at the request level), and can tighten further with a provider allow-list on request.
02 — Ingest safety
Magic-byte file validation
Uploads are validated against file signature bytes, not file extensions. A .pdf with an executable payload inside is rejected at ingest — you cannot trick the parser by renaming a file.
backend/app/services/upload_service.py · magic-byte check
SSRF protection on URL ingestion
When you drop a URL to summarize, the backend validates the target against an allow-list of public hosts and rejects any request to private IP ranges, link-local addresses, or cloud metadata endpoints (169.254.169.254, etc).
backend/app/core/url_validator.py
Rate limits on anonymous endpoints
Public endpoints (shared views, anonymous reads) have per-IP rate limits with HMAC-signed IP trust chain via the Vercel edge — the real client IP cannot be spoofed. Authenticated users bypass.
backend/app/core/rate_limit.py · shared_view_limiter, anon_read_limiter
03 — Your data, your control
Full data export
From your Profile → Account you can export all your documents and session data. The export includes everything DocTalk stores about you, in portable formats.
Account deletion
You can delete your account from Profile → Account. All documents, sessions, chat history, embeddings, and billing records are removed; the account is not recoverable after deletion.
User isolation
Every document and session is scoped to its owner's user_id at the database and vector-store layer. There is no shared namespace, no org-wide collection by default, and the isolation is enforced at query time — not just at render time.
04 — What we don't have yet
We are a small team without the engineering spend for a full SOC 2 audit yet. The underlying controls are in place; the certification is not.
DocTalk is not a HIPAA-covered business associate. If you handle Protected Health Information, do not upload PHI until we announce BAA support.
Individual OAuth (Google, Microsoft) and magic-link email sign-in only. Enterprise SSO is on the roadmap but not shipped.
DocTalk is SaaS only. Self-hosted is not currently supported.
Report a security issue
Responsible disclosure welcomed. We reply to every vulnerability report within 72 hours.