The isolation model
- Organisations are the tenancy boundary. Each Seyn client is one organisation. Users belong to organisations through memberships.
- Every piece of client data carries its organisation. Raw records, events, rules, libraries, chat threads, inference logs: all of it, with no exceptions.
- Every query filters by organisation. The scope is derived from the authenticated context, never from URL parameters, headers, or request bodies a caller could manipulate.
- The org context comes from signed claims for dashboard users, or from the API keyâs binding for API and MCP access. A given API key sees exactly one organisation, even if its creator belongs to several.
The three role tiers
Roles form a hierarchy:org:member < org:admin < platform:admin.
Role checks happen in two places, deliberately mirrored: the backend enforces them on every endpoint, and the dashboard gates navigation by the same hierarchy. The frontend gating is UX; the backend check is the security boundary.
The superadmin invariant
platform:admin is a navigation power, not a query bypass. Seyn staff can switch into a client organisation to operate it, but once switched in, every query still scopes to that organisation. There is no cross-tenant query path: no âall orgsâ data endpoint, no admin override on the scope filter.
This is the difference between âour staff can see your data when operating your tenantâ (true, and necessary to run the service) and âthere exists code that queries across tenantsâ (false, by construction). The first is a policy; the second is an attack surface we chose not to build.
Tenancy at every boundary
Common mistakes
Related
Security & Trust
Credentials, rate limits, and data-handling guarantees.
Authentication
API keys: creation, rotation, error codes.