Skip to main content
Quick Reference for AI Agents & Developers
Conversations provide the last messages for every one-on-one and group conversation the logged-in user is a part of. This makes it easy for you to build a Recent Chat list.
Available via: SDK | REST API | UI Kits

Retrieve List of Conversations

In other words, as a logged-in user, how do I retrieve the latest conversations that I’ve been a part of? To fetch the list of conversations, you can use the ConversationsRequest class. To use this class i.e. to create an object of the ConversationsRequest class, you need to use the ConversationsRequestBuilder class. The ConversationsRequestBuilder class allows you to set the parameters based on which the conversations are to be fetched. The ConversationsRequestBuilder class allows you to set the below parameters:

Set Limit

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

Set Conversation Type

This method can be used to fetch user or group conversations specifically. The conversationType variable can hold one of the below two values:
  • user - Only fetches user conversation.
  • group - Only fetches group conversations.
If none is set, the list of conversations will include both user and group conversations.
On SuccessfetchNext() returns an array of Conversation objects (group conversations only):Conversation Object (per item in array):
lastMessage Object:
lastMessage.sender Object:
lastMessage.receiver Object (Group):
lastMessage.data Object:
lastMessage.data.entities Object:
lastMessage.data.entities.sender Object:
lastMessage.data.entities.sender.entity Object:
lastMessage.data.entities.receiver Object:
lastMessage.data.entities.receiver.entity Object:
lastMessage.data.metadata Object:
lastMessage.data.metadata.@injected Object:
lastMessage.data.metadata.@injected.extensions Object:
lastMessage.data.metadata.@injected.extensions.link-preview Object:
lastMessage.metadata Object:
lastMessage.metadata.@injected Object:
lastMessage.metadata.@injected.extensions Object:
lastMessage.metadata.@injected.extensions.link-preview Object:
conversationWith Object (Group):

With User and Group Tags

This method can be used to fetch the user/group tags in the Conversation Object. By default the value is false.
withUserAndGroupTags(true) adds the tags array to the conversationWith object (user/group tags). The tags you see inside lastMessage.data.entities and sender/receiver are part of the message payload, not the conversation’s conversationWith object.
On SuccessfetchNext() returns an array of Conversation objects with user/group tags:Conversation Object (per item in array):
lastMessage Object:
lastMessage.mentionedUsers Array (per item):
lastMessage.sender Object:
lastMessage.receiver Object:
lastMessage.data Object:
lastMessage.data.mentions Object (keyed by UID):
lastMessage.data.entities Object:
lastMessage.data.entities.sender Object:
lastMessage.data.entities.sender.entity Object:
lastMessage.data.entities.receiver Object:
lastMessage.data.entities.receiver.entity Object:
lastMessage.data.metadata Object:
lastMessage.data.metadata.@injected Object:
lastMessage.data.metadata.@injected.extensions Object:
lastMessage.data.metadata.@injected.extensions.link-preview Object:
lastMessage.metadata Object:
lastMessage.metadata.@injected Object:
lastMessage.metadata.@injected.extensions Object:
lastMessage.metadata.@injected.extensions.link-preview Object:
conversationWith Object (User with tags):

Set User Tags

This method fetches user conversations that have the specified tags.
On SuccessfetchNext() returns an array of Conversation objects filtered by user tags:Conversation Object (per item in array):
lastMessage Object:
lastMessage.sender Object:
lastMessage.receiver Object:
lastMessage.data Object:
lastMessage.data.entities Object:
lastMessage.data.entities.sender Object:
lastMessage.data.entities.sender.entity Object:
lastMessage.data.entities.receiver Object:
lastMessage.data.entities.receiver.entity Object:
lastMessage.data.metadata Object:
lastMessage.data.metadata.@injected Object:
lastMessage.data.metadata.@injected.extensions Object:
lastMessage.data.metadata.@injected.extensions.link-preview Object:
lastMessage.metadata Object:
lastMessage.metadata.@injected Object:
lastMessage.metadata.@injected.extensions Object:
lastMessage.metadata.@injected.extensions.link-preview Object:
conversationWith Object (User):

Set Group Tags

