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