Organizations
List Organizations
GET /api/organizations
Input:
{
userId: string
}
Output: Array<{
id: string
name: string
avatarUrl: string | null
members: Array<{
id: string
userId: string
role: "OWNER" | "MEMBER"
isCreator: boolean
user?: {
id: string
name: string | null
email: string
avatarUrl: string | null
}
}>
memberCount: number
}>
Get Organization
GET /api/organizations/:id
Input:
{
id: string
}
Output: {
id: string
name: string
avatarUrl: string | null
}
Create Organization
POST /api/organizations
Input:
{
name: string
}
Output: {
id: string
name: string
avatarUrl: string | null
memberships: Array<{
id: string
role: "OWNER" | "MEMBER"
isCreator: boolean
}>
}
Update Organization
PATCH /api/organizations/:id
Input:
{
id: string
name?: string
avatarUrl?: string
}
Output: {
id: string
name: string
avatarUrl: string | null
}
Delete Organization
DELETE /api/organizations/:id
Input:
{
id: string
}
Output: void
Organization Members
List Members
GET /api/organizations/:organizationId/members
Input:
{
organizationId: string
}
Output: Array<{
id: string
userId: string
organizationId: string
role: "OWNER" | "MEMBER"
isCreator: boolean
user?: {
id: string
name: string | null
email: string
avatarUrl: string | null
}
}>
Remove Member
DELETE /api/organizations/members/:membershipId
Input:
{
membershipId: string
}
Output: void
Update Membership
PATCH /api/organizations/members/:id
Input:
{
id: string
role: "OWNER" | "MEMBER"
}
Output: void
Organization Invitations
List Invitations
GET /api/organizations/:organizationId/invitations
Input:
{
organizationId: string
}
Output: Array<{
id: string
organizationId: string
email: string
role: "OWNER" | "MEMBER"
expiresAt: Date
}>
Get Invitation
GET /api/organizations/invitations/:id
Input:
{
id: string
}
Output: {
id: string
organizationId: string
email: string
role: "OWNER" | "MEMBER"
expiresAt: Date
organization?: {
name: string
}
} | null
Invite Member
POST /api/organizations/:organizationId/invitations
Input:
{
organizationId: string
email: string
role: "OWNER" | "MEMBER"
}
Output: void
Accept Invitation
POST /api/organizations/invitations/:id/accept
Input:
{
id: string
}
Output: {
name: string
}
Revoke Invitation
DELETE /api/organizations/invitations/:invitationId
Input:
{
invitationId: string
}
Output: void
Organization Subscription
Get Organization Subscription
GET /api/organizations/:organizationId/subscription
Input:
{
organizationId: string
}
Output: {
id: string
organizationId: string
customerId: string
status: "ACTIVE" | "CANCELED" | "PAST_DUE" | "UNPAID" | "INCOMPLETE"
planId: string
variantId: string
currentPeriodStart: Date
currentPeriodEnd: Date
canceledAt: Date | null
cancelAtPeriodEnd: boolean
} | null
Notes
- All endpoints require authentication.
- Most organization management operations require organization owner permissions.
- Organization members can:
- View organization details and members
- View organization subscription status
- Organization owners can:
- Update organization details
- Manage organization members and invitations
- Delete the organization
- Users can only remove themselves from an organization if they are not the owner.
- Organization invitations expire after 7 days.