This method fetches group conversations that have the specified tags.
On SuccessfetchNext() returns an array of Conversation objects filtered by group tags:Conversation Object (per item in array):
lastMessage Object:
lastMessage.sender Object:
lastMessage.receiver Object (Group with tags):
conversationWith Object (Group):

With Tags

This method makes sure that the tags associated with the conversations are returned along with the other details of the conversations. The default value for this parameter is false.
On SuccessfetchNext() returns an array of Conversation objects with conversation tags:Conversation Object (per item in array):
lastMessage Object:
lastMessage.mentionedUsers Array (per item):
lastMessage.sender Object:
lastMessage.receiver Object:
lastMessage.data Object:
lastMessage.data.mentions Object (keyed by UID):
lastMessage.data.entities Object:
lastMessage.data.entities.sender Object:
lastMessage.data.entities.sender.entity Object:
lastMessage.data.entities.receiver Object:
lastMessage.data.entities.receiver.entity Object:
lastMessage.data.metadata Object:
lastMessage.data.metadata.@injected Object:
lastMessage.data.metadata.@injected.extensions Object:
lastMessage.data.metadata.@injected.extensions.link-preview Object:
lastMessage.metadata Object:
lastMessage.metadata.@injected Object:
lastMessage.metadata.@injected.extensions Object:
lastMessage.metadata.@injected.extensions.link-preview Object:
conversationWith Object (User):

Set Tags

This method helps you fetch the conversations based on the specified tags.
On SuccessfetchNext() returns an array of Conversation objects filtered by conversation tags:Conversation Object (per item in array):
lastMessage Object:
lastMessage.mentionedUsers Array (per item):
lastMessage.sender Object:
lastMessage.receiver Object:
lastMessage.data Object:
lastMessage.data.mentions Object (keyed by UID):
lastMessage.data.entities Object:
lastMessage.data.entities.sender Object:
lastMessage.data.entities.sender.entity Object:
lastMessage.data.entities.receiver Object:
lastMessage.data.entities.receiver.entity Object:
lastMessage.data.metadata Object:
lastMessage.data.metadata.@injected Object:
lastMessage.data.metadata.@injected.extensions Object:
lastMessage.data.metadata.@injected.extensions.link-preview Object:
lastMessage.metadata Object:
lastMessage.metadata.@injected Object:
lastMessage.metadata.@injected.extensions Object:
lastMessage.metadata.@injected.extensions.link-preview Object:
conversationWith Object (User):
Blocked Users in Conversations - Quick ReferenceUsage:
  • Use both together to see blocked conversations with accurate block status
  • conversationWith contains current block status
  • lastMessage.sender/receiver contains historical data from message time (may show false even if currently blocked)

Include Blocked Users

This method helps you fetch the conversations of users whom the logged-in user has blocked.
On SuccessfetchNext() returns an array of Conversation objects (includes conversations with blocked users):Conversation Object (per item in array):
lastMessage Object:
lastMessage.metadata Object:
lastMessage.metadata.@injected Object:
lastMessage.metadata.@injected.extensions Object:
lastMessage.metadata.@injected.extensions.link-preview Object:
lastMessage.sender Object:
lastMessage.receiver Object:
lastMessage.data Object:
lastMessage.data.metadata Object:
lastMessage.data.metadata.@injected Object:
lastMessage.data.metadata.@injected.extensions Object:
lastMessage.data.metadata.@injected.extensions.link-preview Object:
lastMessage.data.entities Object:
lastMessage.data.entities.sender Object:
lastMessage.data.entities.sender.entity Object:
lastMessage.data.entities.receiver Object:
lastMessage.data.entities.receiver.entity Object:
conversationWith Object (User):

With Blocked Info

