Encrypted at rest.
Hardened at every layer.
Visitor data encrypted with AES-256-GCM, passwords hashed with Argon2ID, sessions protected by a two-token architecture with rotation. Every API call signed, every action logged.
Sensitive data encrypted before it hits the database
Visitor PII — names, emails, phone numbers — is encrypted with AES-256-GCM before storage. Versioned keys support rotation without re-encrypting existing data.
AES-256-GCM
Authenticated encryption with random 16-byte IVs per record. GCM mode provides both confidentiality and tamper detection.
Versioned keys
Encryption keys are versioned and stored outside the database. Key rotation doesn't require bulk re-encryption — old versions decrypt existing data while new data uses the latest key.
PII isolation
Only sensitive visitor fields are encrypted — not message content. This keeps full-text search and analytics functional without exposing identity data.
Four ways in. One standard of security.
Every authentication method uses the same two-token session architecture underneath.
Password
Argon2ID
Memory-hard hash with auto-upgrade from legacy bcrypt
Two-factor
TOTP
Google Authenticator compatible with encrypted backup codes
Passkeys
WebAuthn
FIDO2 hardware and biometric authentication with 5-minute challenge window
Magic links
One-time token
15-minute expiry, atomic consumption, no replay possible
Two-token rotation with replay detection
Sessions use a short-lived access token paired with a rotating refresh token. Reuse of an old refresh token revokes the entire token family.
Access token
- 1-hour TTL, auto-refreshed
- 256-bit cryptographic random
- SHA-256 hashed before storage
- In-memory cache for sub-millisecond validation
Refresh token
- 24-hour TTL (30 days with remember-me)
- Rotated on every use
- 60-second grace window for concurrent requests
- Token family tracking detects replay attacks
Scoped keys. Signed requests. Rate limited.
API keys are encrypted at rest and scoped to specific permissions. Every webhook delivery is HMAC-signed. Abuse protection is built in at every level.
- Publishable and secret keys with distinct prefixes
- 6 granular scopes: chats, visitors, team, webhooks
- Secret keys encrypted with AES-256-GCM before storage
- Per-key and per-user rate limiting
- Key rotation, revocation, and expiration support
- Full audit trail: created, rotated, revoked with actor and IP
Every action logged. Every session tracked.
Security events, session history, and API key lifecycle are logged with actor, IP, device, and timestamp. New-IP login detection triggers email alerts.
- Login attempts (valid, invalid, 2FA failures)
- Password changes and passkey enrollments
- API key creation, rotation, and revocation
- Active session monitoring with device and location
- Per-session revocation (individual or all)
- First-time IP detection with email notification
- Account deletion with PII anonymization