Skip to main content

Organizations Module

The organizations module manages multi-tenant organization accounts, user invitations, and join requests.

Data Model​

Organization
├── name (unique)
├── domain (unique)
├── website, logo, description
├── users[] → User[]
├── projects[] → Project[]
├── invitations[] → OrganizationInvitation[]
└── joinRequests[] → OrganizationJoinRequest[]

Endpoints​

Organizations​

MethodPathDescription
GET/organizationsList all organizations
POST/organizationsCreate a new organization
GET/organizations/:idGet organization details
PATCH/organizations/:idUpdate organization
DELETE/organizations/:idDelete organization

Invitations​

MethodPathDescription
POST/organizations/:id/inviteInvite a user by email
GET/organizations/invitation/:tokenGet invitation details
POST/organizations/invitation/:token/acceptAccept an invitation

Join Requests​

MethodPathDescription
POST/organizations/:id/request-joinRequest to join an org
GET/organizations/:id/join-requestsList pending join requests
POST/organizations/join-requests/:id/approveApprove a request
POST/organizations/join-requests/:id/rejectReject a request

Invitation Flow​

Admin invites user@example.com
│
▼
OrganizationInvitation created
│ (email, token, roleId, expiresAt)
│
▼
Email sent with invitation link
│
▼
User clicks link → /invitation/:token
│
├── If user exists → Added to org
│
└── If new user → Register → Added to org

Join Request Flow​

User requests to join Organization
│
▼
JoinRequest created (status: PENDING)
│
▼
Org admin sees request in dashboard
│
├── APPROVE → User added to org
│
└── REJECT → Request closed

Domain Blacklist​

The DomainBlacklist model prevents users from specific email domains from registering:

admin@blocked-domain.com → Registration rejected