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

# Retrieve Group Members

> Fetch group member lists with filtering by scope, search, and pagination using the CometChat React Native SDK.

<Info>
  **Quick Reference** - Fetch group members:

  ```javascript theme={null}
  const request = new CometChat.GroupMembersRequestBuilder("GUID")
    .setLimit(30)
    .build();
  const members = await request.fetchNext();
  ```
</Info>

<Note>
  **Available via:** [SDK](/sdk/react-native/retrieve-group-members) | [REST API](/rest-api/group-members/list) | [UI Kits](/ui-kit/react-native/groups)
</Note>

## Retrieve the List of Group Members

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

The `GroupMembersRequestBuilder` class allows you to set the below parameters:

The GUID of the group for which the members are to be fetched must be specified in the constructor of the `GroupMembersRequestBuilder` class.

### Set Limit

This method sets the limit i.e. the number of members that should be fetched in a single iteration.

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

  <Tab title="TypeScript">
    ```typescript theme={null}
    let GUID: string = "GUID";
    let limit: number = 30;
    let groupMembersRequest: CometChat.GroupMembersRequest = new CometChat.GroupMembersRequestBuilder(GUID)
      .setLimit(limit)
      .build();
    ```
  </Tab>
</Tabs>

### Set Search Keyword

This method allows you to set the search string based on which the group members are to be fetched.

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

  <Tab title="TypeScript">
    ```typescript theme={null}
    let GUID: string = "GUID";
    let limit: number = 30;
    let searchKeyword: string = "super";
    let groupMembersRequest: CometChat.GroupMembersRequest = new CometChat.GroupMembersRequestBuilder(GUID)
      .setLimit(limit)
      .setSearchKeyword(searchKeyword)
      .build();
    ```
  </Tab>
</Tabs>

### Set Scopes

This method allows you to fetch group members based on multiple scopes.

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    let GUID = "GUID";
    let limit = 30;
    let scopes = ["admin", "moderator"];
    let groupMembersRequest = new CometChat.GroupMembersRequestBuilder(GUID)
      												.setLimit(limit)
      												.setScopes(scopes)
      												.build();
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    let GUID: string = "GUID";
    let limit: number = 30;
    let scopes: Array<String> = ["admin", "moderator"];
    let groupMembersRequest: CometChat.GroupMembersRequest = new CometChat.GroupMembersRequestBuilder(GUID)
      .setLimit(limit)
      .setScopes(scopes)
      .build();
    ```
  </Tab>
</Tabs>

### Set Status

The status based on which the group members are to be fetched. The status parameter can contain one of the below two values:

* CometChat.USER\_STATUS.ONLINE - will return the list of only online group members.
* CometChat.USER\_STATUS.OFFLINE - will return the list of only offline group members.

If this parameter is not set, will return all the group members regardless of their status.

<Tabs>
  <Tab title="Set Status">
    ```javascript theme={null}
    let GUID = "GUID";
    let limit = 30;
    let groupMembersRequest = new CometChat.GroupMembersRequestBuilder(GUID)
      .setLimit(limit)
      .setStatus(CometChat.USER_STATUS.ONLINE)
      .build();
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    let GUID: string = "GUID";
    let limit: number = 30;
    let groupMembersRequest: CometChat.GroupMembersRequest = new CometChat.GroupMembersRequestBuilder(GUID)
      .setLimit(limit)
      .setStatus(CometChat.USER_STATUS.ONLINE)
      .build();
    ```
  </Tab>
</Tabs>

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

Once you have the object of the `GroupMembersRequest` class, you need to call the `fetchNext()` method. Calling this method will return a list of `GroupMember` objects containing n number of members where n is the limit set in the builder class.

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    let GUID = "GUID";
    let limit = 30;
    lett groupMemberRequest = new CometChat.GroupMembersRequestBuilder(GUID)
      												.setLimit(limit)
      												.build();

    groupMemberRequest.fetchNext().then(
    groupMembers => {
      console.log("Group Member list fetched successfully:", groupMembers);
    }, error => {
      console.log("Group Member list fetching failed with exception:", error);
    }
    );
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    let GUID: string = "GUID";
    let limit: number = 30;
    let groupMembersRequest: CometChat.GroupMembersRequest = new CometChat.GroupMembersRequestBuilder(GUID)
      .setLimit(limit)
      .build();

    groupMembersRequest.fetchNext().then(
      (groupMembers: CometChat.GroupMember[]) => {
          console.log("Group Member list fetched successfully:", groupMembers);
      }, (error: CometChat.CometChatException) => {
          console.log("Group Member list fetching failed with exception:", error);
      }
    );
    ```
  </Tab>
