Transfer Ownership
Workspace Endpoints
Transfer Ownership
Owner-only ownership transfer, keeping ownerId and member rows disjoint
Transfer Ownership
Reassigns a workspace’s
ownerId. Doable by the workspace’s own owner OR any ancestor owner (owners only — never a capability or reach). Runs in one transaction with a row lock to serialize concurrent transfers.
- The new owner must be a verified user (any verified user in the tenant — need not already be a member).
- The new owner’s existing member row (if any) is removed to keep
ownerIdand member rows disjoint (firesworkspace.member.removed). - The previous owner is either demoted into a fresh member row (fires
workspace.member.added) or removed. It defaults to removed when an ancestor owner reassigns; on a voluntary self-transfer the outgoing owner chooses. On demote, rank defaults to 0 unless specified.
Ancestor-owner transfer is what makes offboarding resolvable — a manager can reassign a fired member’s owned sub-workspace without that member’s access.
Path Parameters
string
required
The workspace UUID.
Body Parameters
string
required
The new owner — any verified user in the tenant.
string
"demote" or "remove". Defaults server-side (ancestor-owner reassign → remove; self-transfer → chosen).number
On demote, the ex-owner’s rank. Defaults to
0.string[]
On demote, the ex-owner’s capabilities.
string
Service/master keys only — the user to act as (must be own owner or an ancestor owner).
Response
Returns the updated Workspace object with the newownerId.
Error Responses
New Owner Not Verified — 403
New Owner Not Verified — 403
Invalid Target — 404
Invalid Target — 404

