> ## 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 Group Members

> Fetch and filter CometChat group members with the Android SDK using request builders, GUIDs, scopes, and search.

<Accordion title="AI Integration Quick Reference">
  ```kotlin theme={null}
  // Fetch group members with filters
  val groupMembersRequest = GroupMembersRequestBuilder("GUID")
      .setLimit(30)
      .setSearchKeyword("search")
      .setScopes(listOf("admin", "moderator"))
      .build()

  groupMembersRequest.fetchNext(object : CallbackListener<List<GroupMember>>() {
      override fun onSuccess(members: List<GroupMember>) { }
      override fun onError(e: CometChatException) { }
  })
  ```
</Accordion>

## Retrieve the List of Group Members

Use `GroupMembersRequestBuilder` with the group's GUID to configure filters, then call `fetchNext()`. Each result is a [`GroupMember`](/sdk/reference/entities#groupmember) object.

### Set Limit

Set the number of members to fetch per request.

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    GroupMembersRequest groupMembersRequest = new GroupMembersRequest.GroupMembersRequestBuilder(GUID)
      .setLimit(limit)
      .build();
    ```
  </Tab>

  <Tab title="Kotlin">
    ```kotlin theme={null}
    val groupMembersRequest = GroupMembersRequestBuilder(GUID)
      .setLimit(limit)
      .build()
    ```
  </Tab>
</Tabs>

### Set Search Keyword

Filter members by a search string.

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    GroupMembersRequest groupMembersRequest = new GroupMembersRequest.GroupMembersRequestBuilder(GUID)
      .setSearchKeyword("abc")
      .build();
    ```
  </Tab>

  <Tab title="Kotlin">
    ```kotlin theme={null}
    val groupMembersRequest = GroupMembersRequestBuilder(GUID)
      .setSearchKeyword("abc")
      .build()
    ```
  </Tab>
</Tabs>

### Set Scopes

Filter members by scope (e.g., `"admin"`, `"moderator"`, `"participant"`).

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    List<String> scopes = new ArrayList<>();
    scopes.add("admin");
    scopes.add("moderator");
    GroupMembersRequest groupMembersRequest = new GroupMembersRequest.GroupMembersRequestBuilder(GUID)
      .setScopes(scopes)
      .build();
    ```
  </Tab>

  <Tab title="Kotlin">
    ```kotlin theme={null}
    val scopes: MutableList<String> = ArrayList()
    scopes.add("admin")
    scopes.add("moderator")
    val groupMembersRequest = GroupMembersRequestBuilder(GUID)
      .setScopes(scopes)
      .build()
    ```
  </Tab>
</Tabs>

### Fetch Members

After configuring the builder, call `build()` then `fetchNext()` to retrieve members.

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    private GroupMembersRequest groupMembersRequest = null;
    private String GUID = "GUID";
    private int limit = 30;

    groupMembersRequest = new GroupMembersRequest.GroupMembersRequestBuilder(GUID).setLimit(limit).build();

    groupMembersRequest.fetchNext(new CometChat.CallbackListener<List<GroupMember>>(){
      @Override
      public void onSuccess(List<GroupMember> list) {
        Log.d(TAG, "Group Member list fetched successfully: " + list.size());
      }
      @Override
      public void onError(CometChatException e) {
        Log.d(TAG, "Group Member list fetching failed with exception: " + e.getMessage());
      }
    });  
    ```
  </Tab>

  <Tab title="Kotlin">
    ```kotlin theme={null}
    var groupMembersRequest:GroupMembersRequest?=null
    val GUID:String="GUID"
    val limit:Int=30

    groupMembersRequest=GroupMembersRequest.GroupMembersRequestBuilder(GUID).setLimit(limit).build()

    groupMembersRequest?.fetchNext(object:CometChat.CallbackListener<List<GroupMember>>(){
      override fun onSuccess(p0: List<GroupMember>?){
        Log.d(TAG, "Group Member list fetched successfully: " + p0?.size)
      }
      override fun onError(p0: CometChatException?) {
        Log.d(TAG, "Group Member list fetching failed with exception: " + p0?.message)
      }
    })
    ```
  </Tab>
</Tabs>

## GroupMember Payload Structure

<Accordion title="GroupMember Object">
  The [`GroupMember`](/sdk/reference/entities#groupmember) object extends [`User`](/sdk/reference/entities#user) and contains all User fields plus group-specific fields:

  | Parameter       | Type           | Description                                                                    |
  | --------------- | -------------- | ------------------------------------------------------------------------------ |
  | `uid`           | String         | Unique identifier of the user                                                  |
  | `name`          | String         | Display name of the user                                                       |
  | `avatar`        | String         | URL to user's profile picture                                                  |
  | `link`          | String         | URL to user's profile page                                                     |
  | `role`          | String         | User role for access control                                                   |
  | `metadata`      | JSONObject     | Custom data set by developer                                                   |
  | `status`        | String         | User online status. Values: `"online"`, `"offline"`                            |
  | `statusMessage` | String         | Custom status message                                                          |
  | `lastActiveAt`  | long           | Unix timestamp of last activity                                                |
  | `hasBlockedMe`  | boolean        | Whether this user has blocked the logged-in user                               |
  | `blockedByMe`   | boolean        | Whether the logged-in user has blocked this user                               |
  | `tags`          | Array\<String> | List of tags for user identification                                           |
  | `deactivatedAt` | long           | Unix timestamp when user was deactivated (0 if active)                         |
  | `scope`         | String         | Member's scope in the group. Values: `"admin"`, `"moderator"`, `"participant"` |
  | `joinedAt`      | long           | Unix timestamp when member joined the group                                    |

  **Sample GroupMember Object:**

  ```json theme={null}
  {
    "uid": "user_123",
    "name": "John Doe",
    "avatar": "https://example.com/avatar.png",
    "link": "https://example.com/profile",
    "role": "default",
    "metadata": {
      "department": "Engineering",
      "title": "Senior Developer"
    },
    "status": "online",
    "statusMessage": "Available",
    "lastActiveAt": 1699900000,
    "hasBlockedMe": false,
    "blockedByMe": false,
    "tags": ["premium", "verified"],
    "deactivatedAt": 0,
    "scope": "admin",
    "joinedAt": 1699850000
  }
  ```
</Accordion>

***

## Next Steps

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

  <Card title="Kick Member" icon="user-minus" href="/sdk/android/group-kick-member">
    Remove members from groups
  </Card>

  <Card title="Change Member Scope" icon="user-shield" href="/sdk/android/group-change-member-scope">
    Update member roles and permissions
  </Card>

  <Card title="Retrieve Groups" icon="list" href="/sdk/android/retrieve-groups">
    Fetch list of available groups
  </Card>
</CardGroup>
