Security

What we do, where it’s enforced, and how to reach us if you find something wrong.

Tenant isolation

Every customer-data table in the EPIC database enforces row-level security against an unprivileged Postgres role that cannot be turned off in-process. The role epic-edge and epic-control connect as cannot read another organisation’s rows even if a query forgets a WHERE org_id = $1 filter.

API key custody

Plaintext API keys are shown to you once at creation time and stored hashed (BLAKE3) at rest. We cannot recover a lost key — only rotate it. Compromised keys can be revoked from your dashboard or by emailing us; revocation takes effect within seconds.

EPIC keys follow a standard epic_live_sk_ / epic_test_sk_ prefix scheme so they are detectable by GitHub’s secret-scanning program. A key spotted in a public repository is automatically revoked.

Transport

All traffic to and from EPIC is encrypted with TLS 1.3 over QUIC (HTTP/3) or HTTP/2 over TLS 1.3 on TCP. We do not support TLS 1.2 or plaintext HTTP at any endpoint.

Data retention

We do not retain your prompts or completions by default. Diagnostic captures — a per-organisation opt-in used for debugging a misbehaving model or request — are stored encrypted with a per-organisation key and hard-deleted after seven days.

Responsible disclosure

Found something? Email [email protected]. We respond within one business day and credit you in our transparency report when the issue is resolved.