On this page

Group management endpoints

19 endpoints.

MethodPathSummary
GET/api/communities/{communityId}/groupsList all groups in a community
POST/api/communities/{communityId}/groupsCreate a new group (Moderator+ only)
DELETE/api/communities/{communityId}/groups/{groupId}Delete a group (Moderator+ only)
GET/api/communities/{communityId}/groups/{groupId}Get a single group by ID
PUT/api/communities/{communityId}/groups/{groupId}Update a group (Moderator+ only)
PATCH/api/communities/{communityId}/groups/{groupId}/hideHide a group (Moderator+ only)
POST/api/communities/{communityId}/groups/{groupId}/joinJoin a group
GET/api/communities/{communityId}/groups/{groupId}/join-requestsGet all join requests for a group (Admin/Moderator only)
POST/api/communities/{communityId}/groups/{groupId}/join-requestsRequest to join a private group
DELETE/api/communities/{communityId}/groups/{groupId}/join-requests/{requestId}Cancel a join request (by the requester)
PATCH/api/communities/{communityId}/groups/{groupId}/join-requests/{requestId}/approveApprove a join request (Admin/Moderator only)
PATCH/api/communities/{communityId}/groups/{groupId}/join-requests/{requestId}/rejectReject a join request (Admin/Moderator only)
GET/api/communities/{communityId}/groups/{groupId}/join-requests/my-statusGet current user's join request status for a group
POST/api/communities/{communityId}/groups/{groupId}/leaveLeave a group
GET/api/communities/{communityId}/groups/{groupId}/membersGet all members of a group
GET/api/communities/{communityId}/groups/{groupId}/membership-statusCheck membership status for current user in a group
PATCH/api/communities/{communityId}/groups/{groupId}/unhideUnhide a group (Moderator+ only)
GET/api/communities/{communityId}/groups/join-requestsCommunity-wide aggregate of group join requests (Moderator+ only)
GET/api/communities/{communityId}/groups/member/{userId}Groups a given member belongs to, filtered to what the viewer may see

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)Community ID
pagequerynointegerPage number
limitquerynointegerItems per page
typequerynoenum: PRIVATE, PUBLICFilter by group type
searchquerynostringSearch in group names
hasSpacequerynobooleanFilter groups with available space

Responses

StatusDescriptionBody
200List of groups with paginationobject
400Invalid request parameters—
401Authentication required—
404Community not found—

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—

Request body (required) — multipart/form-data

FieldTypeRequiredDescription
nameArabicstringyesGroup name in Arabic
namestringyesGroup name in English
descriptionArabicstringyesGroup description in Arabic
descriptionstringyesGroup description in English
typeenum: PRIVATE, PUBLICyesGroup privacy type
memberCountintegeryesMember limit (-1 for unlimited, positive number for limit)
canChatbooleanyesEnable chat functionality
emailstring (email)noOptional group email
websitestring (uri)noOptional group website
iconstring (binary)yesGroup icon (required, max 2MB, image types only)
coverImagestring (binary)noGroup cover image (optional, max 5MB, image types only)

Responses

StatusDescriptionBody
201Group created successfullyobject
400Invalid request or validation error—
401Authentication required—
403Insufficient permissions (Moderator+ required)—
404Community not found—

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—
groupIdpathyesstring (uuid)—

Responses

StatusDescriptionBody
200Group deleted successfully—
401Authentication required—
403Insufficient permissions (Moderator+ required)—
404Group not found—

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—
groupIdpathyesstring (uuid)—

Responses

StatusDescriptionBody
200Group detailsobject
401Authentication required—
404Group not found—

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—
groupIdpathyesstring (uuid)—

Request body (required) — multipart/form-data

FieldTypeRequiredDescription
nameArabicstringno—
namestringno—
descriptionArabicstringno—
descriptionstringno—
typeenum: PRIVATE, PUBLICno—
memberCountintegerno—
canChatbooleanno—
emailstring (email)no—
websitestring (uri)no—
iconstring (binary)noNew group icon (optional, max 2MB)
coverImagestring (binary)noNew group cover image (optional, max 5MB)
removeCoverImagebooleannoClear the current cover image. Ignored when a coverImage file is uploaded in the same request. There is no equivalent for the icon, which is required.

Responses

