Skip to main content

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
โ””โ”€โ”€ โ€ฆ
info

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:

FieldWhat it is
Tenant namea label for the tenant.
Clusterthe 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.

info

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:

TabWhat it's for
Overviewthe tenant's name, identifiers, user breakdown, and storage
Usersthe tenant's own HCPs, organizations, patients, and devices โ€” see Managing Users
Processesthe tenant's authentication processes (all process types available) โ€” see Authentication Processes (setup)
Custom propertiesproperties scoped to this tenant โ€” see Custom Properties
External JWTthe tenant's external-JWT configuration โ€” see External JWT Configuration
Danger zoneUpdate 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.)

caution

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.

danger

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 tabProject tableTenant table
ProcessesProject processesTenant processes
Custom propertiesCustom properties of the ProjectCustom properties of the Tenant
External JWTโ€ฆof the Projectโ€ฆof the Tenant
info

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.
caution

Switching the deployment model is restricted to administrators with Environment Access; a Project-Access admin sees it disabled. See Administrators & Access Levels.

info

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โ€‹

Cardinal SDK reference: tenants are Groups nested under the project group; each inherits the project's Application ID (projectId in SdkOptions).