Tenant
A Tenant is an isolated slice of a Project โ its own database, with its own users, processes, and configuration, kept separate from every other tenant in the same project. Tenants are how one project serves several groups that must not see each other's data: separate practices, clinics, or customers.
Environment โ created on registration, bound to your email
โโโ Project โ one application/solution
โโโ Tenant โ an isolated database within the project โ you are here
In the Cardinal SDK, a Tenant is a Group โ specifically a database group nested under the project's group. "Tenant" and "database" mean the same thing here; the project is the parent, each tenant is a child. A tenant inherits the project's Project ID, so your app reaches a tenant with the same Application ID and is routed to the right database by the user's authentication.
Tenants only appear in multi-tenant projectsโ
Whether you see tenants at all depends on the project's deployment model:
- Single-tenant project โ has exactly one tenant, but Cockpit keeps it hidden: there's no Tenants page, and you manage users directly on the project's Users page. (You can still see that one tenant's id as Tenant group ID in Configuration โ Project overview.)
- Multi-tenant project โ tenants are surfaced on their own Tenants page, where you create and manage each one individually.
Switching a project from single- to multi-tenant (from Configuration โ Danger zone) is what reveals the Tenants page and lets the project hold more than one. See Project.
The Tenants pageโ
Open a multi-tenant project and go to Tenants. Each tenant appears as a card showing its name, its storage (size of data and attachments), its location (cluster), and a user breakdown โ Healthcare parties, Patients, and Devices counts.
Adding a tenantโ
Click Add to open Add tenant. You only provide:
- Tenant name
- Cluster โ the region where this tenant's database is hosted (it can differ from other tenants).
Submitting provisions a brand-new database under the project, inheriting the project's Project ID.
Plan limit. The number of tenants a project can hold depends on your Cardinal plan โ the Free plan allows 5. When you hit the limit, Add is disabled with a prompt to upgrade.
What a tenant containsโ
Open a tenant to manage it through its own tabs โ the tenant is a self-contained unit:
- Overview โ the tenant's name, its Tenant group ID, the inherited Project ID, a per-type user breakdown, and storage usage.
- Users โ the tenant's own HCPs, organizations, patients, and devices (including bulk import). Each tenant has a separate user set.
- Processes โ the tenant's own authentication processes. All process types are available at the tenant level; Cockpit still recommends configuring Login at the project level where possible.
- Custom properties โ key/value properties scoped to this tenant (and you can copy them to/from the project or other tenants).
- External JWT โ the tenant's external JWT configuration.
- Danger zone โ destructive actions, including Delete (permanently removes the tenant and its data, with a confirmation).
Isolation and sharingโ
Each tenant is isolated: separate users, separate data, separate processes. A user created in one tenant does not exist in another, and data does not cross tenant boundaries.
Data sharing is controlled at the organization level (a parent organization that holds the sharing key), not by the tenant boundary itself. Within a tenant, who can see whose data follows the rules you set when the project was created (the onboarding questionnaire). See Organization.
Tenant vs Project vs Environment โ quick mapโ
| Concept | What it is | In the Cardinal SDK |
|---|---|---|
| Environment | your private space, bound to your email | a top-level Group |
| Project | one application/solution and its database | an app Group |
| Tenant | an isolated database within a project | a database Group under the project |
Where to go nextโ
- Project โ single- vs multi-tenant, and how to switch the deployment model.
- Managing Tenants โ the practical how-to for creating and managing tenants.
- Organization โ how the parent organization controls data sharing.
- Initialize the Cardinal SDK โ how your app authenticates into the right tenant.
Cardinal SDK reference: a Tenant is a
Group(a database group nested under the project) in the Cardinal SDK; it inherits the project's Application ID (projectIdinSdkOptions).