Security

Last updated: October 2026

Your AI provider key

When you save your AI provider API key in your dashboard, it's encrypted with AES-256-GCM before it touches the database — the database never holds a plaintext key. It's decrypted only in server memory, at the moment a request needs to call your AI provider, and discarded immediately after. The key is never returned to the dashboard or shown again after you enter it — not even to you.

Account authentication

Passwords are hashed with bcrypt — never stored in plain text. Sessions use short-lived signed JWTs (30 minutes for client dashboards, 8 hours for admin sessions), refreshed automatically using a separately stored, individually revocable refresh token (valid 30 days). Both dashboard and admin logins lock an account for 15 minutes after 5 failed attempts. Admin accounts additionally support TOTP-based two-factor authentication. Changes made from the dashboard are protected against cross-site request forgery.

Request-level protections

  • Security headers on every page: a Content Security Policy, HSTS (browsers only use https), clickjacking protection and no content-type sniffing. The hosted chat page is the one exception that may be framed, so it can be embedded on your site.
  • Rate limiting: 100 requests/minute per IP on the widget's settings route; for chat, a per-visitor burst limit (40 messages per 10 minutes per IP), an hourly cap per bot and a 120-message cap per conversation; 15 login attempts per 15 minutes per IP; and 3/hour plus 10/day on the public demo.
  • Uploaded documents are capped at 10MB. Only the text extracted from them is kept (as part of your knowledge base); the original file is not stored.
  • Domain lock: you can restrict a bot to your own domain, and chat and settings requests coming from other websites in a browser are refused. (A tool that fakes browser headers could still call the public endpoints, which is why every other protection here exists too.)
  • When the bot imports a website or calls a webhook, requests to private or internal network addresses are blocked, and the check is repeated when the connection is made.
  • Credentials you save for integrations, channels, store lookups and custom actions are encrypted with AES-256-GCM like your AI key. Incoming Telegram messages are accepted only with the secret token we set, and incoming Twilio messages only with a valid Twilio signature.
  • Optional automatic deletion of old conversations (30, 90, 180 or 365 days) per bot.

The widget script is public

The widget file loads in your visitors' browsers, so anyone can read it, as with any website script. It contains no secrets: it only talks to our servers, and everything that matters (your AI key, the knowledge base, answers, ticket logic, integrations) stays on the server and is protected by the controls above.

What we don't claim

We haven't undergone a third-party penetration test or formal audit, and we don't hold a compliance certification like SOC 2. If that's a hard requirement for your business, write to us before signing up and we'll tell you honestly whether we're a fit.

Reporting an issue

If you find a security issue, write to us through the contact page and we'll respond as a priority.

Switch to the support bot that costs less and does more

Bigger names charge more for the same thing and mark up every AI reply. Techvea runs on your own AI key, so you pay your AI provider's price and nothing on top.