Managing Tenants
A tenant is an isolated database inside a project โ its own users, processes, and configuration, kept separate from every other tenant in the same project.
How you manage tenants depends on the project's deployment model:
- Multi-tenant project โ tenants are first-class, with their own Tenants page for creating, opening, and deleting them.
- Single-tenant project โ there is exactly one tenant, kept hidden; it can't be deleted and is managed from the project's Configuration tabs.
Environment
โโโ Project โ single- or multi-tenant
โโโ Tenant โ an isolated database
โโโ Tenant
โโโ โฆ
Switching a project between single- and multi-tenant is what reveals or hides the Tenants page โ see Switching the deployment model. See also Tenant and Project.
Managing tenants in a multi-tenant projectโ
Open the project from its dashboard card (Manage project); for a multi-tenant project this lands on the
Tenants page (/tenants/<id>), a two-pane layout โ the tenant list on the left, the selected
tenant's details on the right.
The tenant listโ
Each tenant is a card showing its name, storage (size of data and attachments), location (cluster), and a user breakdown โ Healthcare parties, Patients, Devices. The breakdown counts are clickable and open the tenant's Users tab pre-filtered to that type. The list infinite-scrolls in pages of 20, and a Search by name box (min. 3 characters) filters it. A project with no tenants shows an empty state with an Add tenant button.
Adding a tenantโ
Add opens a dialog with two fields:
| Field | What it is |
|---|---|
| Tenant name | a label for the tenant. |
| Cluster | the region hosting this tenant's database; it can differ per tenant. |
The new tenant is provisioned as a fresh database under the project and inherits the project's Project ID โ your app reaches it with the same Application ID and is routed to the right database by the user's authentication.
Plan limit. On the Free plan a project can hold 5 tenants; once you hit the cap Add is disabled with a prompt to contact iCure to upgrade. See the Cardinal plan and Storage & Plans.
Opening and managing a tenantโ
Selecting a tenant opens it in its own tabs, each scoped to that tenant alone:
| Tab | What it's for |
|---|---|
| Overview | the tenant's name, identifiers, user breakdown, and storage |
| Users | the tenant's own HCPs, organizations, patients, and devices โ see Managing Users |
| Processes | the tenant's authentication processes (all process types available) โ see Authentication Processes (setup) |
| Custom properties | properties scoped to this tenant โ see Custom Properties |
| External JWT | the tenant's external-JWT configuration โ see External JWT Configuration |
| Danger zone | Update indexes and Delete this tenant (below) |
The Overview tab carries the editable Tenant Name, the Tenant group ID, the inherited Project ID (set up by you), the user breakdown, and storage usage. (An Inspect tenant Group JSON button shows the raw Group object.)
When you initialize the Cardinal SDK, use the Project ID (set up by you) โ the same value across every tenant. There's no separate tenant ID in the SDK; the user's authentication routes them to the correct database. See Initialize the Cardinal SDK.
Deleting a tenantโ
A tenant's Danger zone offers Delete this tenant, which permanently removes the tenant and its data.
Deleting a tenant destroys all of its users and data and cannot be undone โ there is no way to recover a deleted tenant's database.
Managing the tenant in a single-tenant projectโ
A single-tenant project holds exactly one tenant, kept hidden, so management is deliberately limited:
- No Tenants page โ Manage project opens the project's Configuration page instead.
- The tenant can't be deleted on its own; the project's Danger zone deletes the project and its single tenant together.
- Users live on the project's Users page, not a per-tenant tab.
The hidden tenant's identifiers live on Configuration โ Project overview (the Deployment section): its Tenant group ID (shown only for single-tenant projects) and the inherited Project ID (set up by you). See Project Overview & Configuration.
Project and tenant settings, side by sideโ
You can still configure the hidden tenant's Processes, Custom properties, and External JWT โ from the matching project Configuration tab. On a single-tenant project each shows two tables, one per scope:
| Configuration tab | Project table | Tenant table |
|---|---|---|
| Processes | Project processes | Tenant processes |
| Custom properties | Custom properties of the Project | Custom properties of the Tenant |
| External JWT | โฆof the Project | โฆof the Tenant |
A setting can sensibly live at either scope, and you can transfer or duplicate an entry between them. For processes, only Login and Generic email belong at the project level โ Registration goes on the tenant. See Authentication Processes (setup), Custom Properties, and External JWT Configuration.
Switching the deployment modelโ
The single โ multi-tenant switch lives in the project's Danger zone (Configuration โ Danger zone โ Deployment model):
- Switch to Multi-tenant โ reveals the Tenants page and lets the project hold more than one tenant.
- Switch to Single-tenant โ only possible when the project has exactly one tenant; a project with multiple tenants can't be converted.
Switching the deployment model is restricted to administrators with Environment Access; a Project-Access admin sees it disabled. See Administrators & Access Levels.
Older projects may have an unset or inconsistent deployment model. Cockpit treats those as multi-tenant by default and prompts you to set the correct model from the Danger zone; if a project is marked as both, pick the correct model (or contact iCure) to resolve it.
Where to go nextโ
- Tenant โ the concept: what a tenant is and how it maps to a Cardinal Group.
- Project Overview & Configuration โ the project-level settings and identifiers.
- Managing Users โ add HCPs, organizations, patients, and devices.
- Danger Zone โ the full set of destructive project/tenant actions.
- Initialize the Cardinal SDK โ how your app authenticates into the right tenant.
Cardinal SDK reference: tenants are
Groups nested under the project group; each inherits the project's Application ID (projectIdinSdkOptions).