Tenant isolation
Every database query, every vector search and every realtime object is keyed by your organization and project. There is no unfiltered query path to the vector store; a search that omits the tenant boundary does not exist in the code. Knowledge, conversations and vectors are stored per tenant. On paid plans they are never used to train AI models; on the Free plan, conversations sent to the AI may be used to improve AI models.
Visitors and the widget
Visitors are anonymous. The widget requests a short-lived token bound to the site key, gated by a bot check, and uses it for the conversation socket. No third-party cookie is involved, which is also why the widget keeps working in browsers that block them.
The public widget endpoints return only theme config and published content. Your system prompt, organization id and AI settings are never sent to the browser.
Dashboard access and roles
Dashboard sessions are cookie-based with email verification at sign-up. Organization owners control who is a member and who manages agents; the members directory that powers ticket routing is separate from login accounts, so a support agent listed in the widget does not need dashboard access.
Embed restrictions
On Pro and above, the Allowed domains list limits which hostnames may embed your widget. Pages outside the list get nothing: no launcher, no iframe, no config.
What Helpo never holds
The Shopify catalog import reads a public endpoint and needs no token; order data is pushed to Helpo by the app rather than pulled with a stored credential. The WordPress plugin holds a token scoped to that site, never your login, and revoking it from Helpo cuts the site off immediately. Slack, Discord and Lark connections are outgoing webhook URLs, so Helpo never has read access to your workspace.