Workspaces & Team
LaunchKit Pro is multi-tenant. Users belong to one or more workspaces with role-based access inside each workspace.
Workspaces
| Method | Path | Description |
|---|---|---|
GET | /workspaces | List workspaces for current user |
POST | /workspaces | Create workspace |
GET | /workspaces/:workspaceId | Workspace detail |
PATCH | /workspaces/:workspaceId | Update name/settings |
Creating a workspace makes the creator OWNER.
curl -s -X POST http://localhost:4000/workspaces \
-H "Authorization: Bearer <accessToken>" \
-H "Content-Type: application/json" \
-d '{"name": "Acme Agency"}' | jqWorkspace members
| Method | Path | Description |
|---|---|---|
GET | /workspaces/:workspaceId/members | List members |
PATCH | /workspaces/:workspaceId/members/:memberId | Update role |
DELETE | /workspaces/:workspaceId/members/:memberId | Remove member |
Roles
| Role | Typical access |
|---|---|
| OWNER | Full workspace control, billing, member management |
| ADMIN | Manage settings, members, files, developer tools |
| MEMBER | Use product features; limited admin actions |
| VIEWER | Read-only access where permissions allow |
Platform-level User.role (USER, ADMIN, OWNER) is separate from workspace membership roles.
Workspace statuses
| Status | User switcher | API access |
|---|---|---|
ACTIVE | Selectable | Allowed |
SUSPENDED | Shown disabled (if listed) | 403 WORKSPACE_SUSPENDED |
ARCHIVED | Hidden | 403 WORKSPACE_ARCHIVED |
After login, only ACTIVE workspaces can become activeWorkspace. If none exist, users are redirected to /workspace-unavailable.
Admins still manage all statuses from Admin Workspace Management.
Admin workspace management
Platform admins use Admin → Workspaces for full CRUD. See Admin Workspace Management for APIs, safe delete, owner transfer, and demo restrictions.
Invite flow
- Owner/Admin creates invite:
POST /workspaces/:workspaceId/invites - Invitee receives token (mock email in dev; link uses
FRONTEND_URL/invite-accept?token=...) - Invitee accepts:
POST /workspaces/invites/accept
curl -s -X POST http://localhost:4000/workspaces/<workspaceId>/invites \
-H "Authorization: Bearer <accessToken>" \
-H "Content-Type: application/json" \
-d '{"email": "member@example.com", "role": "MEMBER"}' | jqWorkspace settings
PATCH /workspaces/:workspaceId/settings — workspace-level preferences (requires settings permission).
Workspace branding
| Method | Path | Description |
|---|---|---|
GET | /workspaces/:workspaceId/branding | Branding profile |
PATCH | /workspaces/:workspaceId/branding | Update colors, name display |
POST | /workspaces/:workspaceId/branding/logo | Upload logo (multipart) |
Branding changes are audited. Demo mode may block branding updates for protected demo users.
Frontend
- Dashboard workspace switcher persists active workspace in
localStorage - Team page:
/dashboard/team— members, invites, role updates
Related
- Permissions & Limits
- Customization — branding and themes