> ## 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.

# Additional Message Filtering

> Filter messages by category, type, timestamp, tags, and other parameters using MessagesRequest in the CometChat Android SDK.

<Accordion title="AI Integration Quick Reference">
  ```kotlin theme={null}
  // Build filtered message request
  val messagesRequest = MessagesRequestBuilder()
      .setUID("user_uid")                    // User conversation
      .setLimit(50)                          // Max 100 per request
      .setCategories(listOf("message"))      // Filter by category
      .setTypes(listOf("text", "image"))     // Filter by type
      .setUnread(true)                       // Only unread messages
      .hideDeletedMessages(true)             // Exclude deleted
      .hideReplies(true)                     // Exclude threaded messages
      .build()

  // Fetch messages
  messagesRequest.fetchNext(callback)
  messagesRequest.fetchPrevious(callback)
  ```
</Accordion>

The [`MessagesRequest`](/sdk/reference/messages#basemessage) class fetches messages based on various parameters using the Builder design pattern.

To fetch messages:

1. Create a `MessagesRequestBuilder` object
2. Set your desired parameters
3. Call `build()` to get a `MessagesRequest` object
4. Call `fetchNext()` or `fetchPrevious()` to retrieve messages

| Method            | Description                                      |
| ----------------- | ------------------------------------------------ |
| `fetchNext()`     | Returns messages after the specified parameters  |
| `fetchPrevious()` | Returns messages before the specified parameters |

Messages are paginated with a maximum of 100 per request. Call `fetchPrevious()`/`fetchNext()` repeatedly on the same object to get subsequent pages.

## Filter Reference

| Method                               | Description                                                      | Default |
| ------------------------------------ | ---------------------------------------------------------------- | ------- |
| `setUID(uid)`                        | Fetch messages for a one-on-one conversation                     | —       |
| `setGUID(guid)`                      | Fetch messages for a group conversation                          | —       |
| `setLimit(n)`                        | Number of messages per request (max 100)                         | —       |
| `setMessageId(id)`                   | Fetch messages before/after a message ID                         | —       |
| `setTimestamp(ts)`                   | Fetch messages before/after a Unix timestamp                     | —       |
| `setUnread(bool)`                    | Fetch only unread messages                                       | `false` |
| `setCategories(list)`                | Filter by message categories                                     | all     |
| `setTypes(list)`                     | Filter by message types                                          | all     |
| `setParentMessageId(id)`             | Fetch messages in a specific thread                              | —       |
| `hideReplies(bool)`                  | Exclude threaded messages                                        | `false` |
| `hideDeletedMessages(bool)`          | Exclude deleted messages                                         | `false` |
| `hideQuotedMessages(bool)`           | Exclude quoted messages                                          | `false` |
| `hideMessagesFromBlockedUsers(bool)` | Exclude messages from blocked users                              | `false` |
| `setUpdatedAfter(ts)`                | Fetch messages updated after a timestamp                         | —       |
| `updatesOnly(bool)`                  | Only updated messages (use with `setUpdatedAfter`)               | `false` |
| `setTags(list)`                      | Filter by message tags                                           | —       |
| `withTags(bool)`                     | Include tag data in response                                     | `false` |
| `hasLinks(bool)`                     | Only messages with links *(Advanced Search)*                     | `false` |
| `hasAttachments(bool)`               | Only messages with attachments *(Advanced Search)*               | `false` |
| `hasReactions(bool)`                 | Only messages with reactions *(Advanced Search)*                 | `false` |
| `hasMentions(bool)`                  | Only messages with mentions *(Advanced Search)*                  | `false` |
| `setMentionedUIDs(list)`             | Only messages mentioning specific users *(Advanced Search)*      | —       |
| `setAttachmentTypes(list)`           | Only messages with specific attachment types *(Advanced Search)* | —       |

## Number of messages fetched

Set the number of messages to fetch per request using `setLimit()`. Maximum is 100.

<Tabs>
  <Tab title="Java (User)">
    ```java theme={null}
    String UID = "cometchat-uid-1";

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
    .setLimit(50)
    .setUID(UID)
    .build();
    ```
  </Tab>

  <Tab title="Java (Group)">
    ```java theme={null}
    String GUID = "cometchat-guid-1";

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
    .setLimit(50)
    .setGUID(GUID)
    .build();
    ```
  </Tab>

  <Tab title="Kotlin (User)">
    ```kotlin theme={null}
    val UID = "cometchat-uid-1"

    val messagesRequest = MessagesRequestBuilder()
      .setLimit(50)
      .setUID(UID)
      .build()
    ```
  </Tab>

  <Tab title="Kotlin (Group)">
    ```kotlin theme={null}
    val GUID = "cometchat-guid-1"

    val messagesRequest = MessagesRequestBuilder()
      .setLimit(50)
      .setGUID(GUID)
      .build() 
    ```
  </Tab>
</Tabs>

## Messages for a user conversation

Use `setUID()` to fetch messages between the logged-in user and a specific user.

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
    .setUID("cometchat-uid-1")
    .setLimit(50)
    .build();
    ```
  </Tab>

  <Tab title="Kotlin">
    ```kotlin theme={null}
    val messagesRequest = MessagesRequestBuilder()
      .setUID("cometchat-uid-1")
      .setLimit(50)
      .build()
    ```
  </Tab>
</Tabs>

## Messages for a group conversation

Use `setGUID()` to fetch messages from a group. The logged-in user must be a member of the group.

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
    .setGUID("cometchat-guid-1")
    .setLimit(50)
    .build();
    ```
  </Tab>

  <Tab title="Kotlin">
    ```kotlin theme={null}
    val messagesRequest = MessagesRequestBuilder()
      .setGUID("cometchat-guid-1")
      .setLimit(50)
      .build()
    ```
  </Tab>
</Tabs>

## Messages before/after a message

Use `setMessageId()` to fetch messages before or after a specific message ID. Use `fetchNext()` to get messages after, or `fetchPrevious()` to get messages before.

<Tabs>
  <Tab title="Java (User)">
    ```java theme={null}
    String UID = "cometchat-uid-1";

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setMessageId(100)
      .setLimit(50)
      .setUID(UID)
      .build();
    ```
  </Tab>

  <Tab title="Java (Group)">
    ```java theme={null}
    String GUID = "cometchat-guid-1";

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setMessageId(100)
      .setLimit(50)
      .setGUID(GUID)
      .build();
    ```
  </Tab>

  <Tab title="Kotlin (User)">
    ```kotlin theme={null}
    val UID = "cometchat-uid-1"

    val messagesRequest = MessagesRequestBuilder()
      .setMessageId(100)
      .setLimit(50)
      .setUID(UID)
      .build()
    ```
  </Tab>

  <Tab title="Kotlin (Group)">
    ```kotlin theme={null}
    val GUID = "cometchat-guid-1"

    val messagesRequest = MessagesRequestBuilder()
      .setMessageId(100)
      .setLimit(50)
      .setGUID(GUID)
      .build()
    ```
  </Tab>
</Tabs>

This method can be combined with `setUID()` or `setGUID()` to fetch messages around a specific message in a conversation.

## Messages before/after a given time

Use `setTimestamp()` with a Unix timestamp to fetch messages before or after a specific time.

<Tabs>
  <Tab title="Java (User)">
    ```java theme={null}
    String UID = "cometchat-uid-1";

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setTimestamp(1512687363)
      .setLimit(50)
      .setUID(UID)
      .build();
    ```
  </Tab>

  <Tab title="Java (Group)">
    ```java theme={null}
    String GUID = "cometchat-guid-1";

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setTimestamp(1512687363)
      .setLimit(50)
      .setGUID(GUID)
      .build();
    ```
  </Tab>

  <Tab title="Kotlin (User)">
    ```kotlin theme={null}
    val UID = "cometchat-uid-1"

    val messagesRequest = MessagesRequestBuilder()
      .setTimestamp(1512687363)
      .setLimit(50)
      .setUID(UID)
      .build()
    ```
  </Tab>

  <Tab title="Kotlin (Group)">
    ```kotlin theme={null}
    val GUID = "cometchat-guid-1"

    val messagesRequest = MessagesRequestBuilder()
      .setTimestamp(1512687363)
      .setLimit(50)
      .setGUID(GUID)
      .build() 
    ```
  </Tab>
</Tabs>

This method can be combined with `setUID()` or `setGUID()` to fetch messages around a specific time in a conversation.

## Unread messages

Use `setUnread(true)` to fetch only unread messages.

<Tabs>
  <Tab title="Java (User)">
    ```java theme={null}
    String UID = "cometchat-uid-1";

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setUnread(true)
      .setLimit(50)
      .setUID(UID)
      .build();
    ```
  </Tab>

  <Tab title="Java (Group)">
    ```java theme={null}
    String GUID = "cometchat-guid-1";

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setUnread(true)
      .setLimit(50)
      .setGUID(GUID)
      .build();
    ```
  </Tab>

  <Tab title="Kotlin (User)">
    ```kotlin theme={null}
    val UID = "cometchat-uid-1"

    val messagesRequest = MessagesRequestBuilder()
      .setUnread(true)
      .setLimit(50)
      .setUID(UID)
      .build()
    ```
  </Tab>

  <Tab title="Kotlin (Group)">
    ```kotlin theme={null}
    val GUID = "cometchat-guid-1"

    val messagesRequest = MessagesRequestBuilder()
      .setUnread(true)
      .setLimit(50)
      .setGUID(GUID)
      .build()
    ```
  </Tab>
</Tabs>

This method along with `setGUID()` or `setUID()` can be used to fetch unread messages for a particular group or user conversation respectively.

## Exclude messages from blocked users

Use `hideMessagesFromBlockedUsers(true)` to exclude messages from users you've blocked. Default is `false`.

<Tabs>
  <Tab title="Java (User)">
    ```java theme={null}
    String UID = "cometchat-uid-1";

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .hideMessagesFromBlockedUsers(true)
      .setUID(UID)
      .setLimit(50)
      .build(); 
    ```
  </Tab>

  <Tab title="Java (Group)">
    ```java theme={null}
    String GUID = "cometchat-guid-1";

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .hideMessagesFromBlockedUsers(true)
      .setGUID(GUID)
      .setLimit(50)
      .build();
    ```
  </Tab>

  <Tab title="Kotlin (User)">
    ```kotlin theme={null}
    val UID = "cometchat-uid-1"

    val messagesRequest = MessagesRequestBuilder()
      .hideMessagesFromBlockedUsers(true)
      .setUID(UID)
      .setLimit(50)
      .build()
    ```
  </Tab>

  <Tab title="Kotlin (Group)">
    ```kotlin theme={null}
    val GUID = "cometchat-guid-1"

    val messagesRequest = MessagesRequestBuilder()
      .hideMessagesFromBlockedUsers(true)
      .setGUID(GUID)
      .setLimit(50)
      .build()
    ```
  </Tab>
</Tabs>

This also works in group conversations where both users are members.

## Updated and received messages

Use `setUpdatedAfter()` with a Unix timestamp to fetch messages that were sent or updated after a specific time. Updated messages include those marked as read/delivered, edited, or deleted.

<Tabs>
  <Tab title="Java (User)">
    ```java theme={null}
    String UID = "cometchat-uid-1";

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setUpdatedAfter(1514321321)
      .setLimit(50)
      .setUID(UID)
      .build();
    ```
  </Tab>

  <Tab title="Java (Group)">
    ```java theme={null}
    String GUID = "cometchat-guid-1";

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setUpdatedAfter(1514321321)
      .setLimit(50)
      .setGUID(GUID)
      .build();
    ```
  </Tab>

  <Tab title="Kotlin (User)">
    ```kotlin theme={null}
    val UID = "cometchat-uid-1"

    val messagesRequest = MessagesRequestBuilder()
      .setUpdatedAfter(1514321321)
      .setLimit(50)
      .setUID(UID)
      .build()
    ```
  </Tab>

  <Tab title="Kotlin (Group)">
    ```kotlin theme={null}
    val GUID = "cometchat-guid-1"

    val messagesRequest = MessagesRequestBuilder()
      .setUpdatedAfter(1514321321)
      .setLimit(50)
      .setGUID(GUID)
      .build()
    ```
  </Tab>
</Tabs>

Useful for syncing messages with a local database — fetch only what's changed since your last sync.

## Updated messages only

Use `updatesOnly(true)` with `setUpdatedAfter()` to fetch only updated messages (not newly received ones). This method must be used together with `setUpdatedAfter()`.

<Tabs>
  <Tab title="Java (User)">
    ```java theme={null}
    String UID = "cometchat-uid-1";

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setUpdatedAfter(1514321321)
      .updatesOnly(true)
      .setLimit(50)
      .setUID(UID)
      .build();
    ```
  </Tab>

  <Tab title="Java (Group)">
    ```java theme={null}
    String GUID = "cometchat-guid-1";

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setUpdatedAfter(1514321321)
      .updatesOnly(true)
      .setLimit(50)
      .setGUID(GUID)
      .build();
    ```
  </Tab>

  <Tab title="Kotlin (User)">
    ```kotlin theme={null}
    val UID = "cometchat-uid-1"

    val messagesRequest = MessagesRequestBuilder()
      .setUpdatedAfter(1514321321)
      .updatesOnly(true)
      .setLimit(50)
      .setUID(UID)
      .build()
    ```
  </Tab>

  <Tab title="Kotlin (Group)">
    ```kotlin theme={null}
    val GUID = "cometchat-guid-1"

    val messagesRequest = MessagesRequestBuilder()
      .setUpdatedAfter(1514321321)
      .updatesOnly(true)
      .setLimit(50)
      .setGUID(GUID)
      .build()
    ```
  </Tab>
</Tabs>

## Messages for multiple categories

Use `setCategories()` with a list of category names to filter by message category. See [Message structure and hierarchy](/sdk/android/message-structure-and-hierarchy) for available categories.

<Tabs>
  <Tab title="Java (User)">
    ```java theme={null}
    String GUID = "cometchat-guid-1";
    List<String> categories = new ArrayList<>();
    categories.add("message");
    categories.add("custom");

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setCategories(categories)
      .setLimit(50)
      .setGUID(GUID)
      .build();
    ```
  </Tab>

  <Tab title="Java (Group)">
    ```java theme={null}
    String GUID = "cometchat-guid-1";
    List<String> categories = new ArrayList<>();
    categories.add("message");
    categories.add("custom");

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setCategories(categories)
      .setLimit(50)
      .setGUID(GUID)
      .build();
    ```
  </Tab>

  <Tab title="Kotlin (User)">
    ```kotlin theme={null}
    val UID = "cometchat-uid-1"
    val categories: MutableList<String> = ArrayList()
    categories.add("message")
    categories.add("custom")

    val messagesRequest = MessagesRequestBuilder()
      .setCategories(categories)
      .setLimit(50)
      .setUID(UID)
      .build()
    ```
  </Tab>

  <Tab title="Kotlin (Group)">
    ```kotlin theme={null}
    val GUID = "cometchat-guid-1"
    val categories: MutableList<String> = ArrayList()
    categories.add("message")
    categories.add("custom")

    val messagesRequest = MessagesRequestBuilder()
      .setCategories(categories)
      .setLimit(50)
      .setGUID(GUID)
      .build()
    ```
  </Tab>
</Tabs>

The above snippet fetches only messages in the `message` and `custom` categories. Use this to exclude categories like `call` and `action`.

## Messages for multiple types

Use `setTypes()` with a list of type names to filter by message type. See [Message structure and hierarchy](/sdk/android/message-structure-and-hierarchy) for available types.

<Tabs>
  <Tab title="Java (User)">
    ```java theme={null}
    String UID = "cometchat-uid-1";
    List<String> categories = new ArrayList<>();
    categories.add("message");
    List<String> types = new ArrayList<>();
    types.add("image");
    types.add("video");
    types.add("audio");
    types.add("file");

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setCategories(categories)
      .setTypes(types)
      .setLimit(50)
      .setUID(UID)
      .build();
    ```
  </Tab>

  <Tab title="Java (Group)">
    ```java theme={null}
    String GUID = "cometchat-guid-1";
    List<String> categories = new ArrayList<>();
    categories.add("message");
    List<String> types = new ArrayList<>();
    types.add("image");
    types.add("video");
    types.add("audio");
    types.add("file");

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setCategories(categories)
      .setTypes(types)
      .setLimit(50)
      .setGUID(GUID)
      .build();  
    ```
  </Tab>

  <Tab title="Kotlin (User)">
    ```kotlin theme={null}
    val UID = "cometchat-uid-1"
    val categories: MutableList<String> = ArrayList()
    categories.add("message")
    val types: MutableList<String> = ArrayList()
    types.add("image")
    types.add("video")
    types.add("audio")
    types.add("file")

    val messagesRequest = MessagesRequestBuilder()
      .setCategories(categories)
      .setTypes(types)
      .setLimit(50)
      .setUID(UID)
      .build()
    ```
  </Tab>

  <Tab title="Kotlin (Group)">
    ```kotlin theme={null}
    val GUID = "cometchat-guid-1"
    val categories: MutableList<String> = ArrayList()
    categories.add("message")
    val types: MutableList<String> = ArrayList()
    types.add("image")
    types.add("video")
    types.add("audio")
    types.add("file")

    val messagesRequest = MessagesRequestBuilder()
      .setCategories(categories)
      .setTypes(types)
      .setLimit(50)
      .setGUID(GUID)
      .build()
    ```
  </Tab>
</Tabs>

The above snippet fetches all media messages (image, video, audio, file).

## Messages for a specific thread

Use `setParentMessageId()` to fetch messages belonging to a specific thread.

<Tabs>
  <Tab title="Java (User)">
    ```java theme={null}
    String UID = "cometchat-uid-1";

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setLimit(50)
      .setUID(UID)
      .setParentMessageId(100)
      .build();
    ```
  </Tab>

  <Tab title="Java (Group)">
    ```java theme={null}
    String UID = "cometchat-uid-1";

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setLimit(50)
      .setUID(UID)
      .setParentMessageId(100)
      .build();
    ```
  </Tab>

  <Tab title="Kotlin (User)">
    ```kotlin theme={null}
    val UID = "cometchat-uid-1"
    val messagesRequest = MessagesRequestBuilder()
    .setLimit(50)
    .setUID(UID)
    .setParentMessageId(100)
    .build()
    ```
  </Tab>

  <Tab title="Kotlin (Group)">
    ```kotlin theme={null}
    val GUID = "cometchat-guid-1"

    val messagesRequest = MessagesRequestBuilder()
    .setLimit(50)
    .setGUID(GUID)
    .setParentMessageId(100)
    .build()
    ```
  </Tab>
</Tabs>

The above code snippet returns the messages that belong to the thread with parent id 100.

## Hide threaded messages in user/group conversations

Use `hideReplies(true)` to exclude threaded messages from the main conversation. Default is `false`.

<Tabs>
  <Tab title="Java (User)">
    ```java theme={null}
    String UID = "cometchat-uid-1";

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setLimit(50)
      .hideReplies(true)
      .setUID(UID)
      .build();
    ```
  </Tab>

  <Tab title="Java (Group)">
    ```java theme={null}
    String GUID = "cometchat-guid-1";

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setLimit(50)
      .hideReplies(true)
      .setGUID(GUID)
      .build();
    ```
  </Tab>

  <Tab title="Kotlin (User)">
    ```kotlin theme={null}
    val UID = "cometchat-uid-1"

    val messagesRequest = MessagesRequestBuilder()
    .setLimit(50)
    .hideReplies(true)
    .setUID(UID)
    .build()
    ```
  </Tab>

  <Tab title="Kotlin (Group)">
    ```kotlin theme={null}
    val GUID = "cometchat-guid-1"

    val messagesRequest = MessagesRequestBuilder()
    .setLimit(50)
    .hideReplies(true)
    .setGUID(GUID)
    .build()  
    ```
  </Tab>
</Tabs>

## Hide deleted messages in user/group conversations

Use `hideDeletedMessages(true)` to exclude deleted messages. Default is `false`.

<Tabs>
  <Tab title="Java (User)">
    ```java theme={null}
    String UID = "cometchat-uid-1";

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setLimit(50)
      .setUID(UID)
      .hideDeletedMessages(true)
      .build();
    ```
  </Tab>

  <Tab title="Java (Group)">
    ```java theme={null}
    String GUID = "cometchat-guid-1";

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setLimit(50)
      .setGUID(GUID)
      .hideDeletedMessages(true)
      .build();  
    ```
  </Tab>

  <Tab title="Kotlin (User)">
    ```kotlin theme={null}
    val UID = "cometchat-uid-1"

    val messagesRequest = MessagesRequestBuilder()
    .setLimit(50)
    .setUID(UID)
    .hideDeletedMessages(true)
    .build()
    ```
  </Tab>

  <Tab title="Kotlin (Group)">
    ```kotlin theme={null}
    val GUID = "cometchat-guid-1"

    val messagesRequest = MessagesRequestBuilder()
      .setLimit(50)
      .setGUID(GUID)
      .hideDeletedMessages(true)
      .build()   
    ```
  </Tab>
</Tabs>

## Hide quoted messages in user/group conversations

Use `hideQuotedMessages(true)` to exclude quoted messages. Default is `false`.

<Tabs>
  <Tab title="Java (User)">
    ```java theme={null}
    String UID = "cometchat-uid-1";

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setLimit(50)
      .setUID(UID)
      .hideQuotedMessages(true)
      .build();
    ```
  </Tab>

  <Tab title="Java (Group)">
    ```java theme={null}
    String GUID = "cometchat-guid-1";

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setLimit(50)
      .setGUID(GUID)
      .hideQuotedMessages(true)
      .build();
    ```
  </Tab>

  <Tab title="Kotlin (User)">
    ```kotlin theme={null}
    val UID = "cometchat-uid-1"

    val messagesRequest = MessagesRequestBuilder()
    .setLimit(50)
    .setUID(UID)
    .hideQuotedMessages(true)
    .build()
    ```
  </Tab>

  <Tab title="Kotlin (Group)">
    ```kotlin theme={null}
    val GUID = "cometchat-guid-1"

    val messagesRequest = MessagesRequestBuilder()
      .setLimit(50)
      .setGUID(GUID)
      .hideQuotedMessages(true)
      .build()
    ```
  </Tab>
</Tabs>

## Messages by tags

Use `setTags()` with a list of tag names to fetch only messages with those tags.

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    String UID = "cometchat-uid-1";
    List<String> tags = new ArrayList<>();
    tags.add("pinned");

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setLimit(50)
      .setUID(UID)
      .setTags(tags)
      .build();
    ```
  </Tab>

  <Tab title="Kotlin">
    ```kotlin theme={null}
    val UID = "cometchat-uid-1"
    val tags: MutableList<String> = ArrayList()
    tags.add("pinned")

    val messagesRequest = MessagesRequestBuilder()
    .setLimit(50)
    .setUID(UID)
    .setTags(tags)
    .build()
    ```
  </Tab>
</Tabs>

## Messages with tags

Use `withTags(true)` to include tag information in the response. Default is `false`.

When `withTags(true)` is set, each message's `tags` field will be populated. Access tags using `getTags()`.

| Additional Field | Getter      | Return Type    | Description                      |
| ---------------- | ----------- | -------------- | -------------------------------- |
| tags             | `getTags()` | `List<String>` | Tags associated with the message |

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    String UID = "cometchat-uid-1";

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setLimit(50)
      .setUID(UID)
      .withTags(true)
      .build();
    ```
  </Tab>

  <Tab title="Kotlin">
    ```kotlin theme={null}
    val UID = "cometchat-uid-1"

    val messagesRequest = MessagesRequestBuilder()
    .setLimit(50)
    .setUID(UID)
    .withTags(true)
    .build()
    ```
  </Tab>
</Tabs>

## Messages with links

Use `hasLinks(true)` to fetch only messages containing links. Default is `false`.

<Note>
  This feature is only available with `Conversation & Advanced Search`. The `Conversation & Advanced Search` is only available in `Advanced` & `Custom` [plans](https://www.cometchat.com/pricing). If you're already on one of these plans, please enable the `Conversation & Advanced Search` from [CometChat Dashboard](https://app.cometchat.com) (Open your app, navigate to Chats -> Settings -> General Configuration)
</Note>

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    String UID = "cometchat-uid-1";

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setLimit(50)
      .setUID(UID)
      .hasLinks(true)
      .build();
    ```
  </Tab>

  <Tab title="Kotlin">
    ```kotlin theme={null}
    val UID = "cometchat-uid-1"

    val messagesRequest = MessagesRequestBuilder()
    .setLimit(50)
    .setUID(UID)
    .hasLinks(true)
    .build()
    ```
  </Tab>
</Tabs>

## Messages with attachments

Use `hasAttachments(true)` to fetch only messages with attachments (image, audio, video, or file). Default is `false`.

<Note>
  This feature is only available with `Conversation & Advanced Search`. The `Conversation & Advanced Search` is only available in `Advanced` & `Custom` [plans](https://www.cometchat.com/pricing). If you're already on one of these plans, please enable the `Conversation & Advanced Search` from [CometChat Dashboard](https://app.cometchat.com) (Open your app, navigate to Chats -> Settings -> General Configuration)
</Note>

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    String UID = "cometchat-uid-1";

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setLimit(50)
      .setUID(UID)
      .hasAttachments(true)
      .build();
    ```
  </Tab>

  <Tab title="Kotlin">
    ```kotlin theme={null}
    val UID = "cometchat-uid-1"

    val messagesRequest = MessagesRequestBuilder()
    .setLimit(50)
    .setUID(UID)
    .hasAttachments(true)
    .build()
    ```
  </Tab>
</Tabs>

## Messages with reactions

Use `hasReactions(true)` to fetch only messages that have reactions. Default is `false`.

<Note>
  This feature is only available with `Conversation & Advanced Search`. The `Conversation & Advanced Search` is only available in `Advanced` & `Custom` [plans](https://www.cometchat.com/pricing). If you're already on one of these plans, please enable the `Conversation & Advanced Search` from [CometChat Dashboard](https://app.cometchat.com) (Open your app, navigate to Chats -> Settings -> General Configuration)
</Note>

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    String UID = "cometchat-uid-1";

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setLimit(50)
      .setUID(UID)
      .hasReactions(true)
      .build();
    ```
  </Tab>

  <Tab title="Kotlin">
    ```kotlin theme={null}
    val UID = "cometchat-uid-1"

    val messagesRequest = MessagesRequestBuilder()
    .setLimit(50)
    .setUID(UID)
    .hasReactions(true)
    .build()
    ```
  </Tab>
</Tabs>

## Messages with mentions

Use `hasMentions(true)` to fetch only messages that contain mentions. Default is `false`.

<Note>
  This feature is only available with `Conversation & Advanced Search`. The `Conversation & Advanced Search` is only available in `Advanced` & `Custom` [plans](https://www.cometchat.com/pricing). If you're already on one of these plans, please enable the `Conversation & Advanced Search` from [CometChat Dashboard](https://app.cometchat.com) (Open your app, navigate to Chats -> Settings -> General Configuration)
</Note>

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    String UID = "cometchat-uid-1";

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setLimit(50)
      .setUID(UID)
      .hasMentions(true)
      .build();
    ```
  </Tab>

  <Tab title="Kotlin">
    ```kotlin theme={null}
    val UID = "cometchat-uid-1"

    val messagesRequest = MessagesRequestBuilder()
    .setLimit(50)
    .setUID(UID)
    .hasMentions(true)
    .build()
    ```
  </Tab>
</Tabs>

## Messages with particular user mentions

Use `setMentionedUIDs()` with a list of UIDs to fetch only messages that mention those specific users.

<Note>
  This feature is only available with `Conversation & Advanced Search`. The `Conversation & Advanced Search` is only available in `Advanced` & `Custom` [plans](https://www.cometchat.com/pricing). If you're already on one of these plans, please enable the `Conversation & Advanced Search` from [CometChat Dashboard](https://app.cometchat.com) (Open your app, navigate to Chats -> Settings -> General Configuration)
</Note>

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    String UID = "cometchat-uid-1";
    List<String> mentionedUIDs = new ArrayList<>();
    mentionedUIDs.add("cometchat-uid-1");

    MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
      .setLimit(50)
      .setUID(UID)
      .setMentionedUIDs(mentionedUIDs)
      .build();
    ```
  </Tab>

  <Tab title="Kotlin">
    ```kotlin theme={null}
    val UID = "cometchat-uid-1"
    val mentionedUIDs: MutableList<String> = ArrayList()
    mentionedUIDs.add("cometchat-uid-1")

    val messagesRequest = MessagesRequestBuilder()
      .setLimit(50)
      .setUID(UID)
      .setMentionedUIDs(mentionedUIDs)
      .build()
    ```
  </Tab>
</Tabs>

## Messages with specific attachment types

Use `setAttachmentTypes()` with a list of `AttachmentType` enum values to fetch only messages with specific attachment types.

<Note>
  This feature is only available with `Conversation & Advanced Search`. The `Conversation & Advanced Search` is only available in `Advanced` & `Custom` [plans](https://www.cometchat.com/pricing). If you're already on one of these plans, please enable the `Conversation & Advanced Search` from [CometChat Dashboard](https://app.cometchat.com) (Open your app, navigate to Chats -> Settings -> General Configuration)
</Note>

<Tabs>
  <Tab title="Java">
    ```java theme={null}
    String UID = "cometchat-uid-1";
      List<AttachmentType> attachmentTypes = new ArrayList<>();
      attachmentTypes.add(AttachmentType.IMAGE);
      attachmentTypes.add(AttachmentType.FILE);

      MessagesRequest messagesRequest = new MessagesRequest.MessagesRequestBuilder()
          .setLimit(50)
          .setUID("UID")
          .setAttachmentTypes(attachmentTypes)
          .build();
    ```
  </Tab>

  <Tab title="Kotlin">
    ```kotlin theme={null}
    val UID = "cometchat-uid-1" 
      val attachmentTypes: MutableList<AttachmentType> = ArrayList()
      attachmentTypes.add(AttachmentType.FILE)
      attachmentTypes.add(AttachmentType.IMAGE)

      val messagesRequest = MessagesRequestBuilder()
        .setLimit(50)
        .setUID(UID)
        .setAttachmentTypes(attachmentTypes)
        .build()
    ```
  </Tab>
</Tabs>

***

## Next Steps

<CardGroup cols={2}>
  <Card title="Receive Messages" icon="envelope" href="/sdk/android/receive-messages">
    Handle incoming messages with message listeners
  </Card>

  <Card title="Message Structure" icon="sitemap" href="/sdk/android/message-structure-and-hierarchy">
    Understand message categories and types
  </Card>

  <Card title="Threaded Messages" icon="comments" href="/sdk/android/threaded-messages">
    Implement threaded conversations with parent messages
  </Card>

  <Card title="Retrieve Conversations" icon="list" href="/sdk/android/retrieve-conversations">
    Fetch conversation list with unread counts
  </Card>
</CardGroup>
