> ## Documentation Index
> Fetch the complete documentation index at: https://cometchat-22654f5b-docs-rn-guide-message-privately.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Retrieve Groups

> Fetch, search, filter, and paginate groups using the CometChat JavaScript SDK.

## Retrieve List of Groups

*In other words, as a logged-in user, how do I retrieve the list of groups I've joined and groups that are available?*

In order to fetch the list of groups, you can use the `GroupsRequest` class. To use this class i.e to create an object of the `GroupsRequest` class, you need to use the `GroupsRequestBuilder` class. The `GroupsRequestBuilder` class allows you to set the parameters based on which the groups are to be fetched.

Fetching using this builder will return [`Group`](/sdk/reference/entities#group) objects

Use `GroupsRequestBuilder` to fetch groups with filtering, searching, and pagination.

### Set Limit

Sets the number of groups to fetch per request.

<Tabs>
  <Tab title="TypeScript">
    ```typescript theme={null}
    let limit = 30;
    let groupsRequest = new CometChat.GroupsRequestBuilder()
                      	.setLimit(limit)
                      	.build();
    ```
  </Tab>

  <Tab title="JavaScript">
    ```javascript theme={null}
    let limit = 30;
    let groupsRequest = new CometChat.GroupsRequestBuilder()
                      	.setLimit(limit)
                      	.build();
    ```
  </Tab>
</Tabs>

### Set Search Keyword

Filters groups by a search string.

<Tabs>
  <Tab title="TypeScript">
    ```typescript theme={null}
    let limit: number = 30;
    let searchKeyword: string = "group";
    let groupsRequest: CometChat.GroupsRequest = new CometChat.GroupsRequestBuilder()
      .setLimit(limit)
      .setSearchKeyword(searchKeyword)
      .build();
    ```
  </Tab>

  <Tab title="JavaScript">
    ```javascript theme={null}
    let limit = 30;
    let searchKeyword = "group";
    let groupsRequest = new CometChat.GroupsRequestBuilder()
                      	.setLimit(limit)
                      	.setSearchKeyword(searchKeyword)
                      	.build();
    ```
  </Tab>
</Tabs>

### Joined Only

When `true`, returns only groups the logged-in user has joined.

<Tabs>
  <Tab title="TypeScript">
    ```typescript theme={null}
    let limit: number = 30;
    let groupsRequest: CometChat.GroupsRequest = new CometChat.GroupsRequestBuilder()
      .setLimit(limit)
      .joinedOnly(true)
      .build();
    ```
  </Tab>

  <Tab title="JavaScript">
    ```javascript theme={null}
    let limit = 30;
    let groupsRequest = new CometChat.GroupsRequestBuilder()
                      	.setLimit(limit)
                      	.joinedOnly(true)
                      	.build();
    ```
  </Tab>
</Tabs>

### Set Tags

Filters groups by specified tags.

<Tabs>
  <Tab title="TypeScript">
    ```typescript theme={null}
    let limit: number = 30;
    let tags: Array<String> = ["tag1", "tag2"];
    let groupsRequest: CometChat.GroupsRequest = new CometChat.GroupsRequestBuilder()
      .setLimit(limit)
      .setTags(tags)
      .build();
    ```
  </Tab>

  <Tab title="JavaScript">
    ```javascript theme={null}
    let limit = 30;
    let tags = ["tag1", "tag2"];
    let groupsRequest = new CometChat.GroupsRequestBuilder()
                      	.setLimit(limit)
                      	.setTags(tags)
                      	.build();
    ```
  </Tab>
</Tabs>

### With Tags

When `true`, includes tag data in the returned group objects.

<Tabs>
  <Tab title="TypeScript">
    ```typescript theme={null}
    let limit: number = 30;
    let groupsRequest: CometChat.GroupsRequest = new CometChat.GroupsRequestBuilder()
      .setLimit(limit)
      .withTags(true)
      .build();
    ```
  </Tab>

  <Tab title="JavaScript">
    ```javascript let limit = 30; let groupsRequest = new theme={null}
    CometChat.GroupsRequestBuilder() .setLimit(limit) .withTags(true) .build();
    ```
  </Tab>
</Tabs>

Relevant fields to access on returned groups:

| Field | Getter      | Return Type | Description                    |
| ----- | ----------- | ----------- | ------------------------------ |
| tags  | `getTags()` | `string[]`  | Tags associated with the group |

Finally, once all the parameters are set to the builder class, you need to call the build() method to get the object of the `GroupsRequest` class.

Once you have the object of the `GroupsRequest` class, you need to call the `fetchNext()` method. Calling this method will return a list of [`Group`](/sdk/reference/entities#group) objects containing n number of groups where n is the limit set in the builder class.

The list of groups fetched will only have the public and password type groups. The private groups will only be available if the user is a member of the group.

<Tabs>
  <Tab title="TypeScript">
    ```typescript theme={null}
    let limit = 30;
    let groupsRequest = new CometChat.GroupsRequestBuilder()
                      	.setLimit(limit)
                      	.withTags(true)
                      	.build(); 
    ```
  </Tab>

  <Tab title="JavaScript">
    ```javascript let limit = 30; let groupsRequest = new theme={null}
    CometChat.GroupsRequestBuilder() .setLimit(limit) .withTags(true) .build();
    ```
  </Tab>
</Tabs>

After configuring the builder, call `build()` to get the `GroupsRequest` object, then call `fetchNext()` to retrieve groups.

<Note>
  The list only includes public and password-protected groups. Private groups
  appear only if the user is a member.
</Note>

<Tabs>
  <Tab title="TypeScript">
    ```typescript theme={null}
    let limit: number = 30;
    let groupsRequest: CometChat.GroupsRequest = new CometChat.GroupsRequestBuilder()
      .setLimit(limit)
      .build();

    groupsRequest.fetchNext().then(
    (groupList: CometChat.Group[]) => {
    console.log("Groups list fetched successfully", groupList);
    }, (error: CometChat.CometChatException) => {
    console.log("Groups list fetching failed with error", error);
    }
    );

    ```
  </Tab>

  <Tab title="JavaScript">
    ```javascript theme={null}
    let limit = 30;
    let groupsRequest = new CometChat.GroupsRequestBuilder()
                      	.setLimit(limit)
                      	.build();

    groupsRequest.fetchNext().then(
    groupList => {
      console.log("Groups list fetched successfully", groupList);
    }, error => {
      console.log("Groups list fetching failed with error", error);
    }
    );
    ```
  </Tab>
</Tabs>

The `fetchNext()` method returns an array of [`Group`](/sdk/reference/entities#group) objects.

## Retrieve Particular Group Details

Use `getGroup()` to fetch a specific group's details by GUID.

<Tabs>
  <Tab title="TypeScript">
    ```typescript theme={null}
    const GUID: string = "GUID";
    CometChat.getGroup(GUID).then(
      (group: CometChat.Group) => {
          console.log("Group details fetched successfully:", group);
      }, (error: CometChat.CometChatException) => {
          console.log("Group details fetching failed with exception:", error);
      }
    );
    ```
  </Tab>

  <Tab title="JavaScript">
    ```javascript theme={null}
    const GUID = "GUID";
    CometChat.getGroup(GUID).then(
    group => {
      console.log("Group details fetched successfully:", group);
    }, error => {
      console.log("Group details fetching failed with exception:", error);
    }
    );   
    ```
  </Tab>
</Tabs>

| Parameter | Description                    |
| --------- | ------------------------------ |
| `GUID`    | The GUID of the group to fetch |

The method returns a [`Group`](/sdk/reference/entities#group) object.

## Get Online Group Member Count

Use `getOnlineGroupMemberCount()` to get the number of online members in specified groups.

<Tabs>
  <Tab title="TypeScript">
    ```typescript theme={null}
    let guids: String[] = ["cometchat-guid-1"];
    CometChat.getOnlineGroupMemberCount(guids).then(
      (groupMemberCount: Object) => {
          console.log("Total online user for specified groups:", groupMemberCount);
      }, (error: CometChat.CometChatException) => {
          console.log("Online group member count fetching failed with error:", error);
      }
    );
    ```
  </Tab>

  <Tab title="JavaScript">
    ```javascript theme={null}
    let guids = ["cometchat-guid-1"];
    CometChat.getOnlineGroupMemberCount(guids).then(
    groupMemberCount => {
      console.log("Total online user for specified groups:", groupMemberCount);
    }, error => {
      console.log("Online group member count fetching failed with error:", error);
    }
    );
    ```
  </Tab>
</Tabs>

Returns an object with GUIDs as keys and online member counts as values.

`getOnlineGroupMemberCount()` resolves with a `{ guid: count }` object where each key is a group GUID and its value is the number of currently online members in that group.

***

## Next Steps

<CardGroup cols={2}>
  <Card title="Create Group" icon="plus" href="/sdk/javascript/create-group">
    Create public, private, or password-protected groups
  </Card>

  <Card title="Retrieve Group Members" icon="users" href="/sdk/javascript/retrieve-group-members">
    Fetch and filter members of a specific group
  </Card>
</CardGroup>
