Appearance
Organizations
Organizations are the top-level entities for grouping teams and projects. Each organization has its own members, roles, and settings.
Model
Organization
├── name, slug, description, logoUrl
├── members (with roles: OWNER, ADMIN, MANAGER, MEMBER)
├── teams (org-linked teams)
└── projects (org-linked projects)API Endpoints
| Method | Path | Description |
|---|---|---|
GET | /api/organizations | List user's organizations |
POST | /api/organizations | Create organization |
GET | /api/organizations/:orgId | Get organization details |
PATCH | /api/organizations/:orgId | Update organization |
DELETE | /api/organizations/:orgId | Delete organization |
GET | /api/organizations/:orgId/members | List members |
POST | /api/organizations/:orgId/members | Invite member |
PATCH | /api/organizations/:orgId/members/:userId | Update member role |
DELETE | /api/organizations/:orgId/members/:userId | Remove member |
Frontend Routes
| Route | View | Description |
|---|---|---|
/organizations | OrganizationsListView | List all user orgs |
/organizations/:orgId | OrganizationDetailView | Org overview |
/organizations/:orgId/settings | OrganizationSettingsView | Org settings |
Frontend Store
typescript
const store = useOrganizationsStore()
const { organizations, currentOrganization } = storeToRefs(store)
await store.fetchOrganizations()
await store.fetchOrganization(orgId)
await store.createOrganization({ name, slug, description })
await store.updateOrganization(orgId, { name, description })
// Members
await store.addMember(orgId, email, role)
await store.removeMember(orgId, userId)Key Implementation Details
- Organizations support custom roles with granular permissions
- Slug is used for URL-friendly identifiers
- Cascade delete removes all associated teams, projects, and tasks
- Org-level permissions control access to settings, member management, and billing