</Tabs>

<Accordion title="Response">
  **On Success** — `fetchNext()` returns an array of `GroupMember` objects:

  <span id="group-member-object" style={{scrollMarginTop: '100px'}} />

  **GroupMember Object (per item in array):**

  | Parameter        | Type    | Description                                                 | Sample Value                                                            |
  | ---------------- | ------- | ----------------------------------------------------------- | ----------------------------------------------------------------------- |
  | `hasBlockedMe`   | boolean | Whether this user has blocked the current user              | `false`                                                                 |
  | `blockedByMe`    | boolean | Whether the current user has blocked this user              | `false`                                                                 |
  | `deactivatedAt`  | number  | Timestamp when user was deactivated (0 if active)           | `0`                                                                     |
  | `uid`            | string  | Unique identifier of the user                               | `"cometchat-uid-7"`                                                     |
  | `joinedAt`       | number  | Unix timestamp when the user joined the group               | `1772428121`                                                            |
  | `name`           | string  | Display name of the user                                    | `"Henry Marino"`                                                        |
  | `avatar`         | string  | URL to user's avatar image                                  | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-7.webp"` |
  | `status`         | string  | User's online status                                        | `"online"`                                                              |
  | `role`           | string  | User's role                                                 | `"default"`                                                             |
  | `statusMessage`  | string  | User's status message                                       | `"Testing CometChat SDK"`                                               |
  | `lastActiveAt`   | number  | Unix timestamp of last activity                             | `1772427635`                                                            |
  | `scope`          | string  | Member's scope in the group (admin, moderator, participant) | `"participant"`                                                         |
  | `conversationId` | string  | Conversation ID between this user and logged-in user        | `"cometchat-uid-6_user_cometchat-uid-7"`                                |
  | `guid`           | string  | GUID of the group                                           | `"group_1772427551785"`                                                 |
</Accordion>

## Best Practices

<AccordionGroup>
  <Accordion title="Use pagination for large groups">
    Always use `fetchNext()` with a reasonable `setLimit()` value (e.g., 20-30). For groups with many members, paginate through results rather than fetching all at once.
  </Accordion>

  <Accordion title="Reuse the same request instance for pagination">
    The `GroupMembersRequest` object maintains an internal cursor. Creating a new instance resets the cursor. Reuse the same instance across `fetchNext()` calls.
  </Accordion>

  <Accordion title="Filter by scope for admin views">
    Use `setScopes()` to fetch only admins or moderators when building admin management UIs, rather than fetching all members and filtering client-side.
  </Accordion>
</AccordionGroup>

## Troubleshooting

<AccordionGroup>
  <Accordion title="fetchNext returns empty list">
    Verify the GUID is correct and the logged-in user is a member of the group. Non-members cannot fetch the member list of private groups.
  </Accordion>

  <Accordion title="Same members returned on each fetchNext call">
    Ensure you're reusing the same `GroupMembersRequest` instance. Creating a new builder resets the pagination cursor.
  </Accordion>
</AccordionGroup>

***

## Next Steps

<CardGroup cols={2}>
  <Card title="Add Members" icon="user-plus" href="/sdk/react-native/group-add-members">
    Add new members to a group
  </Card>

  <Card title="Kick/Ban Members" icon="gavel" href="/sdk/react-native/group-kick-ban-members">
    Kick, ban, and unban group members
  </Card>

  <Card title="Change Member Scope" icon="shield" href="/sdk/react-native/group-change-member-scope">
    Update member roles within a group
  </Card>

  <Card title="Retrieve Groups" icon="layer-group" href="/sdk/react-native/retrieve-groups">
    Fetch group lists and group details
  </Card>
</CardGroup>
