Security & trust

Security by
design, not afterthought

Emmy is built for enterprise email. Every architectural decision starts from the question: what is the minimum exposure needed to do this job?

Identity is the perimeter

No implicit trust based on network location. Every request is authenticated through verified identity providers before reaching the application.

Minimum necessary access

Emmy requests only the delegated scopes it needs for the task at hand. No standing admin access. No persistent email body storage.

Auditable by design

Every action has a tamper-evident receipt. Security scores, routing decisions, draft events, and sends are logged for compliance and retrospective review.

Network access

Zero-trust access via Cloudflare

The Emmy portal is protected by Cloudflare Access. The Azure Container App origin does not accept direct internet traffic — it returns 403 to anything that bypasses Cloudflare. Your corporate Entra ID (Microsoft) or Google Workspace identity is the only key.

Cloudflare proxies all traffic — origin URL is not public
Identity verified against specific Entra tenants before any request reaches the app
No VPN, no IP allowlisting — works from anywhere with verified identity
Authentication flow
1 User authenticates via Entra ID / corporate SSO
2 Cloudflare Access validates identity against allowed tenants
3 JWT issued, forwarded to Emmy as a trusted header
4 Emmy resolves session — no cookie, no shared secret
5 Origin is unreachable without valid Cloudflare token
Data handling

Your email stays with your provider

Emmy reads messages through delegated OAuth or IMAP credentials. Email body content is processed for the duration of a single analysis and not stored in Emmy’s database. Labels, audit events, and structured outputs are stored — raw message content is not.

No email body logging by design
Delegated credentials — Emmy acts on your behalf, never on its own account
Revoke access at any time by removing the OAuth grant or IMAP credential
What Emmy stores
Stored: Labels, structured analysis outputs, audit receipts
Stored: Draft metadata, send events, HITL decisions
Not stored: Raw email body content
Not stored: Plaintext API keys (encrypted reference only)
AI provider keys

Per-user, encrypted, never returned

Each user brings their own OpenAI-compatible AI endpoint and key. Keys are encrypted at rest and stored only as a reference — never returned in API responses. Emmy never shares keys between users and never uses a shared pool API key for customer data.

Keys stored via Azure Key Vault reference or encrypted column — plaintext never persisted
API responses return only a masked preview (first 4 + last 4 characters)
Your AI traffic goes to your endpoint — Emmy sees the response, not the key in flight
Key lifecycle
1 User submits key via HTTPS
2 Key encrypted, reference written to database
3 Plaintext key discarded from memory
4 Requests to AI provider use the decrypted key in-process only
5 API response returns masked preview — never raw key
Responsible disclosure

Found a vulnerability?

We take security seriously. If you discover a security issue in Emmy, please report it responsibly. We aim to acknowledge reports within 48 hours and resolve valid issues promptly.

Security disclosure

Send your findings to the security contact listed in /legal/security. Please include reproduction steps, impact assessment, and any relevant artefacts.

Disclosure policy