Skip to main content
Contento

Trust Center

Last reviewed: 22 September 2026

This page describes what exists today, in terms you can check. Every claim here rests on code or on live configuration, not on intent. The last section lists what we do not have — a document that hides its gaps is worth less than nothing the moment somebody checks.


Customer isolation

Separation between organisations is enforced by Row Level Security at the PostgreSQL level, not in the application layer. As of September 2026 there are 317 RLS policies in place, and RLS is enabled on all 92 tables in the schema — not on most of them.

  • RLS policies are defined alongside every table and keyed to the user's organisation. An application bug that tries to read another organisation's row is refused by the database, not merely hidden by the interface.
  • Isolation is tested, not just declared: an automated suite signs in as users of two organisations and tries to read data across the boundary in 41 of the 49 organisation-scoped tables, and to write, update and delete in a sample of the sensitive ones. It runs on every code change and nightly, and checks that the blocked data actually exists — so a denial cannot pass merely because there was nothing to deny.
  • A learner's access is determined by their licence rather than by the organisation they belong to, so someone shared into another organisation's programme sees exactly what was assigned to them and nothing more.
  • The few operations that must cross organisation boundaries run with a service role. Each such path is listed in an inventory with the reason it is allowed, and the inventory is checked automatically on every change — an undeclared new path fails the check.

Your content does not train models

This is the strongest commitment we make, and it is contractual rather than declarative.

  • The commercial terms of Anthropic, our primary AI provider, do not permit training on customer content, and the enterprise route carries a Zero Data Retention arrangement.
  • Every AI call goes through a single entry point in the codebase, so there is no side path that bypasses these settings.
  • Retrieval over your knowledge sources is lexical only. Your corpus is not sent to an external vector provider and is not turned into embeddings by a third party.

Where data lives

The whole application layer sits in the European Union. The AI layer does not, and we say so here explicitly.

  • Database, storage and execution: Frankfurt (Supabase eu-central-1 and Vercel fra1, co-located).
  • Email, telemetry and CRM: within the European Union.
  • Outside the EU: the AI providers that actually receive customer content, and Google Analytics on the marketing site.
  • Data residency inside Israel is a different requirement, and it is not met today.

Deletion and retention

  • Source files uploaded for AI content generation are hard-deleted within 24 hours, and a daily job also collects files left behind after a failure.
  • A file uploaded as a knowledge source is deleted as soon as processing finishes; what is retained is the extracted text, not the file.
  • The identity and administration log is retained for 400 days and then deleted automatically.
  • Daily database backups, with a seven-day restore window.

Authentication, access and logging

  • Sign-in is by one-time code sent to email. Sessions are held in HTTP-only cookies and traffic is encrypted with TLS.
  • An address the platform does not know cannot create an account for itself through the sign-in screen, and code requests are rate limited.
  • An organisation-level activity log records sign-ins, invitations, permission changes and connector activity. It is append-only — not even an organisation admin can edit or delete it — and organisation admins can read their own log in the product.
  • When an employee is marked as leaving in your HR system, the proposal reaches us within 24 hours and goes through human approval. On approval, access is revoked immediately and live sessions end. A license not yet used is released and its seat returns to the pool. A used license is kept with its learning history, and its seat stays taken.

Infrastructure and process

  • Security headers are enforced on every response: HSTS, clickjacking protection, MIME-sniffing protection, a Referrer policy and a browser permissions policy.
  • The Content-Security-Policy is enforced: the browser loads scripts, images, fonts and frames only from pre-approved sources, and every block is reported to us. The policy still allows inline scripts, so it limits where code is loaded from — but it is not full protection against XSS.
  • Every code change passes an automated gate of tests, type checking and linting before it can be merged.
  • A vulnerability disclosure policy is published separately, alongside a standards-compliant security.txt.

Sub-processors

The providers that process data on our behalf. The list is maintained alongside the code and re-reviewed quarterly.

ProviderPurpose
SupabaseDatabase, authentication and storage
VercelHosting and execution
AnthropicAI content generation and chat
Google GeminiNarration, podcast and avatar speech
fal.aiImage generation
HeyGenAvatar video rendering
Fly.ioVideo rendering worker
ResendTransactional email
BrevoSMTP relay for team mailboxes
PostHogProduct analytics and error tracking
HubSpotCRM
CloudflareDNS and CDN
GitHubSource control and the CI gate
Google AnalyticsMarketing site measurement only, subject to consent
Google FontsTypefaces
YouTubeVideo embedding

The HR systems you connect yourself — HiBob, Finch or Microsoft Entra ID — are not our sub-processors but your own systems. We read your employee roster from them under the permission you grant, and you can disconnect them at any time.

What we do not have yet

This list is published deliberately. These are capabilities an enterprise customer may require that we have not built — and if one of them blocks you, we would like to hear it, because that is what moves priorities.

  • SOC 2 and ISO 27001 — not held.
  • External penetration test — not yet conducted.
  • Enterprise single sign-on (SSO/SAML) and multi-factor authentication — planned, not yet available.
  • The automated isolation tests do not yet cover access policies on stored files, or 8 of the 49 organisation-scoped tables. Each one is listed, with the reason. They also run against a copy of the database structure that is taken from production automatically every night — so a policy change is tested the night after it has been applied, not before.
  • Point-in-time recovery — not available. Daily backups with a seven-day window are.
  • A dedicated database per customer — a documented decision rather than a gap. Isolation is enforced at the database level.
  • Department- or branch-level permissions — all permissions today are organisation-wide.
  • A documented process for data-subject deletion or export requests — in progress.

Documents in preparation

A Data Processing Agreement, a Service Level Agreement and AI terms of use are in preparation. Until they are published we are glad to provide them on request.

Security questions

For a security questionnaire, a document request or a vulnerability report — support@contento.team. Vulnerability disclosure policy