This method can be used to fetch the blocked information of the blocked user in the ConversationWith object.
On SuccessfetchNext() returns an array of Conversation objects with blocked info in conversationWith:Conversation Object (per item in array):
lastMessage Object:
lastMessage.metadata Object:
lastMessage.metadata.@injected Object:
lastMessage.metadata.@injected.extensions Object:
lastMessage.metadata.@injected.extensions.link-preview Object:
lastMessage.mentionedUsers Array (per item):
lastMessage.sender Object:
lastMessage.receiver Object:
lastMessage.data Object:
lastMessage.data.mentions Object (keyed by UID):
lastMessage.data.entities Object:
lastMessage.data.entities.sender Object:
lastMessage.data.entities.sender.entity Object:
lastMessage.data.entities.receiver Object:
lastMessage.data.entities.receiver.entity Object:
lastMessage.data.metadata Object:
lastMessage.data.metadata.@injected Object:
lastMessage.data.metadata.@injected.extensions Object:
lastMessage.data.metadata.@injected.extensions.link-preview Object:
conversationWith Object (User with blocked info):

Search Conversations

This method helps you search for a conversation based on a User or Group name.
This feature is only available with Conversation & Advanced Search. The Conversation & Advanced Search is only available in Advanced & Custom plans. If you’re already on one of these plans, please enable the Conversation & Advanced Search from CometChat Dashboard (Open your app, navigate to Chats -> Settings -> General Configuration)
On SuccessfetchNext() returns an array of Conversation objects matching the search keyword:Conversation Object (per item in array):
lastMessage Object (Action Message):
lastMessage.actionBy Object:
lastMessage.actionFor Object (Group):
lastMessage.actionOn Object (User):
lastMessage.data Object:
lastMessage.data.entities Object:
lastMessage.data.entities.by Object:
lastMessage.data.entities.by.entity Object:
lastMessage.data.entities.for Object:
lastMessage.data.entities.for.entity Object:
lastMessage.data.entities.on Object:
lastMessage.data.entities.on.entity Object:
conversationWith Object (Group):

Unread Conversations

