/api/governance/* namespace in Bifrost Open Source and Bifrost Enterprise. Shared resources have one path and wire contract; Enterprise installs edition-specific handlers and adds relationship routes beneath the same resources.
Compatibility window
Enterprise legacy paths remain executable aliases for one complete GA release. Aliases execute the same handler directly, including mutating requests, and return:Deprecation: trueLink: </api/governance/...>; rel="successor-version"(RFC 5829)
Deprecation header and follow the successor-version link to the path you should call instead.
Endpoint mapping
Business Unit URLs were already under
/api/governance/business-units; only OpenAPI path-parameter names were standardized.
Permissions
Canonical paths require the same RBAC resource and operation as the legacy alias they replace. Moving a client, script, or API key to a canonical path never requires regranting a permission, and no role loses access on upgrade. This parity is enforced by a test over the mapping table above, so it holds for every row. One deliberate exception: listing the virtual keys attached to a user is now gated onVirtualKeys rather than Users, on both the canonical /api/governance/users/{user_id}/virtual-keys and its legacy alias. This endpoint returns virtual-key material, and its siblings under /api/governance/virtual-keys/{vk_id}/users were already gated on VirtualKeys. Callers that read it with a Users-only role or API key need VirtualKeys:View added.
The user-level policy endpoints under
/api/governance/users/{user_id}/governance keep the UserProvisioning resource they had when they lived on /api/governance/users. They have no compatibility alias, so grant parity here comes from the resource mapping rather than from an alias.Pagination changes
Canonical Team and User list APIs uselimit and zero-based offset, and return count, total_count, limit, and offset. Legacy aliases continue accepting page and preserve their former response envelopes during the compatibility window.
/api/governance/audit-logs keeps the one-based page and limit parameters and the response envelope it served on /api/audit-logs. Only the path moved.
Team customer semantics
The canonical Teamcustomer_id field retains the Open Source budget-hierarchy meaning. Enterprise many-to-many customer attachments use the relationship endpoints under /api/governance/teams/{team_id}/customers. Do not use the scalar customer_id field to represent Enterprise many-to-many membership.
Rollout checklist
- Upgrade to an Open Source transport version containing the typed governance route override seam.
- Upgrade Enterprise so it installs its Team read handler before Open Source route registration.
- Move API clients, scripts, Postman collections, and UI callers to canonical paths.
- Replace
pagewithoffseton canonical Team and User list requests. - Grant
VirtualKeys:Viewto any role or API key that reads a user’s virtual keys with onlyUserspermission (see Permissions). - Monitor deprecated-route telemetry until external alias traffic reaches zero.
- Remove aliases only in the following major release.

