Members, Invitations, and Ownership
These routes manage workspace team access.Endpoints
GET /api/workspaces/:workspaceId/membersPOST /api/workspaces/:workspaceId/members/invitePATCH /api/workspaces/:workspaceId/members/:memberIdDELETE /api/workspaces/:workspaceId/members/:memberIdPOST /api/workspaces/:workspaceId/transfer-ownershipGET /api/workspaces/invitations/pendingPOST /api/workspaces/invitations/:token/acceptDELETE /api/workspaces/invitations/:invitationId
Auth and permission model
All routes are session-only and reject API-key auth.members:read: list membersmembers:invite: invite membersmembers:update_roles: change member rolemembers:remove: remove member- owner role: transfer ownership
Invite request payload
POST /api/workspaces/:workspaceId/members/invite
- Up to
10emails per request. - Role must be
admin,editor, orviewer. - Role escalation is blocked if actor cannot manage target role.
- Team-member plan limits include active members plus pending invites.
- Invitations expire after
7days.
Role updates and removals
PATCH /api/workspaces/:workspaceId/members/:memberId
- Self role-change is blocked.
- Non-owner users cannot modify owner role.
- Last-owner demotion is blocked.
DELETE /api/workspaces/:workspaceId/members/:memberId
Safeguards:
- Owner removal is blocked.
- Equal/higher-role removal is blocked unless valid by policy.
- Removal also deletes that user’s workspace API keys and clears workspace session cache.
Ownership transfer
POST /api/workspaces/:workspaceId/transfer-ownership
- Caller must be current owner.
- Target must be an active member of the same workspace.
- Transfer to self is blocked.
- Previous owner is downgraded to
admin.
Invitation lifecycle routes
GET /api/workspaces/invitations/pending: lists pending invites for current user email.POST /api/workspaces/invitations/:token/accept: accepts a tokenized invite.DELETE /api/workspaces/invitations/:invitationId: recipient can decline, inviter can cancel.
- Token is hashed before lookup.
- Invalid/expired/wrong-email tokens return a generic invalid response.
- Workspace join cap is enforced at acceptance time.
Common errors
400: invalid role, invalid invite payload, transfer precondition failed403: missing permission, role escalation, owner protections404: workspace/member/invitation not found409: invite/member lifecycle conflict (already invited/member)

