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 | Who | What they can do |
|---|---|---|
org:member | Client team members (default for invitees) | Chat, visualisation, settings, document upload. |
org:admin | Client team leads | Everything members can, plus org management: invite members, manage the orgâs API keys, create document connectors. |
platform:admin | Seyn staff | Operational surfaces: connector setup, extraction runs, inference logs, query explorer. |
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
| Surface | How tenancy binds |
|---|---|
| Dashboard | Signed session â active organisation â query scope. |
| Public API | sk_live_* key â one organisation, set at key creation. See Authentication. |
| MCP server | API key resolves to an organisation; every tool result is scoped to it. |
| Background jobs | Org context travels with the job; per-org concurrency caps prevent one tenantâs extraction run from starving anotherâs. |
Common mistakes
| Symptom | Cause | Fix |
|---|---|---|
API returns NOT_FOUND for an ID you can see in the dashboard | The API key belongs to a different organisation than the one youâre viewing | Check which org the key was created in; create a key in the right org |
| A member canât see connectors or extraction runs | Operational surfaces are operator-scoped by design | Members consume knowledge; operators run the machine |
| Expecting one API key to span multiple client orgs | Keys are single-org on purpose; thatâs the isolation guarantee | Create one key per organisation |
Related
Security & Trust
Credentials, rate limits, and data-handling guarantees.
Authentication
API keys: creation, rotation, error codes.