Every institution is a tenant. An account id is carried on every record it owns.
Isolation runs in two layers, and the architecture names them that way.
First, aggregate roots inherit a base class. It refuses to build a record without a valid account id, so an unattached record cannot exist.
Second, each module's data context adds a global filter to every tenant-owned table. A repository method that omits its own filter still cannot read another tenant's rows.
The tenant is resolved once per request, from the signed request itself. It is never taken from request input.
A validator then runs before any endpoint. It confirms that the tenant is active. That the domain belongs to it. That the client address is permitted. And that the token's own tenant claim matches the tenant that was resolved.
The address check is fail-closed. An address that cannot be parsed is refused, not allowed.
Departmental separation rides on top. A sub-account scope is honoured in two cases only: the caller is an account administrator, or that sub-account appears in their own token.
What this is, precisely: a shared database with a shared schema. It is isolated by account id, at the application and data layers. Isolation reviews are recorded per module, against each milestone.