Where this app is installed and at what scope — organization, portal, or user. Add an installation to make the app available to a target; remove one to revoke it. An installation whose target portal was removed or suspended shows a status, it does not crash the table.
3 scopes
| Target | Scope level | Installed by | Status | |
|---|---|---|---|---|
Northwind Inc.org_01hzz…nw |
organization | a.admin@northwind | Active | |
Sales portalprt_sales |
portal | a.admin@northwind | Active | |
Legacy portalprt_legacy |
portal | system | Target suspended |
Only targets you administer are listed; a target outside your authority is not selectable.
Contract (anticipated — commissioned by these frames). App installations / scopes are
not in the app-registry contract today. These frames commission a scoping surface —
GET /api/v1/app-registry/apps/{slug}/installations,
POST …/installations { scopeLevel, targetId, targetType }, and
DELETE …/installations/{id} — modelled on the portal precedent's
portal_apps. Every reference carries its type (targetType:
organization / portal / user), never a bare id (identifier-standard). Orphaned target: an
installation whose target portal was removed/suspended renders a
data-installation-status="orphaned" pill and stays removable — it never throws. Add is
scoped to targets the caller administers; a cross-tenant target is 403 (frame g).