StatusDescriptionBody
200Group updated successfully—
400Invalid request or validation error—
401Authentication required—
403Needs groups:manage or groups:moderate (groups:create does NOT edit groups), RESTRICTION_BLOCKED, or storage quota exceeded—
404Group not found—

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—
groupIdpathyesstring (uuid)—

Responses

StatusDescriptionBody
200Group hidden successfullyobject
400Group is already hidden—
401Authentication required—
403Insufficient permissions (Moderator+ required)—
404Group not found—

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—
groupIdpathyesstring (uuid)—

Responses

StatusDescriptionBody
200Successfully joined group—
403User is restricted from joining groups—

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—
groupIdpathyesstring (uuid)—
pagequerynointeger—
limitquerynointeger—
statusquerynoenum: PENDING, APPROVED, REJECTED, CANCELLED—

Responses

StatusDescriptionBody
200Paginated list of join requests—
403Permission denied—

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—
groupIdpathyesstring (uuid)—

Request body — application/json

FieldTypeRequiredDescription
messagestringnoOptional message to group admins

Responses

StatusDescriptionBody
201Join request submitted successfully—
403User is restricted from joining groups—

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—
groupIdpathyesstring (uuid)—
requestIdpathyesstring (uuid)—

Responses

StatusDescriptionBody
200Join request cancelled successfully—
403Not authorized to cancel this request—
404Join request not found—

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—
groupIdpathyesstring (uuid)—
requestIdpathyesstring (uuid)—

Responses

StatusDescriptionBody
200Join request approved and user added to group—
403Permission denied—
404Join request not found—
409JOIN_REQUEST_NOT_PENDING — already decided (including by a reviewer acting at the same moment)—

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—
groupIdpathyesstring (uuid)—
requestIdpathyesstring (uuid)—

Request body — application/json

FieldTypeRequiredDescription
reasonstringnoOptional rejection reason

Responses

StatusDescriptionBody
200Join request rejected—
403Permission denied—
404Join request not found—
409JOIN_REQUEST_NOT_PENDING — already decided (including by a reviewer acting at the same moment)—

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—
groupIdpathyesstring (uuid)—

Responses

StatusDescriptionBody
200User's join request status—
404No join request found—

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—
groupIdpathyesstring (uuid)—

Responses

StatusDescriptionBody
200Successfully left group—
400Cannot leave (e.g., sole admin)—
403User is restricted from leaving groups—

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—
groupIdpathyesstring (uuid)—
pagequerynointeger—
limitquerynointeger—

Responses

StatusDescriptionBody
200Paginated list of group members—
403Not authorized to view members (private group)—

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—
groupIdpathyesstring (uuid)—

Responses

StatusDescriptionBody
200Membership statusobject

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—
groupIdpathyesstring (uuid)—

Responses

StatusDescriptionBody
200Group unhidden successfullyobject
400Group is already visible—
401Authentication required—
403Insufficient permissions (Moderator+ required)—
404Group not found—

Returns join requests across ALL groups in the community in a single paginated response — replaces the per-group fan-out the badge / modal used to do. Call with ?status=PENDING&limit=1 to read just the pending count from pagination.total.

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—
statusquerynoenum: PENDING, APPROVED, REJECTED, CANCELLED—
pagequerynointeger—
limitquerynointeger—

Responses

StatusDescriptionBody
200Aggregated list of join requests with embedded group + user info—
403Insufficient permissions (Moderator+ required)—

Backs the المجموعات tab on a member's profile.

Unlike GET /groups, which returns every group in the community (hidden ones included) and leaves filtering to the client, this endpoint filters SERVER-SIDE, because a membership fact is a different secret from a group's existence:

  • a hidden group is omitted unless the viewer holds groups:manage or groups:moderate
  • a private group is omitted unless the viewer is a member of it, or holds one of those two permissions

Rows are dropped silently — never 403 — so the response cannot be used to probe whether a particular private group exists. Same convention as POST /groups/members/batch.

Auth: Bearer JWT required.

Parameters

NameInRequiredTypeDescription
communityIdpathyesstring (uuid)—
userIdpathyesstring (uuid)The PROFILE OWNER's User.id (not a CommunityMember id)
pagequerynointeger—
limitquerynointeger—

Responses

StatusDescriptionBody
200Visible groups for that member—
400Invalid member user ID—
403Not a member of this community—