This method helps you fetch unread conversations.
This feature is only available with Conversation & Advanced Search. The Conversation & Advanced Search is only available in Advanced & Custom plans. If you’re already on one of these plans, please enable the Conversation & Advanced Search from CometChat Dashboard (Open your app, navigate to Chats -> Settings -> General Configuration)
On SuccessfetchNext() returns an array of Conversation objects with unread messages:Conversation Object (per item in array):
lastMessage Object:
lastMessage.metadata Object:
lastMessage.metadata.@injected Object:
lastMessage.metadata.@injected.extensions Object:
lastMessage.metadata.@injected.extensions.link-preview Object:
lastMessage.sender Object:
lastMessage.receiver Object (Group):
lastMessage.data Object:
lastMessage.data.metadata Object:
lastMessage.data.metadata.@injected Object:
lastMessage.data.metadata.@injected.extensions Object:
lastMessage.data.metadata.@injected.extensions.link-preview Object:
lastMessage.data.entities Object:
lastMessage.data.entities.sender Object:
lastMessage.data.entities.sender.entity Object:
lastMessage.data.entities.receiver Object:
lastMessage.data.entities.receiver.entity Object:
conversationWith Object (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 ConversationsRequest class. Once you have the object of the ConversationsRequest class, you need to call the fetchNext() method. Calling this method will return a list of Conversation objects containing X number of users depending on the limit set. A Maximum of only 50 Conversations can be fetched at once.
The Conversation Object consists of the following fields:

Tag Conversation

In other words, as a logged-in user, how do I tag a conversation? To tag a specific conversation, you can use the tagConversation() method. The tagConversation() method accepts three parameters.
  1. conversationWith: UID/GUID of the user/group whose conversation you want to tag.
  2. conversationType: The conversationType variable can hold one of the below two values:
    1. user - Only fetches user conversation.
    2. group - Only fetches group conversations.
  3. tags: The tags variable will be a list of tags you want to add to a conversation.
On SuccesstagConversation() returns the updated Conversation object with the new tags:Conversation Object:
lastMessage Object:
lastMessage.metadata Object:
lastMessage.metadata.@injected Object:
lastMessage.metadata.@injected.extensions Object:
lastMessage.metadata.@injected.extensions.link-preview Object:
lastMessage.sender Object:
lastMessage.receiver Object:
lastMessage.data Object:
lastMessage.data.metadata Object:
lastMessage.data.metadata.@injected Object:
lastMessage.data.metadata.@injected.extensions Object:
lastMessage.data.metadata.@injected.extensions.link-preview Object:
lastMessage.data.entities Object:
lastMessage.data.entities.sender Object:
lastMessage.data.entities.sender.entity Object:
lastMessage.data.entities.receiver Object:
lastMessage.data.entities.receiver.entity Object:
conversationWith Object (User):
The tags for conversations are one-way. This means that if user A tags a conversation with user B, that tag will be applied to that conversation only for user A.

Retrieve Single Conversation

In other words, as a logged-in user, how do I retrieve a specific conversation? To fetch a specific conversation, you can use the getConversation method. The getConversation method accepts two parameters.
  1. conversationWith: UID/GUID of the user/group whose conversation you want to fetch.
  2. conversationType: The conversationType variable can hold one of the below two values:
  • user - Only fetches user conversation.
  • group - Only fetches group conversations.
On SuccessgetConversation() returns the Conversation object:Conversation Object:
lastMessage Object:
lastMessage.metadata Object:
lastMessage.metadata.@injected Object:
lastMessage.metadata.@injected.extensions Object:
lastMessage.metadata.@injected.extensions.link-preview Object:
lastMessage.sender Object:
lastMessage.receiver Object:
lastMessage.data Object:
lastMessage.data.metadata Object:
lastMessage.data.metadata.@injected Object:
lastMessage.data.metadata.@injected.extensions Object:
lastMessage.data.metadata.@injected.extensions.link-preview Object:
lastMessage.data.entities Object:
lastMessage.data.entities.sender Object:
lastMessage.data.entities.sender.entity Object:
lastMessage.data.entities.receiver Object:
lastMessage.data.entities.receiver.entity Object:
conversationWith Object (User):

Convert Messages to Conversations

As per our receive messages guide, for real-time messages, you will always receive Message objects and not Conversation objects. Thus, you will need a mechanism to convert the Message object to a Conversation object. You can use the getConversationFromMessage(BaseMessage message) method of the CometChatHelper class.
On SuccessgetConversationFromMessage() returns the converted Conversation object:Conversation Object:
lastMessage Object:
lastMessage.metadata Object:
lastMessage.metadata.@injected Object:
lastMessage.metadata.@injected.extensions Object:
lastMessage.metadata.@injected.extensions.link-preview Object:
lastMessage.sender Object:
lastMessage.receiver Object:
lastMessage.data Object:
lastMessage.data.metadata Object:
lastMessage.data.metadata.@injected Object:
lastMessage.data.metadata.@injected.extensions Object:
lastMessage.data.metadata.@injected.extensions.link-preview Object:
lastMessage.data.entities Object:
lastMessage.data.entities.sender Object:
lastMessage.data.entities.sender.entity Object:
lastMessage.data.entities.receiver Object:
lastMessage.data.entities.receiver.entity Object:
conversationWith Object (User):
While converting the Message object to the Conversation object, the unreadMessageCount & tags will not be available in the Conversation object. The unread message count needs to be managed in your client-side code.

Best Practices & Troubleshooting

Always use fetchNext() in a loop or on-scroll handler to paginate through conversations. Fetching all conversations at once is not supported — the maximum per request is 50. Store the ConversationsRequest object and call fetchNext() repeatedly until it returns an empty list.
Use real-time message listeners to receive new messages, then call CometChatHelper.getConversationFromMessage() to convert incoming messages into Conversation objects and update your list. Note that unreadMessageCount and tags are not available when converting from a message — manage those on the client side.
Use setTags() to categorize conversations (e.g., archivedChat, pinned). Remember that conversation tags are one-way — tagging a conversation only applies for the logged-in user, not the other participant.
Ensure the logged-in user has actually exchanged messages with the expected users or groups. Conversations only appear once at least one message has been sent. Also verify that any filters (conversation type, tags, unread) are not excluding the results you expect.
The setSearchKeyword() and setUnread() methods require the Conversation & Advanced Search feature, which is only available on Advanced and Custom plans. Enable it from the CometChat Dashboard under Chats → Settings → General Configuration.

Next Steps

Delete Conversation

Remove a conversation from the logged-in user’s conversation list.

Receive Messages

Listen for real-time messages and update your conversation list.

Typing Indicators

Show real-time typing status within conversations.

Delivery & Read Receipts

Track when messages are delivered and read.