Security is not a feature we added. It's the way we built everything else.
Every secret stored in Fülkit's database is encrypted with AES-256-GCM — the same standard used by banks, governments, and security-critical infrastructure.
OAuth tokens, API keys, and refresh tokens are encrypted before they touch the database. Even if someone breached the database directly, they'd get ciphertext — not keys.
Format: base64(iv):base64(authTag):base64(ciphertext) — 12-byte random IV per encryption, 128-bit authentication tag, AES-256-GCM authenticated encryption.
All traffic to fulkit.app is HTTPS-only. There are no plaintext endpoints. API routes, OAuth callbacks, webhook receivers — everything runs over TLS.
Every user-facing table in the database has RLS policies. Users can only read and write their own data — enforced at the database level, not just the application layer.
Even if an API route had a bug, RLS prevents cross-user data access.
Every API route is rate-limited to prevent abuse. Limits are enforced via distributed Redis — shared across all serverless instances. Limits survive deploys, cold starts, and instance scaling.
| Chat | 15 req/min |
| Checkout | 5 req/min |
| Referrals | 3 req/min |
| API keys | 5 req/min |
| All other routes | 60 req/min |
Fülkit enforces a strict CSP that controls what the browser is allowed to load.
User-provided data is injected into AI prompts as context — never as instructions.
Payment webhooks are verified using HMAC-SHA256 with timing-safe comparison. Unverified payloads are rejected. No exceptions.
Users can delete all their data through Settings. Messages, conversations, actions, notes, preferences, integrations — atomic cascade, scoped by user. When you delete, it's gone.
Questions about security? Reach us at security@fulkit.app