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

# Receive A Message

> Receive real-time messages, fetch missed and unread messages, retrieve message history, and get unread message counts using the CometChat React Native SDK.

<Info>
  **Quick Reference** - Listen for incoming messages:

  ```javascript theme={null}
  CometChat.addMessageListener("listener-id", new CometChat.MessageListener({
    onTextMessageReceived: (msg) => console.log("Text:", msg),
    onMediaMessageReceived: (msg) => console.log("Media:", msg),
    onCustomMessageReceived: (msg) => console.log("Custom:", msg),
  }));

  // Don't forget to remove the listener when done
  CometChat.removeMessageListener("listener-id");
  ```
</Info>

<Note>
  Available via: [SDK](/sdk/react-native/receive-messages) | [REST API](/rest-api/messages/list-messages) | [UI Kits](/ui-kit/react-native/core-features#instant-messaging)
</Note>

Receiving messages with CometChat has two parts:

1. Adding a listener to receive [real-time messages](#real-time-messages) when your app is running
2. Calling a method to retrieve [missed messages](#missed-messages) when your app was not running

## Real-Time Messages

*In other words, as a recipient, how do I receive messages when my app is running?*

To receive real-time incoming messages, you need to register the MessageListener wherever you wish to receive the incoming messages. You can use the `addMessageListener()` method to do so.

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    let listenerID = "UNIQUE_LISTENER_ID";

    CometChat.addMessageListener(
      listenerID,
      new CometChat.MessageListener({
        onTextMessageReceived: (textMessage) => {
          console.log("Text message received successfully", textMessage);
        },
        onMediaMessageReceived: (mediaMessage) => {
          console.log("Media message received successfully", mediaMessage);
        },
        onCustomMessageReceived: (customMessage) => {
          console.log("Custom message received successfully", customMessage);
        },
      })
    );
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    let listenerID: string = "UNIQUE_LISTENER_ID";

    CometChat.addMessageListener(
      listenerID,
      new CometChat.MessageListener({
        onTextMessageReceived: (textMessage: CometChat.TextMessage) => {
          console.log("Text message received successfully", textMessage);
        },
        onMediaMessageReceived: (mediaMessage: CometChat.MediaMessage) => {
          console.log("Media message received successfully", mediaMessage);
        },
        onCustomMessageReceived: (customMessage: CometChat.CustomMessage) => {
          console.log("Custom message received successfully", customMessage);
        },
      })
    );
    ```
  </Tab>
</Tabs>

| Parameter      | Description                                   |
| -------------- | --------------------------------------------- |
| **listenerId** | An ID that uniquely identifies that listener. |

<Accordion title="Response">
  **onTextMessageReceived** — Text message object received via the listener:

  <span id="realtime-text-message-object" style={{scrollMarginTop: '100px'}} />

  **TextMessage Object:**

  | Parameter        | Type    | Description                       | Sample Value                                  |
  | ---------------- | ------- | --------------------------------- | --------------------------------------------- |
  | `id`             | string  | Unique message identifier         | `"25195"`                                     |
  | `conversationId` | string  | Conversation identifier           | `"cometchat-uid-2_user_cometchat-uid-3"`      |
  | `receiverId`     | string  | Receiver's UID                    | `"cometchat-uid-2"`                           |
  | `receiverType`   | string  | Type of receiver                  | `"user"`                                      |
  | `type`           | string  | Message type                      | `"text"`                                      |
  | `category`       | string  | Message category                  | `"message"`                                   |
  | `text`           | string  | Message text content              | `"Hello"`                                     |
  | `sentAt`         | number  | Timestamp when sent               | `1771386431`                                  |
  | `updatedAt`      | number  | Timestamp when updated            | `1771386431`                                  |
  | `sender`         | object  | Sender user details               | [See below ↓](#realtime-text-sender-object)   |
  | `receiver`       | object  | Receiver user details             | [See below ↓](#realtime-text-receiver-object) |
  | `data`           | object  | Additional message data           | [See below ↓](#realtime-text-data-object)     |
  | `metadata`       | object  | Message metadata                  | [See below ↓](#realtime-text-metadata-object) |
  | `reactions`      | array   | Message reactions                 | `[]`                                          |
  | `mentionedUsers` | array   | Users mentioned in message        | `[]`                                          |
  | `mentionedMe`    | boolean | Whether current user is mentioned | `false`                                       |

  ***

  <span id="realtime-text-sender-object" style={{scrollMarginTop: '100px'}} />

  **`sender` Object:**

  | Parameter       | Type    | Description                            | Sample Value                                                            |
  | --------------- | ------- | -------------------------------------- | ----------------------------------------------------------------------- |
  | `uid`           | string  | User's unique identifier               | `"cometchat-uid-3"`                                                     |
  | `name`          | string  | User's display name                    | `"Nancy Grace"`                                                         |
  | `avatar`        | string  | User's avatar URL                      | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-3.webp"` |
  | `role`          | string  | User's role                            | `"default"`                                                             |
  | `status`        | string  | User's online status                   | `"online"`                                                              |
  | `lastActiveAt`  | number  | Last active timestamp                  | `1771386392`                                                            |
  | `hasBlockedMe`  | boolean | Whether user has blocked current user  | `false`                                                                 |
  | `blockedByMe`   | boolean | Whether current user blocked this user | `false`                                                                 |
  | `deactivatedAt` | number  | Deactivation timestamp (0 if active)   | `0`                                                                     |
  | `tags`          | array   | User tags                              | `[]`                                                                    |

  ***

  <span id="realtime-text-receiver-object" style={{scrollMarginTop: '100px'}} />

  **`receiver` Object:**

  | Parameter       | Type    | Description                            | Sample Value                                                            |
  | --------------- | ------- | -------------------------------------- | ----------------------------------------------------------------------- |
  | `uid`           | string  | User's unique identifier               | `"cometchat-uid-2"`                                                     |
  | `name`          | string  | User's display name                    | `"George Alan"`                                                         |
  | `avatar`        | string  | User's avatar URL                      | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp"` |
  | `role`          | string  | User's role                            | `"default"`                                                             |
  | `status`        | string  | User's online status                   | `"online"`                                                              |
  | `lastActiveAt`  | number  | Last active timestamp                  | `1771386383`                                                            |
  | `hasBlockedMe`  | boolean | Whether user has blocked current user  | `false`                                                                 |
  | `blockedByMe`   | boolean | Whether current user blocked this user | `false`                                                                 |
  | `deactivatedAt` | number  | Deactivation timestamp (0 if active)   | `0`                                                                     |
  | `tags`          | array   | User tags                              | `[]`                                                                    |

  ***

  <span id="realtime-text-data-object" style={{scrollMarginTop: '100px'}} />

  **`data` Object:**

  | Parameter    | Type   | Description                  | Sample Value                                         |
  | ------------ | ------ | ---------------------------- | ---------------------------------------------------- |
  | `text`       | string | Message text                 | `"Hello"`                                            |
  | `resource`   | string | SDK resource identifier      | `"REACT_NATIVE-4_0_14-..."`                          |
  | `entities`   | object | Sender and receiver entities | [See below ↓](#realtime-text-data-entities-object)   |
  | `metadata`   | object | Injected metadata            | [See below ↓](#realtime-text-data-metadata-object)   |
  | `moderation` | object | Moderation status            | [See below ↓](#realtime-text-data-moderation-object) |

  ***

  <span id="realtime-text-data-entities-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities` Object:**

  | Parameter  | Type   | Description             | Sample Value                                                |
  | ---------- | ------ | ----------------------- | ----------------------------------------------------------- |
  | `sender`   | object | Sender entity wrapper   | [See below ↓](#realtime-text-data-entities-sender-object)   |
  | `receiver` | object | Receiver entity wrapper | [See below ↓](#realtime-text-data-entities-receiver-object) |

  ***

  <span id="realtime-text-data-entities-sender-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.sender` Object:**

  | Parameter    | Type   | Description         | Sample Value                                                     |
  | ------------ | ------ | ------------------- | ---------------------------------------------------------------- |
  | `entityType` | string | Type of entity      | `"user"`                                                         |
  | `entity`     | object | User entity details | [See below ↓](#realtime-text-data-entities-sender-entity-object) |

  ***

  <span id="realtime-text-data-entities-sender-entity-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.sender.entity` Object:**

  | Parameter      | Type   | Description              | Sample Value                                                            |
  | -------------- | ------ | ------------------------ | ----------------------------------------------------------------------- |
  | `uid`          | string | User's unique identifier | `"cometchat-uid-3"`                                                     |
  | `name`         | string | User's display name      | `"Nancy Grace"`                                                         |
  | `avatar`       | string | User's avatar URL        | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-3.webp"` |
  | `role`         | string | User's role              | `"default"`                                                             |
  | `status`       | string | User's online status     | `"online"`                                                              |
  | `lastActiveAt` | number | Last active timestamp    | `1771386392`                                                            |
  | `tags`         | array  | User tags                | `[]`                                                                    |

  ***

  <span id="realtime-text-data-entities-receiver-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.receiver` Object:**

  | Parameter    | Type   | Description         | Sample Value                                                       |
  | ------------ | ------ | ------------------- | ------------------------------------------------------------------ |
  | `entityType` | string | Type of entity      | `"user"`                                                           |
  | `entity`     | object | User entity details | [See below ↓](#realtime-text-data-entities-receiver-entity-object) |

  ***

  <span id="realtime-text-data-entities-receiver-entity-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.receiver.entity` Object:**

  | Parameter        | Type   | Description              | Sample Value                                                            |
  | ---------------- | ------ | ------------------------ | ----------------------------------------------------------------------- |
  | `uid`            | string | User's unique identifier | `"cometchat-uid-2"`                                                     |
  | `name`           | string | User's display name      | `"George Alan"`                                                         |
  | `avatar`         | string | User's avatar URL        | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp"` |
  | `role`           | string | User's role              | `"default"`                                                             |
  | `status`         | string | User's online status     | `"online"`                                                              |
  | `lastActiveAt`   | number | Last active timestamp    | `1771386383`                                                            |
  | `conversationId` | string | Conversation identifier  | `"cometchat-uid-2_user_cometchat-uid-3"`                                |
  | `tags`           | array  | User tags                | `[]`                                                                    |

  ***

  <span id="realtime-text-data-metadata-object" style={{scrollMarginTop: '100px'}} />

  **`data.metadata` Object:**

  | Parameter   | Type   | Description              | Sample Value                                                |
  | ----------- | ------ | ------------------------ | ----------------------------------------------------------- |
  | `@injected` | object | Injected extensions data | [See below ↓](#realtime-text-data-metadata-injected-object) |

  ***

  <span id="realtime-text-data-metadata-injected-object" style={{scrollMarginTop: '100px'}} />

  **`data.metadata.@injected` Object:**

  | Parameter    | Type   | Description     | Sample Value                                                  |
  | ------------ | ------ | --------------- | ------------------------------------------------------------- |
  | `extensions` | object | Extensions data | [See below ↓](#realtime-text-data-metadata-extensions-object) |

  ***

  <span id="realtime-text-data-metadata-extensions-object" style={{scrollMarginTop: '100px'}} />

  **`data.metadata.@injected.extensions` Object:**

  | Parameter      | Type   | Description            | Sample Value                                                   |
  | -------------- | ------ | ---------------------- | -------------------------------------------------------------- |
  | `link-preview` | object | Link preview extension | [See below ↓](#realtime-text-data-metadata-linkpreview-object) |

  ***

  <span id="realtime-text-data-metadata-linkpreview-object" style={{scrollMarginTop: '100px'}} />

  **`data.metadata.@injected.extensions.link-preview` Object:**

  | Parameter | Type  | Description     | Sample Value |
  | --------- | ----- | --------------- | ------------ |
  | `links`   | array | Extracted links | `[]`         |

  ***

  <span id="realtime-text-data-moderation-object" style={{scrollMarginTop: '100px'}} />

  **`data.moderation` Object:**

  | Parameter | Type   | Description       | Sample Value |
  | --------- | ------ | ----------------- | ------------ |
  | `status`  | string | Moderation status | `"approved"` |

  ***

  <span id="realtime-text-metadata-object" style={{scrollMarginTop: '100px'}} />

  **`metadata` Object:**

  | Parameter   | Type   | Description              | Sample Value                                           |
  | ----------- | ------ | ------------------------ | ------------------------------------------------------ |
  | `@injected` | object | Injected extensions data | [See below ↓](#realtime-text-metadata-injected-object) |

  ***

  <span id="realtime-text-metadata-injected-object" style={{scrollMarginTop: '100px'}} />

  **`metadata.@injected` Object:**

  | Parameter    | Type   | Description     | Sample Value                                             |
  | ------------ | ------ | --------------- | -------------------------------------------------------- |
  | `extensions` | object | Extensions data | [See below ↓](#realtime-text-metadata-extensions-object) |

  ***

  <span id="realtime-text-metadata-extensions-object" style={{scrollMarginTop: '100px'}} />

  **`metadata.@injected.extensions` Object:**

  | Parameter      | Type   | Description            | Sample Value                                              |
  | -------------- | ------ | ---------------------- | --------------------------------------------------------- |
  | `link-preview` | object | Link preview extension | [See below ↓](#realtime-text-metadata-linkpreview-object) |

  ***

  <span id="realtime-text-metadata-linkpreview-object" style={{scrollMarginTop: '100px'}} />

  **`metadata.@injected.extensions.link-preview` Object:**

  | Parameter | Type  | Description     | Sample Value |
  | --------- | ----- | --------------- | ------------ |
  | `links`   | array | Extracted links | `[]`         |

  ***

  **onMediaMessageReceived** — Media message object received via the listener:

  <span id="realtime-media-message-object" style={{scrollMarginTop: '100px'}} />

  **MediaMessage Object:**

  | Parameter        | Type    | Description                       | Sample Value                                   |
  | ---------------- | ------- | --------------------------------- | ---------------------------------------------- |
  | `id`             | string  | Unique message identifier         | `"25196"`                                      |
  | `conversationId` | string  | Conversation identifier           | `"cometchat-uid-2_user_cometchat-uid-3"`       |
  | `receiverId`     | string  | Receiver's UID                    | `"cometchat-uid-2"`                            |
  | `receiverType`   | string  | Type of receiver                  | `"user"`                                       |
  | `type`           | string  | Media type                        | `"image"`                                      |
  | `category`       | string  | Message category                  | `"message"`                                    |
  | `sentAt`         | number  | Timestamp when sent               | `1771386517`                                   |
  | `updatedAt`      | number  | Timestamp when updated            | `1771386517`                                   |
  | `sender`         | object  | Sender user details               | [See below ↓](#realtime-media-sender-object)   |
  | `receiver`       | object  | Receiver user details             | [See below ↓](#realtime-media-receiver-object) |
  | `data`           | object  | Additional message data           | [See below ↓](#realtime-media-data-object)     |
  | `reactions`      | array   | Message reactions                 | `[]`                                           |
  | `mentionedUsers` | array   | Users mentioned in message        | `[]`                                           |
  | `mentionedMe`    | boolean | Whether current user is mentioned | `false`                                        |

  ***

  <span id="realtime-media-sender-object" style={{scrollMarginTop: '100px'}} />

  **`sender` Object:**

  | Parameter       | Type    | Description                            | Sample Value                                                            |
  | --------------- | ------- | -------------------------------------- | ----------------------------------------------------------------------- |
  | `uid`           | string  | User's unique identifier               | `"cometchat-uid-3"`                                                     |
  | `name`          | string  | User's display name                    | `"Nancy Grace"`                                                         |
  | `avatar`        | string  | User's avatar URL                      | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-3.webp"` |
  | `role`          | string  | User's role                            | `"default"`                                                             |
  | `status`        | string  | User's online status                   | `"offline"`                                                             |
  | `lastActiveAt`  | number  | Last active timestamp                  | `1771386507`                                                            |
  | `hasBlockedMe`  | boolean | Whether user has blocked current user  | `false`                                                                 |
  | `blockedByMe`   | boolean | Whether current user blocked this user | `false`                                                                 |
  | `deactivatedAt` | number  | Deactivation timestamp (0 if active)   | `0`                                                                     |
  | `tags`          | array   | User tags                              | `[]`                                                                    |

  ***

  <span id="realtime-media-receiver-object" style={{scrollMarginTop: '100px'}} />

  **`receiver` Object:**

  | Parameter       | Type    | Description                            | Sample Value                                                            |
  | --------------- | ------- | -------------------------------------- | ----------------------------------------------------------------------- |
  | `uid`           | string  | User's unique identifier               | `"cometchat-uid-2"`                                                     |
  | `name`          | string  | User's display name                    | `"George Alan"`                                                         |
  | `avatar`        | string  | User's avatar URL                      | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp"` |
  | `role`          | string  | User's role                            | `"default"`                                                             |
  | `status`        | string  | User's online status                   | `"offline"`                                                             |
  | `lastActiveAt`  | number  | Last active timestamp                  | `1771386436`                                                            |
  | `hasBlockedMe`  | boolean | Whether user has blocked current user  | `false`                                                                 |
  | `blockedByMe`   | boolean | Whether current user blocked this user | `false`                                                                 |
  | `deactivatedAt` | number  | Deactivation timestamp (0 if active)   | `0`                                                                     |
  | `tags`          | array   | User tags                              | `[]`                                                                    |

  ***

  <span id="realtime-media-data-object" style={{scrollMarginTop: '100px'}} />

  **`data` Object:**

  | Parameter     | Type   | Description                  | Sample Value                                          |
  | ------------- | ------ | ---------------------------- | ----------------------------------------------------- |
  | `type`        | string | Media type                   | `"image"`                                             |
  | `category`    | string | Message category             | `"message"`                                           |
  | `url`         | string | Media file URL               | `"https://data-in.cometchat.io/..."`                  |
  | `resource`    | string | SDK resource identifier      | `"REACT_NATIVE-4_0_14-..."`                           |
  | `attachments` | array  | Media attachments            | [See below ↓](#realtime-media-data-attachments-array) |
  | `entities`    | object | Sender and receiver entities | [See below ↓](#realtime-media-data-entities-object)   |
  | `moderation`  | object | Moderation status            | [See below ↓](#realtime-media-data-moderation-object) |

  ***

  <span id="realtime-media-data-attachments-array" style={{scrollMarginTop: '100px'}} />

  **`data.attachments` Array (per item):**

  | Parameter   | Type   | Description        | Sample Value                         |
  | ----------- | ------ | ------------------ | ------------------------------------ |
  | `url`       | string | File URL           | `"https://data-in.cometchat.io/..."` |
  | `name`      | string | File name          | `"photo.jpg"`                        |
  | `mimeType`  | string | MIME type          | `"image/jpeg"`                       |
  | `extension` | string | File extension     | `"jpg"`                              |
  | `size`      | number | File size in bytes | `142099`                             |

  ***

  <span id="realtime-media-data-entities-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities` Object:**

  | Parameter  | Type   | Description             | Sample Value                                                 |
  | ---------- | ------ | ----------------------- | ------------------------------------------------------------ |
  | `sender`   | object | Sender entity wrapper   | [See below ↓](#realtime-media-data-entities-sender-object)   |
  | `receiver` | object | Receiver entity wrapper | [See below ↓](#realtime-media-data-entities-receiver-object) |

  ***

  <span id="realtime-media-data-entities-sender-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.sender` Object:**

  | Parameter    | Type   | Description         | Sample Value                                                      |
  | ------------ | ------ | ------------------- | ----------------------------------------------------------------- |
  | `entityType` | string | Type of entity      | `"user"`                                                          |
  | `entity`     | object | User entity details | [See below ↓](#realtime-media-data-entities-sender-entity-object) |

  ***

  <span id="realtime-media-data-entities-sender-entity-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.sender.entity` Object:**

  | Parameter      | Type   | Description              | Sample Value                                                            |
  | -------------- | ------ | ------------------------ | ----------------------------------------------------------------------- |
  | `uid`          | string | User's unique identifier | `"cometchat-uid-3"`                                                     |
  | `name`         | string | User's display name      | `"Nancy Grace"`                                                         |
  | `avatar`       | string | User's avatar URL        | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-3.webp"` |
  | `role`         | string | User's role              | `"default"`                                                             |
  | `status`       | string | User's online status     | `"offline"`                                                             |
  | `lastActiveAt` | number | Last active timestamp    | `1771386507`                                                            |
  | `tags`         | array  | User tags                | `[]`                                                                    |

  ***

  <span id="realtime-media-data-entities-receiver-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.receiver` Object:**

  | Parameter    | Type   | Description         | Sample Value                                                        |
  | ------------ | ------ | ------------------- | ------------------------------------------------------------------- |
  | `entityType` | string | Type of entity      | `"user"`                                                            |
  | `entity`     | object | User entity details | [See below ↓](#realtime-media-data-entities-receiver-entity-object) |

  ***

  <span id="realtime-media-data-entities-receiver-entity-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.receiver.entity` Object:**

  | Parameter        | Type   | Description              | Sample Value                                                            |
  | ---------------- | ------ | ------------------------ | ----------------------------------------------------------------------- |
  | `uid`            | string | User's unique identifier | `"cometchat-uid-2"`                                                     |
  | `name`           | string | User's display name      | `"George Alan"`                                                         |
  | `avatar`         | string | User's avatar URL        | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp"` |
  | `role`           | string | User's role              | `"default"`                                                             |
  | `status`         | string | User's online status     | `"offline"`                                                             |
  | `lastActiveAt`   | number | Last active timestamp    | `1771386436`                                                            |
  | `conversationId` | string | Conversation identifier  | `"cometchat-uid-2_user_cometchat-uid-3"`                                |
  | `tags`           | array  | User tags                | `[]`                                                                    |

  ***

  <span id="realtime-media-data-moderation-object" style={{scrollMarginTop: '100px'}} />

  **`data.moderation` Object:**

  | Parameter | Type   | Description       | Sample Value |
  | --------- | ------ | ----------------- | ------------ |
  | `status`  | string | Moderation status | `"approved"` |

  ***

  **onCustomMessageReceived** — Custom message object received via the listener:

  <span id="realtime-custom-message-object" style={{scrollMarginTop: '100px'}} />

  **CustomMessage Object:**

  | Parameter        | Type    | Description                       | Sample Value                                      |
  | ---------------- | ------- | --------------------------------- | ------------------------------------------------- |
  | `id`             | string  | Unique message identifier         | `"25197"`                                         |
  | `conversationId` | string  | Conversation identifier           | `"cometchat-uid-2_user_cometchat-uid-3"`          |
  | `receiverId`     | string  | Receiver's UID                    | `"cometchat-uid-2"`                               |
  | `receiverType`   | string  | Type of receiver                  | `"user"`                                          |
  | `type`           | string  | Custom message type               | `"test-custom"`                                   |
  | `category`       | string  | Message category                  | `"custom"`                                        |
  | `customData`     | object  | Custom data payload               | [See below ↓](#realtime-custom-customdata-object) |
  | `sentAt`         | number  | Timestamp when sent               | `1771386648`                                      |
  | `updatedAt`      | number  | Timestamp when updated            | `1771386648`                                      |
  | `sender`         | object  | Sender user details               | [See below ↓](#realtime-custom-sender-object)     |
  | `receiver`       | object  | Receiver user details             | [See below ↓](#realtime-custom-receiver-object)   |
  | `data`           | object  | Additional message data           | [See below ↓](#realtime-custom-data-object)       |
  | `metadata`       | object  | Message metadata                  | [See below ↓](#realtime-custom-metadata-object)   |
  | `reactions`      | array   | Message reactions                 | `[]`                                              |
  | `mentionedUsers` | array   | Users mentioned in message        | `[]`                                              |
  | `mentionedMe`    | boolean | Whether current user is mentioned | `false`                                           |

  ***

  <span id="realtime-custom-sender-object" style={{scrollMarginTop: '100px'}} />

  **`sender` Object:**

  | Parameter       | Type    | Description                            | Sample Value                                                            |
  | --------------- | ------- | -------------------------------------- | ----------------------------------------------------------------------- |
  | `uid`           | string  | User's unique identifier               | `"cometchat-uid-3"`                                                     |
  | `name`          | string  | User's display name                    | `"Nancy Grace"`                                                         |
  | `avatar`        | string  | User's avatar URL                      | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-3.webp"` |
  | `role`          | string  | User's role                            | `"default"`                                                             |
  | `status`        | string  | User's online status                   | `"online"`                                                              |
  | `lastActiveAt`  | number  | Last active timestamp                  | `1771386640`                                                            |
  | `hasBlockedMe`  | boolean | Whether user has blocked current user  | `false`                                                                 |
  | `blockedByMe`   | boolean | Whether current user blocked this user | `false`                                                                 |
  | `deactivatedAt` | number  | Deactivation timestamp (0 if active)   | `0`                                                                     |
  | `tags`          | array   | User tags                              | `[]`                                                                    |

  ***

  <span id="realtime-custom-receiver-object" style={{scrollMarginTop: '100px'}} />

  **`receiver` Object:**

  | Parameter       | Type    | Description                            | Sample Value                                                            |
  | --------------- | ------- | -------------------------------------- | ----------------------------------------------------------------------- |
  | `uid`           | string  | User's unique identifier               | `"cometchat-uid-2"`                                                     |
  | `name`          | string  | User's display name                    | `"George Alan"`                                                         |
  | `avatar`        | string  | User's avatar URL                      | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp"` |
  | `role`          | string  | User's role                            | `"default"`                                                             |
  | `status`        | string  | User's online status                   | `"online"`                                                              |
  | `lastActiveAt`  | number  | Last active timestamp                  | `1771386630`                                                            |
  | `hasBlockedMe`  | boolean | Whether user has blocked current user  | `false`                                                                 |
  | `blockedByMe`   | boolean | Whether current user blocked this user | `false`                                                                 |
  | `deactivatedAt` | number  | Deactivation timestamp (0 if active)   | `0`                                                                     |
  | `tags`          | array   | User tags                              | `[]`                                                                    |

  ***

  <span id="realtime-custom-customdata-object" style={{scrollMarginTop: '100px'}} />

  **`customData` Object:**

  | Parameter   | Type   | Description          | Sample Value                   |
  | ----------- | ------ | -------------------- | ------------------------------ |
  | `greeting`  | string | Custom greeting text | `"Hello from custom message!"` |
  | `timestamp` | number | Custom timestamp     | `1771386646780`                |

  ***

  <span id="realtime-custom-data-object" style={{scrollMarginTop: '100px'}} />

  **`data` Object:**

  | Parameter    | Type   | Description                  | Sample Value                                           |
  | ------------ | ------ | ---------------------------- | ------------------------------------------------------ |
  | `text`       | string | Display text                 | `"Sent a custom message"`                              |
  | `resource`   | string | SDK resource identifier      | `"REACT_NATIVE-4_0_14-..."`                            |
  | `customData` | object | Custom data payload          | [See below ↓](#realtime-custom-data-customdata-object) |
  | `entities`   | object | Sender and receiver entities | [See below ↓](#realtime-custom-data-entities-object)   |
  | `metadata`   | object | Injected metadata            | [See below ↓](#realtime-custom-data-metadata-object)   |
  | `moderation` | object | Moderation status            | [See below ↓](#realtime-custom-data-moderation-object) |

  ***

  <span id="realtime-custom-data-customdata-object" style={{scrollMarginTop: '100px'}} />

  **`data.customData` Object:**

  | Parameter   | Type   | Description          | Sample Value                   |
  | ----------- | ------ | -------------------- | ------------------------------ |
  | `greeting`  | string | Custom greeting text | `"Hello from custom message!"` |
  | `timestamp` | number | Custom timestamp     | `1771386646780`                |

  ***

  <span id="realtime-custom-data-entities-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities` Object:**

  | Parameter  | Type   | Description             | Sample Value                                                  |
  | ---------- | ------ | ----------------------- | ------------------------------------------------------------- |
  | `sender`   | object | Sender entity wrapper   | [See below ↓](#realtime-custom-data-entities-sender-object)   |
  | `receiver` | object | Receiver entity wrapper | [See below ↓](#realtime-custom-data-entities-receiver-object) |

  ***

  <span id="realtime-custom-data-entities-sender-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.sender` Object:**

  | Parameter    | Type   | Description         | Sample Value                                                       |
  | ------------ | ------ | ------------------- | ------------------------------------------------------------------ |
  | `entityType` | string | Type of entity      | `"user"`                                                           |
  | `entity`     | object | User entity details | [See below ↓](#realtime-custom-data-entities-sender-entity-object) |

  ***

  <span id="realtime-custom-data-entities-sender-entity-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.sender.entity` Object:**

  | Parameter      | Type   | Description              | Sample Value                                                            |
  | -------------- | ------ | ------------------------ | ----------------------------------------------------------------------- |
  | `uid`          | string | User's unique identifier | `"cometchat-uid-3"`                                                     |
  | `name`         | string | User's display name      | `"Nancy Grace"`                                                         |
  | `avatar`       | string | User's avatar URL        | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-3.webp"` |
  | `role`         | string | User's role              | `"default"`                                                             |
  | `status`       | string | User's online status     | `"online"`                                                              |
  | `lastActiveAt` | number | Last active timestamp    | `1771386640`                                                            |
  | `tags`         | array  | User tags                | `[]`                                                                    |

  ***

  <span id="realtime-custom-data-entities-receiver-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.receiver` Object:**

  | Parameter    | Type   | Description         | Sample Value                                                         |
  | ------------ | ------ | ------------------- | -------------------------------------------------------------------- |
  | `entityType` | string | Type of entity      | `"user"`                                                             |
  | `entity`     | object | User entity details | [See below ↓](#realtime-custom-data-entities-receiver-entity-object) |

  ***

  <span id="realtime-custom-data-entities-receiver-entity-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.receiver.entity` Object:**

  | Parameter        | Type   | Description              | Sample Value                                                            |
  | ---------------- | ------ | ------------------------ | ----------------------------------------------------------------------- |
  | `uid`            | string | User's unique identifier | `"cometchat-uid-2"`                                                     |
  | `name`           | string | User's display name      | `"George Alan"`                                                         |
  | `avatar`         | string | User's avatar URL        | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp"` |
  | `role`           | string | User's role              | `"default"`                                                             |
  | `status`         | string | User's online status     | `"online"`                                                              |
  | `lastActiveAt`   | number | Last active timestamp    | `1771386630`                                                            |
  | `conversationId` | string | Conversation identifier  | `"cometchat-uid-2_user_cometchat-uid-3"`                                |
  | `tags`           | array  | User tags                | `[]`                                                                    |

  ***

  <span id="realtime-custom-data-metadata-object" style={{scrollMarginTop: '100px'}} />

  **`data.metadata` Object:**

  | Parameter   | Type   | Description              | Sample Value                                                  |
  | ----------- | ------ | ------------------------ | ------------------------------------------------------------- |
  | `@injected` | object | Injected extensions data | [See below ↓](#realtime-custom-data-metadata-injected-object) |

  ***

  <span id="realtime-custom-data-metadata-injected-object" style={{scrollMarginTop: '100px'}} />

  **`data.metadata.@injected` Object:**

  | Parameter    | Type   | Description     | Sample Value                                                    |
  | ------------ | ------ | --------------- | --------------------------------------------------------------- |
  | `extensions` | object | Extensions data | [See below ↓](#realtime-custom-data-metadata-extensions-object) |

  ***

  <span id="realtime-custom-data-metadata-extensions-object" style={{scrollMarginTop: '100px'}} />

  **`data.metadata.@injected.extensions` Object:**

  | Parameter      | Type   | Description            | Sample Value                                                     |
  | -------------- | ------ | ---------------------- | ---------------------------------------------------------------- |
  | `link-preview` | object | Link preview extension | [See below ↓](#realtime-custom-data-metadata-linkpreview-object) |

  ***

  <span id="realtime-custom-data-metadata-linkpreview-object" style={{scrollMarginTop: '100px'}} />

  **`data.metadata.@injected.extensions.link-preview` Object:**

  | Parameter | Type  | Description     | Sample Value |
  | --------- | ----- | --------------- | ------------ |
  | `links`   | array | Extracted links | `[]`         |

  ***

  <span id="realtime-custom-data-moderation-object" style={{scrollMarginTop: '100px'}} />

  **`data.moderation` Object:**

  | Parameter | Type   | Description       | Sample Value |
  | --------- | ------ | ----------------- | ------------ |
  | `status`  | string | Moderation status | `"approved"` |

  ***

  <span id="realtime-custom-metadata-object" style={{scrollMarginTop: '100px'}} />

  **`metadata` Object:**

  | Parameter   | Type   | Description              | Sample Value                                             |
  | ----------- | ------ | ------------------------ | -------------------------------------------------------- |
  | `@injected` | object | Injected extensions data | [See below ↓](#realtime-custom-metadata-injected-object) |

  ***

  <span id="realtime-custom-metadata-injected-object" style={{scrollMarginTop: '100px'}} />

  **`metadata.@injected` Object:**

  | Parameter    | Type   | Description     | Sample Value                                               |
  | ------------ | ------ | --------------- | ---------------------------------------------------------- |
  | `extensions` | object | Extensions data | [See below ↓](#realtime-custom-metadata-extensions-object) |

  ***

  <span id="realtime-custom-metadata-extensions-object" style={{scrollMarginTop: '100px'}} />

  **`metadata.@injected.extensions` Object:**

  | Parameter      | Type   | Description            | Sample Value                                                |
  | -------------- | ------ | ---------------------- | ----------------------------------------------------------- |
  | `link-preview` | object | Link preview extension | [See below ↓](#realtime-custom-metadata-linkpreview-object) |

  ***

  <span id="realtime-custom-metadata-linkpreview-object" style={{scrollMarginTop: '100px'}} />

  **`metadata.@injected.extensions.link-preview` Object:**

  | Parameter | Type  | Description     | Sample Value |
  | --------- | ----- | --------------- | ------------ |
  | `links`   | array | Extracted links | `[]`         |
</Accordion>

<Warning>
  **Listener Cleanup:** Always remove the listener once you don't need to receive messages for a particular listener. Remove the listener in `componentWillUnmount()` or the cleanup function of a `useEffect` to prevent memory leaks.
</Warning>

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    var listenerID = "UNIQUE_LISTENER_ID";
    CometChat.removeMessageListener(listenerID);
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    let listenerID: string = "UNIQUE_LISTENER_ID";
    CometChat.removeMessageListener(listenerID);
    ```
  </Tab>
</Tabs>

<Warning>
  As a sender, you will not receive your own message in a real-time message event. However, if a user is logged-in using multiple devices, they will receive an event for their own message in other devices.
</Warning>

## Missed Messages

*In other words, as a recipient, how do I receive messages that I missed when my app was not running?*

For most use cases, you will need to add functionality to load missed messages. If you're building an on-demand or live streaming app, you may choose to skip this and fetch message history instead.

Using the same `MessagesRequest` class and the filters provided by the `MessagesRequestBuilder` class, you can fetch the messages that were sent to the logged-in user but were not delivered to them as they were offline. For this, you will require the ID of the last message received. You can either maintain it at your end or use the `getLastDeliveredMessageId()` method provided by the CometChat class. This ID needs to be passed to the `setMessageId()` method of the builder class.

Now using the `fetchNext()` method, you can fetch all the messages that were sent to the user when they were offline.

Calling the `fetchNext()` method on the same object repeatedly allows you to fetch all the offline messages for the logged-in user.

### For a Particular One-on-one Conversation

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    let UID = "UID";
    let limit = 30;
    let latestId = await CometChat.getLastDeliveredMessageId();

    var messagesRequest = new CometChat.MessagesRequestBuilder()
      .setUID(UID)
      .setMessageId(latestId)
      .setLimit(limit)
      .build();

    messagesRequest.fetchNext().then(
      (messages) => {
        console.log("Message list fetched:", messages);
      },
      (error) => {
        console.log("Message fetching failed with error:", error);
      }
    );
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    let UID: string = "UID",
      limit: number = 30,
      latestId: number = await CometChat.getLastDeliveredMessageId(),
      messagesRequest: CometChat.MessagesRequest =
        new CometChat.MessagesRequestBuilder()
          .setUID(UID)
          .setMessageId(latestId)
          .setLimit(limit)
          .build();

    messagesRequest.fetchNext().then(
      (messages: CometChat.BaseMessage[]) => {
        console.log("Message list fetched:", messages);
      },
      (error: CometChat.CometChatException) => {
        console.log("Message fetching failed with error:", error);
      }
    );
    ```
  </Tab>
</Tabs>

<Accordion title="Response">
  **On Success** — Returns an array of missed message objects:

  <span id="missed-user-message-object" style={{scrollMarginTop: '100px'}} />

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

  | Parameter        | Type    | Description                       | Sample Value                                |
  | ---------------- | ------- | --------------------------------- | ------------------------------------------- |
  | `id`             | string  | Unique message identifier         | `"25211"`                                   |
  | `conversationId` | string  | Conversation identifier           | `"cometchat-uid-2_user_cometchat-uid-3"`    |
  | `receiverId`     | string  | Receiver's UID                    | `"cometchat-uid-2"`                         |
  | `receiverType`   | string  | Type of receiver                  | `"user"`                                    |
  | `type`           | string  | Message type                      | `"text"`                                    |
  | `category`       | string  | Message category                  | `"message"`                                 |
  | `text`           | string  | Message text content              | `"Missed Message"`                          |
  | `sentAt`         | number  | Timestamp when sent               | `1771388912`                                |
  | `updatedAt`      | number  | Timestamp when updated            | `1771388912`                                |
  | `sender`         | object  | Sender user details               | [See below ↓](#missed-user-sender-object)   |
  | `receiver`       | object  | Receiver user details             | [See below ↓](#missed-user-receiver-object) |
  | `data`           | object  | Additional message data           | [See below ↓](#missed-user-data-object)     |
  | `metadata`       | object  | Message metadata                  | [See below ↓](#missed-user-metadata-object) |
  | `reactions`      | array   | Message reactions                 | `[]`                                        |
  | `mentionedUsers` | array   | Users mentioned in message        | `[]`                                        |
  | `mentionedMe`    | boolean | Whether current user is mentioned | `false`                                     |

  ***

  <span id="missed-user-sender-object" style={{scrollMarginTop: '100px'}} />

  **`sender` Object:**

  | Parameter       | Type    | Description                            | Sample Value                                                            |
  | --------------- | ------- | -------------------------------------- | ----------------------------------------------------------------------- |
  | `uid`           | string  | User's unique identifier               | `"cometchat-uid-3"`                                                     |
  | `name`          | string  | User's display name                    | `"Nancy Grace"`                                                         |
  | `avatar`        | string  | User's avatar URL                      | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-3.webp"` |
  | `role`          | string  | User's role                            | `"default"`                                                             |
  | `status`        | string  | User's online status                   | `"online"`                                                              |
  | `lastActiveAt`  | number  | Last active timestamp                  | `1771388895`                                                            |
  | `hasBlockedMe`  | boolean | Whether user has blocked current user  | `false`                                                                 |
  | `blockedByMe`   | boolean | Whether current user blocked this user | `false`                                                                 |
  | `deactivatedAt` | number  | Deactivation timestamp (0 if active)   | `0`                                                                     |
  | `tags`          | array   | User tags                              | `[]`                                                                    |

  ***

  <span id="missed-user-receiver-object" style={{scrollMarginTop: '100px'}} />

  **`receiver` Object:**

  | Parameter       | Type    | Description                            | Sample Value                                                            |
  | --------------- | ------- | -------------------------------------- | ----------------------------------------------------------------------- |
  | `uid`           | string  | User's unique identifier               | `"cometchat-uid-2"`                                                     |
  | `name`          | string  | User's display name                    | `"George Alan"`                                                         |
  | `avatar`        | string  | User's avatar URL                      | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp"` |
  | `role`          | string  | User's role                            | `"default"`                                                             |
  | `status`        | string  | User's online status                   | `"offline"`                                                             |
  | `lastActiveAt`  | number  | Last active timestamp                  | `1771388888`                                                            |
  | `hasBlockedMe`  | boolean | Whether user has blocked current user  | `false`                                                                 |
  | `blockedByMe`   | boolean | Whether current user blocked this user | `false`                                                                 |
  | `deactivatedAt` | number  | Deactivation timestamp (0 if active)   | `0`                                                                     |
  | `tags`          | array   | User tags                              | `[]`                                                                    |

  ***

  <span id="missed-user-data-object" style={{scrollMarginTop: '100px'}} />

  **`data` Object:**

  | Parameter  | Type   | Description                  | Sample Value                                     |
  | ---------- | ------ | ---------------------------- | ------------------------------------------------ |
  | `text`     | string | Message text                 | `"Missed Message"`                               |
  | `resource` | string | SDK resource identifier      | `"REACT_NATIVE-4_0_14-..."`                      |
  | `entities` | object | Sender and receiver entities | [See below ↓](#missed-user-data-entities-object) |
  | `metadata` | object | Injected metadata            | [See below ↓](#missed-user-data-metadata-object) |

  ***

  <span id="missed-user-data-entities-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities` Object:**

  | Parameter  | Type   | Description             | Sample Value                                              |
  | ---------- | ------ | ----------------------- | --------------------------------------------------------- |
  | `sender`   | object | Sender entity wrapper   | [See below ↓](#missed-user-data-entities-sender-object)   |
  | `receiver` | object | Receiver entity wrapper | [See below ↓](#missed-user-data-entities-receiver-object) |

  ***

  <span id="missed-user-data-entities-sender-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.sender` Object:**

  | Parameter    | Type   | Description         | Sample Value                                                   |
  | ------------ | ------ | ------------------- | -------------------------------------------------------------- |
  | `entityType` | string | Type of entity      | `"user"`                                                       |
  | `entity`     | object | User entity details | [See below ↓](#missed-user-data-entities-sender-entity-object) |

  ***

  <span id="missed-user-data-entities-sender-entity-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.sender.entity` Object:**

  | Parameter      | Type   | Description              | Sample Value                                                            |
  | -------------- | ------ | ------------------------ | ----------------------------------------------------------------------- |
  | `uid`          | string | User's unique identifier | `"cometchat-uid-3"`                                                     |
  | `name`         | string | User's display name      | `"Nancy Grace"`                                                         |
  | `avatar`       | string | User's avatar URL        | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-3.webp"` |
  | `role`         | string | User's role              | `"default"`                                                             |
  | `status`       | string | User's online status     | `"online"`                                                              |
  | `lastActiveAt` | number | Last active timestamp    | `1771388895`                                                            |
  | `tags`         | array  | User tags                | `[]`                                                                    |

  ***

  <span id="missed-user-data-entities-receiver-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.receiver` Object:**

  | Parameter    | Type   | Description         | Sample Value                                                     |
  | ------------ | ------ | ------------------- | ---------------------------------------------------------------- |
  | `entityType` | string | Type of entity      | `"user"`                                                         |
  | `entity`     | object | User entity details | [See below ↓](#missed-user-data-entities-receiver-entity-object) |

  ***

  <span id="missed-user-data-entities-receiver-entity-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.receiver.entity` Object:**

  | Parameter        | Type   | Description              | Sample Value                                                            |
  | ---------------- | ------ | ------------------------ | ----------------------------------------------------------------------- |
  | `uid`            | string | User's unique identifier | `"cometchat-uid-2"`                                                     |
  | `name`           | string | User's display name      | `"George Alan"`                                                         |
  | `avatar`         | string | User's avatar URL        | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp"` |
  | `role`           | string | User's role              | `"default"`                                                             |
  | `status`         | string | User's online status     | `"offline"`                                                             |
  | `lastActiveAt`   | number | Last active timestamp    | `1771388888`                                                            |
  | `conversationId` | string | Conversation identifier  | `"cometchat-uid-2_user_cometchat-uid-3"`                                |
  | `tags`           | array  | User tags                | `[]`                                                                    |

  ***

  <span id="missed-user-data-metadata-object" style={{scrollMarginTop: '100px'}} />

  **`data.metadata` Object:**

  | Parameter   | Type   | Description              | Sample Value                                              |
  | ----------- | ------ | ------------------------ | --------------------------------------------------------- |
  | `@injected` | object | Injected extensions data | [See below ↓](#missed-user-data-metadata-injected-object) |

  ***

  <span id="missed-user-data-metadata-injected-object" style={{scrollMarginTop: '100px'}} />

  **`data.metadata.@injected` Object:**

  | Parameter    | Type   | Description     | Sample Value                                                |
  | ------------ | ------ | --------------- | ----------------------------------------------------------- |
  | `extensions` | object | Extensions data | [See below ↓](#missed-user-data-metadata-extensions-object) |

  ***

  <span id="missed-user-data-metadata-extensions-object" style={{scrollMarginTop: '100px'}} />

  **`data.metadata.@injected.extensions` Object:**

  | Parameter      | Type   | Description            | Sample Value    |
  | -------------- | ------ | ---------------------- | --------------- |
  | `link-preview` | object | Link preview extension | `{"links": []}` |

  ***

  <span id="missed-user-metadata-object" style={{scrollMarginTop: '100px'}} />

  **`metadata` Object:**

  | Parameter   | Type   | Description              | Sample Value                                         |
  | ----------- | ------ | ------------------------ | ---------------------------------------------------- |
  | `@injected` | object | Injected extensions data | [See below ↓](#missed-user-metadata-injected-object) |

  ***

  <span id="missed-user-metadata-injected-object" style={{scrollMarginTop: '100px'}} />

  **`metadata.@injected` Object:**

  | Parameter    | Type   | Description     | Sample Value                                           |
  | ------------ | ------ | --------------- | ------------------------------------------------------ |
  | `extensions` | object | Extensions data | [See below ↓](#missed-user-metadata-extensions-object) |

  ***

  <span id="missed-user-metadata-extensions-object" style={{scrollMarginTop: '100px'}} />

  **`metadata.@injected.extensions` Object:**

  | Parameter      | Type   | Description            | Sample Value                                            |
  | -------------- | ------ | ---------------------- | ------------------------------------------------------- |
  | `link-preview` | object | Link preview extension | [See below ↓](#missed-user-metadata-linkpreview-object) |

  ***

  <span id="missed-user-metadata-linkpreview-object" style={{scrollMarginTop: '100px'}} />

  **`metadata.@injected.extensions.link-preview` Object:**

  | Parameter | Type  | Description     | Sample Value |
  | --------- | ----- | --------------- | ------------ |
  | `links`   | array | Extracted links | `[]`         |

  ***

  <span id="missed-user-error-object" style={{scrollMarginTop: '100px'}} />

  **On Failure — Error Object:**

  | Parameter | Type   | Description              | Sample Value                        |
  | --------- | ------ | ------------------------ | ----------------------------------- |
  | `code`    | string | Error code               | `"ERR_NOT_LOGGED_IN"`               |
  | `name`    | string | Error name               | `"Not logged in"`                   |
  | `message` | string | Error message            | `"No user is currently logged in."` |
  | `details` | object | Additional error details | `{}`                                |
</Accordion>

### For a Particular Group

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    let GUID = "GUID";
    let limit = 30;
    let latestId = await CometChat.getLastDeliveredMessageId();

    var messagesRequest = new CometChat.MessagesRequestBuilder()
      .setGUID(GUID)
      .setMessageId(latestId)
      .setLimit(limit)
      .build();

    messagesRequest.fetchNext().then(
      (messages) => {
        console.log("Message list fetched:", messages);
      },
      (error) => {
        console.log("Message fetching failed with error:", error);
      }
    );
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    let GUID: string = "GUID",
      limit: number = 30,
      latestId: number = await CometChat.getLastDeliveredMessageId(),
      messagesRequest: CometChat.MessagesRequest =
        new CometChat.MessagesRequestBuilder()
          .setGUID(GUID)
          .setMessageId(latestId)
          .setLimit(limit)
          .build();

    messagesRequest.fetchNext().then(
      (messages: CometChat.BaseMessage[]) => {
        console.log("Message list fetched:", messages);
      },
      (error: CometChat.CometChatException) => {
        console.log("Message fetching failed with error:", error);
      }
    );
    ```
  </Tab>
</Tabs>

<Accordion title="Response">
  **On Success** — Returns an array of missed group message objects:

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

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

  | Parameter        | Type    | Description                       | Sample Value                                 |
  | ---------------- | ------- | --------------------------------- | -------------------------------------------- |
  | `id`             | string  | Unique message identifier         | `"25215"`                                    |
  | `conversationId` | string  | Conversation identifier           | `"group_group_1748415903905"`                |
  | `receiverId`     | string  | Group GUID                        | `"group_1748415903905"`                      |
  | `receiverType`   | string  | Type of receiver                  | `"group"`                                    |
  | `type`           | string  | Message type                      | `"text"`                                     |
  | `category`       | string  | Message category                  | `"message"`                                  |
  | `text`           | string  | Message text content              | `"Group Missed"`                             |
  | `sentAt`         | number  | Timestamp when sent               | `1771389682`                                 |
  | `updatedAt`      | number  | Timestamp when updated            | `1771389682`                                 |
  | `sender`         | object  | Sender user details               | [See below ↓](#missed-group-sender-object)   |
  | `receiver`       | object  | Receiver group details            | [See below ↓](#missed-group-receiver-object) |
  | `data`           | object  | Additional message data           | [See below ↓](#missed-group-data-object)     |
  | `metadata`       | object  | Message metadata                  | [See below ↓](#missed-group-metadata-object) |
  | `reactions`      | array   | Message reactions                 | `[]`                                         |
  | `mentionedUsers` | array   | Users mentioned in message        | `[]`                                         |
  | `mentionedMe`    | boolean | Whether current user is mentioned | `false`                                      |

  ***

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

  **`sender` Object:**

  | Parameter       | Type    | Description                            | Sample Value                                                            |
  | --------------- | ------- | -------------------------------------- | ----------------------------------------------------------------------- |
  | `uid`           | string  | User's unique identifier               | `"cometchat-uid-3"`                                                     |
  | `name`          | string  | User's display name                    | `"Nancy Grace"`                                                         |
  | `avatar`        | string  | User's avatar URL                      | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-3.webp"` |
  | `role`          | string  | User's role                            | `"default"`                                                             |
  | `status`        | string  | User's online status                   | `"online"`                                                              |
  | `lastActiveAt`  | number  | Last active timestamp                  | `1771388895`                                                            |
  | `hasBlockedMe`  | boolean | Whether user has blocked current user  | `false`                                                                 |
  | `blockedByMe`   | boolean | Whether current user blocked this user | `false`                                                                 |
  | `deactivatedAt` | number  | Deactivation timestamp (0 if active)   | `0`                                                                     |
  | `tags`          | array   | User tags                              | `[]`                                                                    |

  ***

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

  **`receiver` Object (Group):**

  | Parameter            | Type    | Description                     | Sample Value                  |
  | -------------------- | ------- | ------------------------------- | ----------------------------- |
  | `guid`               | string  | Group's unique identifier       | `"group_1748415903905"`       |
  | `name`               | string  | Group's display name            | `"3 People Group"`            |
  | `type`               | string  | Group type                      | `"public"`                    |
  | `conversationId`     | string  | Conversation identifier         | `"group_group_1748415903905"` |
  | `owner`              | string  | Group owner UID                 | `"123456"`                    |
  | `scope`              | string  | Current user's scope in group   | `"admin"`                     |
  | `membersCount`       | number  | Total members in group          | `12`                          |
  | `onlineMembersCount` | number  | Online members count            | `1`                           |
  | `hasJoined`          | boolean | Whether current user has joined | `true`                        |
  | `isBanned`           | boolean | Whether current user is banned  | `false`                       |
  | `joinedAt`           | number  | Timestamp when user joined      | `1749203133`                  |
  | `createdAt`          | number  | Group creation timestamp        | `1748415957`                  |
  | `updatedAt`          | number  | Group update timestamp          | `1771245340`                  |

  ***

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

  **`data` Object:**

  | Parameter  | Type   | Description                  | Sample Value                                      |
  | ---------- | ------ | ---------------------------- | ------------------------------------------------- |
  | `text`     | string | Message text                 | `"Group Missed"`                                  |
  | `resource` | string | SDK resource identifier      | `"REACT_NATIVE-4_0_14-..."`                       |
  | `entities` | object | Sender and receiver entities | [See below ↓](#missed-group-data-entities-object) |
  | `metadata` | object | Injected metadata            | [See below ↓](#missed-group-data-metadata-object) |

  ***

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

  **`data.entities` Object:**

  | Parameter  | Type   | Description             | Sample Value                                               |
  | ---------- | ------ | ----------------------- | ---------------------------------------------------------- |
  | `sender`   | object | Sender entity wrapper   | [See below ↓](#missed-group-data-entities-sender-object)   |
  | `receiver` | object | Receiver entity wrapper | [See below ↓](#missed-group-data-entities-receiver-object) |

  ***

  <span id="missed-group-data-entities-sender-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.sender` Object:**

  | Parameter    | Type   | Description         | Sample Value                                                    |
  | ------------ | ------ | ------------------- | --------------------------------------------------------------- |
  | `entityType` | string | Type of entity      | `"user"`                                                        |
  | `entity`     | object | User entity details | [See below ↓](#missed-group-data-entities-sender-entity-object) |

  ***

  <span id="missed-group-data-entities-sender-entity-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.sender.entity` Object:**

  | Parameter      | Type   | Description              | Sample Value                                                            |
  | -------------- | ------ | ------------------------ | ----------------------------------------------------------------------- |
  | `uid`          | string | User's unique identifier | `"cometchat-uid-3"`                                                     |
  | `name`         | string | User's display name      | `"Nancy Grace"`                                                         |
  | `avatar`       | string | User's avatar URL        | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-3.webp"` |
  | `role`         | string | User's role              | `"default"`                                                             |
  | `status`       | string | User's online status     | `"online"`                                                              |
  | `lastActiveAt` | number | Last active timestamp    | `1771388895`                                                            |
  | `tags`         | array  | User tags                | `[]`                                                                    |

  ***

  <span id="missed-group-data-entities-receiver-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.receiver` Object:**

  | Parameter    | Type   | Description          | Sample Value                                                      |
  | ------------ | ------ | -------------------- | ----------------------------------------------------------------- |
  | `entityType` | string | Type of entity       | `"group"`                                                         |
  | `entity`     | object | Group entity details | [See below ↓](#missed-group-data-entities-receiver-entity-object) |

  ***

  <span id="missed-group-data-entities-receiver-entity-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.receiver.entity` Object:**

  | Parameter            | Type    | Description                     | Sample Value                  |
  | -------------------- | ------- | ------------------------------- | ----------------------------- |
  | `guid`               | string  | Group's unique identifier       | `"group_1748415903905"`       |
  | `name`               | string  | Group's display name            | `"3 People Group"`            |
  | `type`               | string  | Group type                      | `"public"`                    |
  | `conversationId`     | string  | Conversation identifier         | `"group_group_1748415903905"` |
  | `owner`              | string  | Group owner UID                 | `"123456"`                    |
  | `scope`              | string  | Current user's scope in group   | `"admin"`                     |
  | `membersCount`       | number  | Total members in group          | `12`                          |
  | `onlineMembersCount` | number  | Online members count            | `1`                           |
  | `hasJoined`          | boolean | Whether current user has joined | `true`                        |
  | `joinedAt`           | number  | Timestamp when user joined      | `1749203133`                  |
  | `createdAt`          | number  | Group creation timestamp        | `1748415957`                  |
  | `updatedAt`          | number  | Group update timestamp          | `1771245340`                  |

  ***

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

  **`data.metadata` Object:**

  | Parameter   | Type   | Description              | Sample Value                                               |
  | ----------- | ------ | ------------------------ | ---------------------------------------------------------- |
  | `@injected` | object | Injected extensions data | [See below ↓](#missed-group-data-metadata-injected-object) |

  ***

  <span id="missed-group-data-metadata-injected-object" style={{scrollMarginTop: '100px'}} />

  **`data.metadata.@injected` Object:**

  | Parameter    | Type   | Description     | Sample Value                      |
  | ------------ | ------ | --------------- | --------------------------------- |
  | `extensions` | object | Extensions data | `{"link-preview": {"links": []}}` |

  ***

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

  **`metadata` Object:**

  | Parameter   | Type   | Description              | Sample Value                                          |
  | ----------- | ------ | ------------------------ | ----------------------------------------------------- |
  | `@injected` | object | Injected extensions data | [See below ↓](#missed-group-metadata-injected-object) |

  ***

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

  **`metadata.@injected` Object:**

  | Parameter    | Type   | Description     | Sample Value                                            |
  | ------------ | ------ | --------------- | ------------------------------------------------------- |
  | `extensions` | object | Extensions data | [See below ↓](#missed-group-metadata-extensions-object) |

  ***

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

  **`metadata.@injected.extensions` Object:**

  | Parameter      | Type   | Description            | Sample Value                                             |
  | -------------- | ------ | ---------------------- | -------------------------------------------------------- |
  | `link-preview` | object | Link preview extension | [See below ↓](#missed-group-metadata-linkpreview-object) |

  ***

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

  **`metadata.@injected.extensions.link-preview` Object:**

  | Parameter | Type  | Description     | Sample Value |
  | --------- | ----- | --------------- | ------------ |
  | `links`   | array | Extracted links | `[]`         |

  ***

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

  **On Failure — Error Object:**

  | Parameter | Type   | Description              | Sample Value                        |
  | --------- | ------ | ------------------------ | ----------------------------------- |
  | `code`    | string | Error code               | `"ERR_NOT_LOGGED_IN"`               |
  | `name`    | string | Error name               | `"Not logged in"`                   |
  | `message` | string | Error message            | `"No user is currently logged in."` |
  | `details` | object | Additional error details | `{}`                                |
</Accordion>

## Unread Messages

*In other words, as a logged-in user, how do I fetch the messages I've not read?*

Using the `MessagesRequest` class described above, you can fetch the unread messages for the logged-in user. In order to achieve this, you need to set the `unread` variable in the builder to true using the `setUnread()` method so that only the unread messages are fetched.

### For a Particular One-on-one Conversation

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    let UID = "UID";
    let limit = 30;
    let messagesRequest = new CometChat.MessagesRequestBuilder()
      .setUID(UID)
      .setUnread(true)
      .setLimit(limit)
      .build();

    messagesRequest.fetchPrevious().then(
      (messages) => {
        console.log("Message list fetched:", messages);
      },
      (error) => {
        console.log("Message fetching failed with error:", error);
      }
    );
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    let UID: string = "UID",
      limit: number = 30,
      messagesRequest: CometChat.MessagesRequest =
        new CometChat.MessagesRequestBuilder()
          .setUID(UID)
          .setUnread(true)
          .setLimit(limit)
          .build();

    messagesRequest.fetchPrevious().then(
      (messages: CometChat.BaseMessage[]) => {
        console.log("Message list fetched:", messages);
      },
      (error: CometChat.CometChatException) => {
        console.log("Message fetching failed with error:", error);
      }
    );
    ```
  </Tab>
</Tabs>

<Accordion title="Response">
  **On Success** — Returns an array of unread message objects:

  <span id="unread-user-message-object" style={{scrollMarginTop: '100px'}} />

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

  | Parameter        | Type    | Description                       | Sample Value                                |
  | ---------------- | ------- | --------------------------------- | ------------------------------------------- |
  | `id`             | string  | Unique message identifier         | `"25216"`                                   |
  | `conversationId` | string  | Conversation identifier           | `"cometchat-uid-2_user_cometchat-uid-3"`    |
  | `receiverId`     | string  | Receiver's UID                    | `"cometchat-uid-2"`                         |
  | `receiverType`   | string  | Type of receiver                  | `"user"`                                    |
  | `type`           | string  | Message type                      | `"text"`                                    |
  | `category`       | string  | Message category                  | `"message"`                                 |
  | `text`           | string  | Message text content              | `"Unread Message"`                          |
  | `sentAt`         | number  | Timestamp when sent               | `1771390060`                                |
  | `deliveredAt`    | number  | Timestamp when delivered          | `1771390061`                                |
  | `updatedAt`      | number  | Timestamp when updated            | `1771390061`                                |
  | `sender`         | object  | Sender user details               | [See below ↓](#unread-user-sender-object)   |
  | `receiver`       | object  | Receiver user details             | [See below ↓](#unread-user-receiver-object) |
  | `data`           | object  | Additional message data           | [See below ↓](#unread-user-data-object)     |
  | `metadata`       | object  | Message metadata                  | [See below ↓](#unread-user-metadata-object) |
  | `reactions`      | array   | Message reactions                 | `[]`                                        |
  | `mentionedUsers` | array   | Users mentioned in message        | `[]`                                        |
  | `mentionedMe`    | boolean | Whether current user is mentioned | `false`                                     |

  ***

  <span id="unread-user-sender-object" style={{scrollMarginTop: '100px'}} />

  **`sender` Object:**

  | Parameter       | Type    | Description                            | Sample Value                                                            |
  | --------------- | ------- | -------------------------------------- | ----------------------------------------------------------------------- |
  | `uid`           | string  | User's unique identifier               | `"cometchat-uid-3"`                                                     |
  | `name`          | string  | User's display name                    | `"Nancy Grace"`                                                         |
  | `avatar`        | string  | User's avatar URL                      | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-3.webp"` |
  | `role`          | string  | User's role                            | `"default"`                                                             |
  | `status`        | string  | User's online status                   | `"online"`                                                              |
  | `lastActiveAt`  | number  | Last active timestamp                  | `1771388895`                                                            |
  | `hasBlockedMe`  | boolean | Whether user has blocked current user  | `false`                                                                 |
  | `blockedByMe`   | boolean | Whether current user blocked this user | `false`                                                                 |
  | `deactivatedAt` | number  | Deactivation timestamp (0 if active)   | `0`                                                                     |
  | `tags`          | array   | User tags                              | `[]`                                                                    |

  ***

  <span id="unread-user-receiver-object" style={{scrollMarginTop: '100px'}} />

  **`receiver` Object:**

  | Parameter       | Type    | Description                            | Sample Value                                                            |
  | --------------- | ------- | -------------------------------------- | ----------------------------------------------------------------------- |
  | `uid`           | string  | User's unique identifier               | `"cometchat-uid-2"`                                                     |
  | `name`          | string  | User's display name                    | `"George Alan"`                                                         |
  | `avatar`        | string  | User's avatar URL                      | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp"` |
  | `role`          | string  | User's role                            | `"default"`                                                             |
  | `status`        | string  | User's online status                   | `"offline"`                                                             |
  | `lastActiveAt`  | number  | Last active timestamp                  | `1771389781`                                                            |
  | `hasBlockedMe`  | boolean | Whether user has blocked current user  | `false`                                                                 |
  | `blockedByMe`   | boolean | Whether current user blocked this user | `false`                                                                 |
  | `deactivatedAt` | number  | Deactivation timestamp (0 if active)   | `0`                                                                     |
  | `tags`          | array   | User tags                              | `[]`                                                                    |

  ***

  <span id="unread-user-data-object" style={{scrollMarginTop: '100px'}} />

  **`data` Object:**

  | Parameter  | Type   | Description                  | Sample Value                                     |
  | ---------- | ------ | ---------------------------- | ------------------------------------------------ |
  | `text`     | string | Message text                 | `"Unread Message"`                               |
  | `resource` | string | SDK resource identifier      | `"REACT_NATIVE-4_0_14-..."`                      |
  | `entities` | object | Sender and receiver entities | [See below ↓](#unread-user-data-entities-object) |
  | `metadata` | object | Injected metadata            | [See below ↓](#unread-user-data-metadata-object) |

  ***

  <span id="unread-user-data-entities-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities` Object:**

  | Parameter  | Type   | Description             | Sample Value                                              |
  | ---------- | ------ | ----------------------- | --------------------------------------------------------- |
  | `sender`   | object | Sender entity wrapper   | [See below ↓](#unread-user-data-entities-sender-object)   |
  | `receiver` | object | Receiver entity wrapper | [See below ↓](#unread-user-data-entities-receiver-object) |

  ***

  <span id="unread-user-data-entities-sender-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.sender` Object:**

  | Parameter    | Type   | Description         | Sample Value                                                   |
  | ------------ | ------ | ------------------- | -------------------------------------------------------------- |
  | `entityType` | string | Type of entity      | `"user"`                                                       |
  | `entity`     | object | User entity details | [See below ↓](#unread-user-data-entities-sender-entity-object) |

  ***

  <span id="unread-user-data-entities-sender-entity-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.sender.entity` Object:**

  | Parameter      | Type   | Description              | Sample Value                                                            |
  | -------------- | ------ | ------------------------ | ----------------------------------------------------------------------- |
  | `uid`          | string | User's unique identifier | `"cometchat-uid-3"`                                                     |
  | `name`         | string | User's display name      | `"Nancy Grace"`                                                         |
  | `avatar`       | string | User's avatar URL        | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-3.webp"` |
  | `role`         | string | User's role              | `"default"`                                                             |
  | `status`       | string | User's online status     | `"online"`                                                              |
  | `lastActiveAt` | number | Last active timestamp    | `1771388895`                                                            |
  | `tags`         | array  | User tags                | `[]`                                                                    |

  ***

  <span id="unread-user-data-entities-receiver-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.receiver` Object:**

  | Parameter    | Type   | Description         | Sample Value                                                     |
  | ------------ | ------ | ------------------- | ---------------------------------------------------------------- |
  | `entityType` | string | Type of entity      | `"user"`                                                         |
  | `entity`     | object | User entity details | [See below ↓](#unread-user-data-entities-receiver-entity-object) |

  ***

  <span id="unread-user-data-entities-receiver-entity-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.receiver.entity` Object:**

  | Parameter        | Type   | Description              | Sample Value                                                            |
  | ---------------- | ------ | ------------------------ | ----------------------------------------------------------------------- |
  | `uid`            | string | User's unique identifier | `"cometchat-uid-2"`                                                     |
  | `name`           | string | User's display name      | `"George Alan"`                                                         |
  | `avatar`         | string | User's avatar URL        | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp"` |
  | `role`           | string | User's role              | `"default"`                                                             |
  | `status`         | string | User's online status     | `"offline"`                                                             |
  | `lastActiveAt`   | number | Last active timestamp    | `1771389781`                                                            |
  | `conversationId` | string | Conversation identifier  | `"cometchat-uid-2_user_cometchat-uid-3"`                                |
  | `tags`           | array  | User tags                | `[]`                                                                    |

  ***

  <span id="unread-user-data-metadata-object" style={{scrollMarginTop: '100px'}} />

  **`data.metadata` Object:**

  | Parameter   | Type   | Description              | Sample Value                                              |
  | ----------- | ------ | ------------------------ | --------------------------------------------------------- |
  | `@injected` | object | Injected extensions data | [See below ↓](#unread-user-data-metadata-injected-object) |

  ***

  <span id="unread-user-data-metadata-injected-object" style={{scrollMarginTop: '100px'}} />

  **`data.metadata.@injected` Object:**

  | Parameter    | Type   | Description     | Sample Value                      |
  | ------------ | ------ | --------------- | --------------------------------- |
  | `extensions` | object | Extensions data | `{"link-preview": {"links": []}}` |

  ***

  <span id="unread-user-metadata-object" style={{scrollMarginTop: '100px'}} />

  **`metadata` Object:**

  | Parameter   | Type   | Description              | Sample Value                                         |
  | ----------- | ------ | ------------------------ | ---------------------------------------------------- |
  | `@injected` | object | Injected extensions data | [See below ↓](#unread-user-metadata-injected-object) |

  ***

  <span id="unread-user-metadata-injected-object" style={{scrollMarginTop: '100px'}} />

  **`metadata.@injected` Object:**

  | Parameter    | Type   | Description     | Sample Value                                           |
  | ------------ | ------ | --------------- | ------------------------------------------------------ |
  | `extensions` | object | Extensions data | [See below ↓](#unread-user-metadata-extensions-object) |

  ***

  <span id="unread-user-metadata-extensions-object" style={{scrollMarginTop: '100px'}} />

  **`metadata.@injected.extensions` Object:**

  | Parameter      | Type   | Description            | Sample Value                                            |
  | -------------- | ------ | ---------------------- | ------------------------------------------------------- |
  | `link-preview` | object | Link preview extension | [See below ↓](#unread-user-metadata-linkpreview-object) |

  ***

  <span id="unread-user-metadata-linkpreview-object" style={{scrollMarginTop: '100px'}} />

  **`metadata.@injected.extensions.link-preview` Object:**

  | Parameter | Type  | Description     | Sample Value |
  | --------- | ----- | --------------- | ------------ |
  | `links`   | array | Extracted links | `[]`         |

  ***

  <span id="unread-user-error-object" style={{scrollMarginTop: '100px'}} />

  **On Failure — Error Object:**

  | Parameter | Type   | Description              | Sample Value                        |
  | --------- | ------ | ------------------------ | ----------------------------------- |
  | `code`    | string | Error code               | `"ERR_NOT_LOGGED_IN"`               |
  | `name`    | string | Error name               | `"Not logged in"`                   |
  | `message` | string | Error message            | `"No user is currently logged in."` |
  | `details` | object | Additional error details | `{}`                                |
</Accordion>

### For a Particular Group

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    let GUID = "GUID";
    let limit = 30;
    let messagesRequest = new CometChat.MessagesRequestBuilder()
      .setGUID(GUID)
      .setUnread(true)
      .setLimit(limit)
      .build();

    messagesRequest.fetchPrevious().then(
      (messages) => {
        console.log("Message list fetched:", messages);
      },
      (error) => {
        console.log("Message fetching failed with error:", error);
      }
    );
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    let GUID: string = "GUID",
      limit: number = 30,
      messagesRequest: CometChat.MessagesRequest =
        new CometChat.MessagesRequestBuilder()
          .setGUID(GUID)
          .setUnread(true)
          .setLimit(limit)
          .build();

    messagesRequest.fetchPrevious().then(
      (messages: CometChat.BaseMessage[]) => {
        console.log("Message list fetched:", messages);
      },
      (error: CometChat.CometChatException) => {
        console.log("Message fetching failed with error:", error);
      }
    );
    ```
  </Tab>
</Tabs>

<Accordion title="Response">
  **On Success** — Returns an array of unread group message objects:

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

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

  | Parameter        | Type    | Description                       | Sample Value                                 |
  | ---------------- | ------- | --------------------------------- | -------------------------------------------- |
  | `id`             | string  | Unique message identifier         | `"25217"`                                    |
  | `conversationId` | string  | Conversation identifier           | `"group_group_1748415903905"`                |
  | `receiverId`     | string  | Group GUID                        | `"group_1748415903905"`                      |
  | `receiverType`   | string  | Type of receiver                  | `"group"`                                    |
  | `type`           | string  | Message type                      | `"text"`                                     |
  | `category`       | string  | Message category                  | `"message"`                                  |
  | `text`           | string  | Message text content              | `"Unread Group Message"`                     |
  | `sentAt`         | number  | Timestamp when sent               | `1771390129`                                 |
  | `updatedAt`      | number  | Timestamp when updated            | `1771390129`                                 |
  | `sender`         | object  | Sender user details               | [See below ↓](#unread-group-sender-object)   |
  | `receiver`       | object  | Receiver group details            | [See below ↓](#unread-group-receiver-object) |
  | `data`           | object  | Additional message data           | [See below ↓](#unread-group-data-object)     |
  | `metadata`       | object  | Message metadata                  | [See below ↓](#unread-group-metadata-object) |
  | `reactions`      | array   | Message reactions                 | `[]`                                         |
  | `mentionedUsers` | array   | Users mentioned in message        | `[]`                                         |
  | `mentionedMe`    | boolean | Whether current user is mentioned | `false`                                      |

  ***

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

  **`sender` Object:**

  | Parameter       | Type    | Description                            | Sample Value                                                            |
  | --------------- | ------- | -------------------------------------- | ----------------------------------------------------------------------- |
  | `uid`           | string  | User's unique identifier               | `"cometchat-uid-3"`                                                     |
  | `name`          | string  | User's display name                    | `"Nancy Grace"`                                                         |
  | `avatar`        | string  | User's avatar URL                      | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-3.webp"` |
  | `role`          | string  | User's role                            | `"default"`                                                             |
  | `status`        | string  | User's online status                   | `"online"`                                                              |
  | `lastActiveAt`  | number  | Last active timestamp                  | `1771388895`                                                            |
  | `hasBlockedMe`  | boolean | Whether user has blocked current user  | `false`                                                                 |
  | `blockedByMe`   | boolean | Whether current user blocked this user | `false`                                                                 |
  | `deactivatedAt` | number  | Deactivation timestamp (0 if active)   | `0`                                                                     |
  | `tags`          | array   | User tags                              | `[]`                                                                    |

  ***

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

  **`receiver` Object (Group):**

  | Parameter            | Type    | Description                     | Sample Value                  |
  | -------------------- | ------- | ------------------------------- | ----------------------------- |
  | `guid`               | string  | Group's unique identifier       | `"group_1748415903905"`       |
  | `name`               | string  | Group's display name            | `"3 People Group"`            |
  | `type`               | string  | Group type                      | `"public"`                    |
  | `conversationId`     | string  | Conversation identifier         | `"group_group_1748415903905"` |
  | `owner`              | string  | Group owner UID                 | `"123456"`                    |
  | `scope`              | string  | Current user's scope in group   | `"admin"`                     |
  | `membersCount`       | number  | Total members in group          | `12`                          |
  | `onlineMembersCount` | number  | Online members count            | `1`                           |
  | `hasJoined`          | boolean | Whether current user has joined | `true`                        |
  | `isBanned`           | boolean | Whether current user is banned  | `false`                       |
  | `joinedAt`           | number  | Timestamp when user joined      | `1749203133`                  |
  | `createdAt`          | number  | Group creation timestamp        | `1748415957`                  |
  | `updatedAt`          | number  | Group update timestamp          | `1771245340`                  |

  ***

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

  **`data` Object:**

  | Parameter  | Type   | Description                  | Sample Value                                      |
  | ---------- | ------ | ---------------------------- | ------------------------------------------------- |
  | `text`     | string | Message text                 | `"Unread Group Message"`                          |
  | `resource` | string | SDK resource identifier      | `"REACT_NATIVE-4_0_14-..."`                       |
  | `entities` | object | Sender and receiver entities | [See below ↓](#unread-group-data-entities-object) |
  | `metadata` | object | Injected metadata            | [See below ↓](#unread-group-data-metadata-object) |

  ***

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

  **`data.entities` Object:**

  | Parameter  | Type   | Description             | Sample Value                                               |
  | ---------- | ------ | ----------------------- | ---------------------------------------------------------- |
  | `sender`   | object | Sender entity wrapper   | [See below ↓](#unread-group-data-entities-sender-object)   |
  | `receiver` | object | Receiver entity wrapper | [See below ↓](#unread-group-data-entities-receiver-object) |

  ***

  <span id="unread-group-data-entities-sender-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.sender` Object:**

  | Parameter    | Type   | Description         | Sample Value                                                    |
  | ------------ | ------ | ------------------- | --------------------------------------------------------------- |
  | `entityType` | string | Type of entity      | `"user"`                                                        |
  | `entity`     | object | User entity details | [See below ↓](#unread-group-data-entities-sender-entity-object) |

  ***

  <span id="unread-group-data-entities-sender-entity-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.sender.entity` Object:**

  | Parameter      | Type   | Description              | Sample Value                                                            |
  | -------------- | ------ | ------------------------ | ----------------------------------------------------------------------- |
  | `uid`          | string | User's unique identifier | `"cometchat-uid-3"`                                                     |
  | `name`         | string | User's display name      | `"Nancy Grace"`                                                         |
  | `avatar`       | string | User's avatar URL        | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-3.webp"` |
  | `role`         | string | User's role              | `"default"`                                                             |
  | `status`       | string | User's online status     | `"online"`                                                              |
  | `lastActiveAt` | number | Last active timestamp    | `1771388895`                                                            |
  | `tags`         | array  | User tags                | `[]`                                                                    |

  ***

  <span id="unread-group-data-entities-receiver-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.receiver` Object:**

  | Parameter    | Type   | Description          | Sample Value                                                      |
  | ------------ | ------ | -------------------- | ----------------------------------------------------------------- |
  | `entityType` | string | Type of entity       | `"group"`                                                         |
  | `entity`     | object | Group entity details | [See below ↓](#unread-group-data-entities-receiver-entity-object) |

  ***

  <span id="unread-group-data-entities-receiver-entity-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.receiver.entity` Object:**

  | Parameter            | Type    | Description                     | Sample Value                  |
  | -------------------- | ------- | ------------------------------- | ----------------------------- |
  | `guid`               | string  | Group's unique identifier       | `"group_1748415903905"`       |
  | `name`               | string  | Group's display name            | `"3 People Group"`            |
  | `type`               | string  | Group type                      | `"public"`                    |
  | `conversationId`     | string  | Conversation identifier         | `"group_group_1748415903905"` |
  | `owner`              | string  | Group owner UID                 | `"123456"`                    |
  | `scope`              | string  | Current user's scope in group   | `"admin"`                     |
  | `membersCount`       | number  | Total members in group          | `12`                          |
  | `onlineMembersCount` | number  | Online members count            | `1`                           |
  | `hasJoined`          | boolean | Whether current user has joined | `true`                        |
  | `joinedAt`           | number  | Timestamp when user joined      | `1749203133`                  |
  | `createdAt`          | number  | Group creation timestamp        | `1748415957`                  |
  | `updatedAt`          | number  | Group update timestamp          | `1771245340`                  |

  ***

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

  **`data.metadata` Object:**

  | Parameter   | Type   | Description              | Sample Value                                      |
  | ----------- | ------ | ------------------------ | ------------------------------------------------- |
  | `@injected` | object | Injected extensions data | `{"extensions": {"link-preview": {"links": []}}}` |

  ***

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

  **`metadata` Object:**

  | Parameter   | Type   | Description              | Sample Value                                          |
  | ----------- | ------ | ------------------------ | ----------------------------------------------------- |
  | `@injected` | object | Injected extensions data | [See below ↓](#unread-group-metadata-injected-object) |

  ***

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

  **`metadata.@injected` Object:**

  | Parameter    | Type   | Description     | Sample Value                                            |
  | ------------ | ------ | --------------- | ------------------------------------------------------- |
  | `extensions` | object | Extensions data | [See below ↓](#unread-group-metadata-extensions-object) |

  ***

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

  **`metadata.@injected.extensions` Object:**

  | Parameter      | Type   | Description            | Sample Value                                             |
  | -------------- | ------ | ---------------------- | -------------------------------------------------------- |
  | `link-preview` | object | Link preview extension | [See below ↓](#unread-group-metadata-linkpreview-object) |

  ***

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

  **`metadata.@injected.extensions.link-preview` Object:**

  | Parameter | Type  | Description     | Sample Value |
  | --------- | ----- | --------------- | ------------ |
  | `links`   | array | Extracted links | `[]`         |

  ***

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

  **On Failure — Error Object:**

  | Parameter | Type   | Description              | Sample Value                        |
  | --------- | ------ | ------------------------ | ----------------------------------- |
  | `code`    | string | Error code               | `"ERR_NOT_LOGGED_IN"`               |
  | `name`    | string | Error name               | `"Not logged in"`                   |
  | `message` | string | Error message            | `"No user is currently logged in."` |
  | `details` | object | Additional error details | `{}`                                |
</Accordion>

<Note>
  **Base Message:** The list of messages received is in the form of objects of `BaseMessage` class. A BaseMessage can either be an object of the `TextMessage`, `MediaMessage`, `CustomMessage`, `Action` or `Call` class. You can use the `instanceOf` operator to check the type of object.
</Note>

## Message History

*In other words, as a logged-in user, how do I fetch the complete message history?*

### For a Particular One-on-one Conversation

Using the `MessagesRequest` class and the filters for the `MessagesRequestBuilder` class as shown in the below code snippet, you can fetch the entire conversation between the logged-in user and any particular user. For this use case, it is mandatory to set the UID parameter using the `setUID()` method of the builder. This UID is the unique ID of the user for which the conversation needs to be fetched.

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    let UID = "UID";
    let limit = 30;
    let messagesRequest = new CometChat.MessagesRequestBuilder()
      .setUID(UID)
      .setLimit(limit)
      .build();

    messagesRequest.fetchPrevious().then(
      (messages) => {
        console.log("Message list fetched:", messages);
      },
      (error) => {
        console.log("Message fetching failed with error:", error);
      }
    );
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    let UID: string = "UID",
      limit: number = 30,
      messagesRequest: CometChat.MessagesRequest =
        new CometChat.MessagesRequestBuilder().setUID(UID).setLimit(limit).build();

    messagesRequest.fetchPrevious().then(
      (messages: CometChat.BaseMessage[]) => {
        console.log("Message list fetched:", messages);
      },
      (error: CometChat.CometChatException) => {
        console.log("Message fetching failed with error:", error);
      }
    );
    ```
  </Tab>
</Tabs>

Calling the `fetchPrevious()` method on the same object repeatedly allows you to fetch the entire conversation between the logged-in user and the specified user. This can be implemented with upward scrolling to display the entire conversation.

<Accordion title="Response">
  **On Success** — Returns an array of message history objects:

  <span id="history-user-message-object" style={{scrollMarginTop: '100px'}} />

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

  | Parameter        | Type    | Description                       | Sample Value                                 |
  | ---------------- | ------- | --------------------------------- | -------------------------------------------- |
  | `id`             | string  | Unique message identifier         | `"25220"`                                    |
  | `conversationId` | string  | Conversation identifier           | `"cometchat-uid-2_user_cometchat-uid-3"`     |
  | `receiverId`     | string  | Receiver's UID                    | `"cometchat-uid-2"`                          |
  | `receiverType`   | string  | Type of receiver                  | `"user"`                                     |
  | `type`           | string  | Message type                      | `"text"`                                     |
  | `category`       | string  | Message category                  | `"message"`                                  |
  | `text`           | string  | Message text content              | `"Historic 1-1"`                             |
  | `sentAt`         | number  | Timestamp when sent               | `1771390691`                                 |
  | `updatedAt`      | number  | Timestamp when updated            | `1771390691`                                 |
  | `sender`         | object  | Sender user details               | [See below ↓](#history-user-sender-object)   |
  | `receiver`       | object  | Receiver user details             | [See below ↓](#history-user-receiver-object) |
  | `data`           | object  | Additional message data           | [See below ↓](#history-user-data-object)     |
  | `metadata`       | object  | Message metadata                  | [See below ↓](#history-user-metadata-object) |
  | `reactions`      | array   | Message reactions                 | `[]`                                         |
  | `mentionedUsers` | array   | Users mentioned in message        | `[]`                                         |
  | `mentionedMe`    | boolean | Whether current user is mentioned | `false`                                      |

  ***

  <span id="history-user-sender-object" style={{scrollMarginTop: '100px'}} />

  **`sender` Object:**

  | Parameter       | Type    | Description                            | Sample Value                                                            |
  | --------------- | ------- | -------------------------------------- | ----------------------------------------------------------------------- |
  | `uid`           | string  | User's unique identifier               | `"cometchat-uid-3"`                                                     |
  | `name`          | string  | User's display name                    | `"Nancy Grace"`                                                         |
  | `avatar`        | string  | User's avatar URL                      | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-3.webp"` |
  | `role`          | string  | User's role                            | `"default"`                                                             |
  | `status`        | string  | User's online status                   | `"online"`                                                              |
  | `lastActiveAt`  | number  | Last active timestamp                  | `1771388895`                                                            |
  | `hasBlockedMe`  | boolean | Whether user has blocked current user  | `false`                                                                 |
  | `blockedByMe`   | boolean | Whether current user blocked this user | `false`                                                                 |
  | `deactivatedAt` | number  | Deactivation timestamp (0 if active)   | `0`                                                                     |
  | `tags`          | array   | User tags                              | `[]`                                                                    |

  ***

  <span id="history-user-receiver-object" style={{scrollMarginTop: '100px'}} />

  **`receiver` Object:**

  | Parameter       | Type    | Description                            | Sample Value                                                            |
  | --------------- | ------- | -------------------------------------- | ----------------------------------------------------------------------- |
  | `uid`           | string  | User's unique identifier               | `"cometchat-uid-2"`                                                     |
  | `name`          | string  | User's display name                    | `"George Alan"`                                                         |
  | `avatar`        | string  | User's avatar URL                      | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp"` |
  | `role`          | string  | User's role                            | `"default"`                                                             |
  | `status`        | string  | User's online status                   | `"offline"`                                                             |
  | `lastActiveAt`  | number  | Last active timestamp                  | `1771389781`                                                            |
  | `hasBlockedMe`  | boolean | Whether user has blocked current user  | `false`                                                                 |
  | `blockedByMe`   | boolean | Whether current user blocked this user | `false`                                                                 |
  | `deactivatedAt` | number  | Deactivation timestamp (0 if active)   | `0`                                                                     |
  | `tags`          | array   | User tags                              | `[]`                                                                    |

  ***

  <span id="history-user-data-object" style={{scrollMarginTop: '100px'}} />

  **`data` Object:**

  | Parameter  | Type   | Description                  | Sample Value                                      |
  | ---------- | ------ | ---------------------------- | ------------------------------------------------- |
  | `text`     | string | Message text                 | `"Historic 1-1"`                                  |
  | `resource` | string | SDK resource identifier      | `"REACT_NATIVE-4_0_14-..."`                       |
  | `entities` | object | Sender and receiver entities | [See below ↓](#history-user-data-entities-object) |
  | `metadata` | object | Injected metadata            | [See below ↓](#history-user-data-metadata-object) |

  ***

  <span id="history-user-data-entities-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities` Object:**

  | Parameter  | Type   | Description             | Sample Value                                               |
  | ---------- | ------ | ----------------------- | ---------------------------------------------------------- |
  | `sender`   | object | Sender entity wrapper   | [See below ↓](#history-user-data-entities-sender-object)   |
  | `receiver` | object | Receiver entity wrapper | [See below ↓](#history-user-data-entities-receiver-object) |

  ***

  <span id="history-user-data-entities-sender-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.sender` Object:**

  | Parameter    | Type   | Description         | Sample Value                                                    |
  | ------------ | ------ | ------------------- | --------------------------------------------------------------- |
  | `entityType` | string | Type of entity      | `"user"`                                                        |
  | `entity`     | object | User entity details | [See below ↓](#history-user-data-entities-sender-entity-object) |

  ***

  <span id="history-user-data-entities-sender-entity-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.sender.entity` Object:**

  | Parameter      | Type   | Description              | Sample Value                                                            |
  | -------------- | ------ | ------------------------ | ----------------------------------------------------------------------- |
  | `uid`          | string | User's unique identifier | `"cometchat-uid-3"`                                                     |
  | `name`         | string | User's display name      | `"Nancy Grace"`                                                         |
  | `avatar`       | string | User's avatar URL        | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-3.webp"` |
  | `role`         | string | User's role              | `"default"`                                                             |
  | `status`       | string | User's online status     | `"online"`                                                              |
  | `lastActiveAt` | number | Last active timestamp    | `1771388895`                                                            |
  | `tags`         | array  | User tags                | `[]`                                                                    |

  ***

  <span id="history-user-data-entities-receiver-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.receiver` Object:**

  | Parameter    | Type   | Description         | Sample Value                                                      |
  | ------------ | ------ | ------------------- | ----------------------------------------------------------------- |
  | `entityType` | string | Type of entity      | `"user"`                                                          |
  | `entity`     | object | User entity details | [See below ↓](#history-user-data-entities-receiver-entity-object) |

  ***

  <span id="history-user-data-entities-receiver-entity-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.receiver.entity` Object:**

  | Parameter        | Type   | Description              | Sample Value                                                            |
  | ---------------- | ------ | ------------------------ | ----------------------------------------------------------------------- |
  | `uid`            | string | User's unique identifier | `"cometchat-uid-2"`                                                     |
  | `name`           | string | User's display name      | `"George Alan"`                                                         |
  | `avatar`         | string | User's avatar URL        | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp"` |
  | `role`           | string | User's role              | `"default"`                                                             |
  | `status`         | string | User's online status     | `"offline"`                                                             |
  | `lastActiveAt`   | number | Last active timestamp    | `1771389781`                                                            |
  | `conversationId` | string | Conversation identifier  | `"cometchat-uid-2_user_cometchat-uid-3"`                                |
  | `tags`           | array  | User tags                | `[]`                                                                    |

  ***

  <span id="history-user-data-metadata-object" style={{scrollMarginTop: '100px'}} />

  **`data.metadata` Object:**

  | Parameter   | Type   | Description              | Sample Value                                      |
  | ----------- | ------ | ------------------------ | ------------------------------------------------- |
  | `@injected` | object | Injected extensions data | `{"extensions": {"link-preview": {"links": []}}}` |

  ***

  <span id="history-user-metadata-object" style={{scrollMarginTop: '100px'}} />

  **`metadata` Object:**

  | Parameter   | Type   | Description              | Sample Value                                          |
  | ----------- | ------ | ------------------------ | ----------------------------------------------------- |
  | `@injected` | object | Injected extensions data | [See below ↓](#history-user-metadata-injected-object) |

  ***

  <span id="history-user-metadata-injected-object" style={{scrollMarginTop: '100px'}} />

  **`metadata.@injected` Object:**

  | Parameter    | Type   | Description     | Sample Value                                            |
  | ------------ | ------ | --------------- | ------------------------------------------------------- |
  | `extensions` | object | Extensions data | [See below ↓](#history-user-metadata-extensions-object) |

  ***

  <span id="history-user-metadata-extensions-object" style={{scrollMarginTop: '100px'}} />

  **`metadata.@injected.extensions` Object:**

  | Parameter      | Type   | Description            | Sample Value                                             |
  | -------------- | ------ | ---------------------- | -------------------------------------------------------- |
  | `link-preview` | object | Link preview extension | [See below ↓](#history-user-metadata-linkpreview-object) |

  ***

  <span id="history-user-metadata-linkpreview-object" style={{scrollMarginTop: '100px'}} />

  **`metadata.@injected.extensions.link-preview` Object:**

  | Parameter | Type  | Description     | Sample Value |
  | --------- | ----- | --------------- | ------------ |
  | `links`   | array | Extracted links | `[]`         |

  ***

  <span id="history-user-error-object" style={{scrollMarginTop: '100px'}} />

  **On Failure — Error Object:**

  | Parameter | Type   | Description              | Sample Value                        |
  | --------- | ------ | ------------------------ | ----------------------------------- |
  | `code`    | string | Error code               | `"ERR_NOT_LOGGED_IN"`               |
  | `name`    | string | Error name               | `"Not logged in"`                   |
  | `message` | string | Error message            | `"No user is currently logged in."` |
  | `details` | object | Additional error details | `{}`                                |
</Accordion>

### For a Particular Group

Using the `MessagesRequest` class and the filters for the `MessagesRequestBuilder` class as shown in the below code snippet, you can fetch the entire conversation for any group provided you have joined the group. For this use case, it is mandatory to set the GUID parameter using the `setGUID()` method of the builder. This GUID is the unique identifier of the Group for which the messages are to be fetched.

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

    messagesRequest.fetchPrevious().then(
      (messages) => {
        console.log("Message list fetched:", messages);
      },
      (error) => {
        console.log("Message fetching failed with error:", error);
      }
    );
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    let GUID: string = "GUID",
      limit: number = 30,
      messagesRequest: CometChat.MessagesRequest =
        new CometChat.MessagesRequestBuilder()
          .setGUID(GUID)
          .setLimit(limit)
          .build();

    messagesRequest.fetchPrevious().then(
      (messages: CometChat.BaseMessage[]) => {
        console.log("Message list fetched:", messages);
      },
      (error: CometChat.CometChatException) => {
        console.log("Message fetching failed with error:", error);
      }
    );
    ```
  </Tab>
</Tabs>

Calling the `fetchPrevious()` method on the same object repeatedly allows you to fetch the entire conversation for the group. This can be implemented with upward scrolling to display the entire conversation.

<Accordion title="Response">
  **On Success** — Returns an array of group message history objects:

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

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

  | Parameter        | Type    | Description                       | Sample Value                                  |
  | ---------------- | ------- | --------------------------------- | --------------------------------------------- |
  | `id`             | string  | Unique message identifier         | `"25218"`                                     |
  | `conversationId` | string  | Conversation identifier           | `"group_group_1748415903905"`                 |
  | `receiverId`     | string  | Group GUID                        | `"group_1748415903905"`                       |
  | `receiverType`   | string  | Type of receiver                  | `"group"`                                     |
  | `type`           | string  | Message type                      | `"text"`                                      |
  | `category`       | string  | Message category                  | `"message"`                                   |
  | `text`           | string  | Message text content              | `"Historic Message 1"`                        |
  | `sentAt`         | number  | Timestamp when sent               | `1771390631`                                  |
  | `updatedAt`      | number  | Timestamp when updated            | `1771390631`                                  |
  | `sender`         | object  | Sender user details               | [See below ↓](#history-group-sender-object)   |
  | `receiver`       | object  | Receiver group details            | [See below ↓](#history-group-receiver-object) |
  | `data`           | object  | Additional message data           | [See below ↓](#history-group-data-object)     |
  | `metadata`       | object  | Message metadata                  | [See below ↓](#history-group-metadata-object) |
  | `reactions`      | array   | Message reactions                 | `[]`                                          |
  | `mentionedUsers` | array   | Users mentioned in message        | `[]`                                          |
  | `mentionedMe`    | boolean | Whether current user is mentioned | `false`                                       |

  ***

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

  **`sender` Object:**

  | Parameter       | Type    | Description                            | Sample Value                                                            |
  | --------------- | ------- | -------------------------------------- | ----------------------------------------------------------------------- |
  | `uid`           | string  | User's unique identifier               | `"cometchat-uid-3"`                                                     |
  | `name`          | string  | User's display name                    | `"Nancy Grace"`                                                         |
  | `avatar`        | string  | User's avatar URL                      | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-3.webp"` |
  | `role`          | string  | User's role                            | `"default"`                                                             |
  | `status`        | string  | User's online status                   | `"online"`                                                              |
  | `lastActiveAt`  | number  | Last active timestamp                  | `1771388895`                                                            |
  | `hasBlockedMe`  | boolean | Whether user has blocked current user  | `false`                                                                 |
  | `blockedByMe`   | boolean | Whether current user blocked this user | `false`                                                                 |
  | `deactivatedAt` | number  | Deactivation timestamp (0 if active)   | `0`                                                                     |
  | `tags`          | array   | User tags                              | `[]`                                                                    |

  ***

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

  **`receiver` Object (Group):**

  | Parameter            | Type    | Description                     | Sample Value                  |
  | -------------------- | ------- | ------------------------------- | ----------------------------- |
  | `guid`               | string  | Group's unique identifier       | `"group_1748415903905"`       |
  | `name`               | string  | Group's display name            | `"3 People Group"`            |
  | `type`               | string  | Group type                      | `"public"`                    |
  | `conversationId`     | string  | Conversation identifier         | `"group_group_1748415903905"` |
  | `owner`              | string  | Group owner UID                 | `"123456"`                    |
  | `scope`              | string  | Current user's scope in group   | `"admin"`                     |
  | `membersCount`       | number  | Total members in group          | `12`                          |
  | `onlineMembersCount` | number  | Online members count            | `1`                           |
  | `hasJoined`          | boolean | Whether current user has joined | `true`                        |
  | `isBanned`           | boolean | Whether current user is banned  | `false`                       |
  | `joinedAt`           | number  | Timestamp when user joined      | `1749203133`                  |
  | `createdAt`          | number  | Group creation timestamp        | `1748415957`                  |
  | `updatedAt`          | number  | Group update timestamp          | `1771245340`                  |

  ***

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

  **`data` Object:**

  | Parameter  | Type   | Description                  | Sample Value                                       |
  | ---------- | ------ | ---------------------------- | -------------------------------------------------- |
  | `text`     | string | Message text                 | `"Historic Message 1"`                             |
  | `resource` | string | SDK resource identifier      | `"REACT_NATIVE-4_0_14-..."`                        |
  | `entities` | object | Sender and receiver entities | [See below ↓](#history-group-data-entities-object) |
  | `metadata` | object | Injected metadata            | [See below ↓](#history-group-data-metadata-object) |

  ***

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

  **`data.entities` Object:**

  | Parameter  | Type   | Description             | Sample Value                                                |
  | ---------- | ------ | ----------------------- | ----------------------------------------------------------- |
  | `sender`   | object | Sender entity wrapper   | [See below ↓](#history-group-data-entities-sender-object)   |
  | `receiver` | object | Receiver entity wrapper | [See below ↓](#history-group-data-entities-receiver-object) |

  ***

  <span id="history-group-data-entities-sender-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.sender` Object:**

  | Parameter    | Type   | Description         | Sample Value                                                     |
  | ------------ | ------ | ------------------- | ---------------------------------------------------------------- |
  | `entityType` | string | Type of entity      | `"user"`                                                         |
  | `entity`     | object | User entity details | [See below ↓](#history-group-data-entities-sender-entity-object) |

  ***

  <span id="history-group-data-entities-sender-entity-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.sender.entity` Object:**

  | Parameter      | Type   | Description              | Sample Value                                                            |
  | -------------- | ------ | ------------------------ | ----------------------------------------------------------------------- |
  | `uid`          | string | User's unique identifier | `"cometchat-uid-3"`                                                     |
  | `name`         | string | User's display name      | `"Nancy Grace"`                                                         |
  | `avatar`       | string | User's avatar URL        | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-3.webp"` |
  | `role`         | string | User's role              | `"default"`                                                             |
  | `status`       | string | User's online status     | `"online"`                                                              |
  | `lastActiveAt` | number | Last active timestamp    | `1771388895`                                                            |
  | `tags`         | array  | User tags                | `[]`                                                                    |

  ***

  <span id="history-group-data-entities-receiver-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.receiver` Object:**

  | Parameter    | Type   | Description          | Sample Value                                                       |
  | ------------ | ------ | -------------------- | ------------------------------------------------------------------ |
  | `entityType` | string | Type of entity       | `"group"`                                                          |
  | `entity`     | object | Group entity details | [See below ↓](#history-group-data-entities-receiver-entity-object) |

  ***

  <span id="history-group-data-entities-receiver-entity-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities.receiver.entity` Object:**

  | Parameter            | Type    | Description                     | Sample Value                  |
  | -------------------- | ------- | ------------------------------- | ----------------------------- |
  | `guid`               | string  | Group's unique identifier       | `"group_1748415903905"`       |
  | `name`               | string  | Group's display name            | `"3 People Group"`            |
  | `type`               | string  | Group type                      | `"public"`                    |
  | `conversationId`     | string  | Conversation identifier         | `"group_group_1748415903905"` |
  | `owner`              | string  | Group owner UID                 | `"123456"`                    |
  | `scope`              | string  | Current user's scope in group   | `"admin"`                     |
  | `membersCount`       | number  | Total members in group          | `12`                          |
  | `onlineMembersCount` | number  | Online members count            | `1`                           |
  | `hasJoined`          | boolean | Whether current user has joined | `true`                        |
  | `joinedAt`           | number  | Timestamp when user joined      | `1749203133`                  |
  | `createdAt`          | number  | Group creation timestamp        | `1748415957`                  |
  | `updatedAt`          | number  | Group update timestamp          | `1771245340`                  |

  ***

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

  **`data.metadata` Object:**

  | Parameter   | Type   | Description              | Sample Value                                      |
  | ----------- | ------ | ------------------------ | ------------------------------------------------- |
  | `@injected` | object | Injected extensions data | `{"extensions": {"link-preview": {"links": []}}}` |

  ***

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

  **`metadata` Object:**

  | Parameter   | Type   | Description              | Sample Value                                           |
  | ----------- | ------ | ------------------------ | ------------------------------------------------------ |
  | `@injected` | object | Injected extensions data | [See below ↓](#history-group-metadata-injected-object) |

  ***

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

  **`metadata.@injected` Object:**

  | Parameter    | Type   | Description     | Sample Value                                             |
  | ------------ | ------ | --------------- | -------------------------------------------------------- |
  | `extensions` | object | Extensions data | [See below ↓](#history-group-metadata-extensions-object) |

  ***

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

  **`metadata.@injected.extensions` Object:**

  | Parameter      | Type   | Description            | Sample Value                                              |
  | -------------- | ------ | ---------------------- | --------------------------------------------------------- |
  | `link-preview` | object | Link preview extension | [See below ↓](#history-group-metadata-linkpreview-object) |

  ***

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

  **`metadata.@injected.extensions.link-preview` Object:**

  | Parameter | Type  | Description     | Sample Value |
  | --------- | ----- | --------------- | ------------ |
  | `links`   | array | Extracted links | `[]`         |

  ***

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

  **On Failure — Error Object:**

  | Parameter | Type   | Description              | Sample Value                        |
  | --------- | ------ | ------------------------ | ----------------------------------- |
  | `code`    | string | Error code               | `"ERR_NOT_LOGGED_IN"`               |
  | `name`    | string | Error name               | `"Not logged in"`                   |
  | `message` | string | Error message            | `"No user is currently logged in."` |
  | `details` | object | Additional error details | `{}`                                |
</Accordion>

## Search Messages

*In other words, as a logged-in user, how do I search a message?*

In order to do this, you can use the `setSearchKeyword()` method. This method accepts a string as input. When set, the SDK will fetch messages which match the `searchKeyword`.

<Note>
  By default, the searchKey is searched only in message text. However, if you enable `Conversation & Advanced Search`, the searchKey will be searched in message text, file name, mentions & mime type of the file.

  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>

| Feature          | Basic Search | Advanced Search |
| ---------------- | ------------ | --------------- |
| Text search      | ✅            | ✅               |
| File name search | ❌            | ✅               |
| Mentions search  | ❌            | ✅               |
| Mime type search | ❌            | ✅               |

### For a Particular One-on-one Conversation

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    let UID = "UID";
    let limit = 30;
    let searchKeyword = "Hello";
    let messagesRequest = new CometChat.MessagesRequestBuilder()
      .setUID(UID)
      .setLimit(limit)
      .setSearchKeyword(searchKeyword)
      .build();

    messagesRequest.fetchPrevious().then(
      (messages) => {
        console.log("Message list fetched:", messages);
      },
      (error) => {
        console.log("Message fetching failed with error:", error);
      }
    );
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    let UID: string = "UID",
      limit: number = 30,
      searchKeyword: string = "Hello",
      messagesRequest: CometChat.MessagesRequest =
        new CometChat.MessagesRequestBuilder()
          .setUID(UID)
          .setLimit(limit)
          .setSearchKeyword(searchKeyword)
          .build();

    messagesRequest.fetchPrevious().then(
      (messages: CometChat.BaseMessage[]) => {
        console.log("Message list fetched:", messages);
      },
      (error: CometChat.CometChatException) => {
        console.log("Message fetching failed with error:", error);
      }
    );
    ```
  </Tab>
</Tabs>

<Accordion title="Response">
  **On Success** — Returns an array of messages matching the search keyword:

  <span id="search-user-message-object" style={{scrollMarginTop: '100px'}} />

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

  | Parameter        | Type    | Description                       | Sample Value                                |
  | ---------------- | ------- | --------------------------------- | ------------------------------------------- |
  | `id`             | string  | Unique message identifier         | `"25224"`                                   |
  | `conversationId` | string  | Conversation identifier           | `"cometchat-uid-2_user_cometchat-uid-3"`    |
  | `receiverId`     | string  | Receiver's UID                    | `"cometchat-uid-2"`                         |
  | `receiverType`   | string  | Type of receiver                  | `"user"`                                    |
  | `type`           | string  | Message type                      | `"text"`                                    |
  | `category`       | string  | Message category                  | `"message"`                                 |
  | `text`           | string  | Message text content              | `"xq7SearchTest"`                           |
  | `sentAt`         | number  | Timestamp when sent               | `1771392432`                                |
  | `deliveredAt`    | number  | Timestamp when delivered          | `1771392432`                                |
  | `readAt`         | number  | Timestamp when read               | `1771392432`                                |
  | `updatedAt`      | number  | Timestamp when updated            | `1771392432`                                |
  | `sender`         | object  | Sender user details               | [See below ↓](#search-user-sender-object)   |
  | `receiver`       | object  | Receiver user details             | [See below ↓](#search-user-receiver-object) |
  | `data`           | object  | Additional message data           | [See below ↓](#search-user-data-object)     |
  | `metadata`       | object  | Message metadata                  | [See below ↓](#search-user-metadata-object) |
  | `reactions`      | array   | Message reactions                 | `[]`                                        |
  | `mentionedUsers` | array   | Users mentioned in message        | `[]`                                        |
  | `mentionedMe`    | boolean | Whether current user is mentioned | `false`                                     |

  ***

  <span id="search-user-sender-object" style={{scrollMarginTop: '100px'}} />

  **`sender` Object:**

  | Parameter       | Type    | Description                            | Sample Value                                                            |
  | --------------- | ------- | -------------------------------------- | ----------------------------------------------------------------------- |
  | `uid`           | string  | User's unique identifier               | `"cometchat-uid-3"`                                                     |
  | `name`          | string  | User's display name                    | `"Nancy Grace"`                                                         |
  | `avatar`        | string  | User's avatar URL                      | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-3.webp"` |
  | `role`          | string  | User's role                            | `"default"`                                                             |
  | `status`        | string  | User's online status                   | `"online"`                                                              |
  | `lastActiveAt`  | number  | Last active timestamp                  | `1771391162`                                                            |
  | `hasBlockedMe`  | boolean | Whether user has blocked current user  | `false`                                                                 |
  | `blockedByMe`   | boolean | Whether current user blocked this user | `false`                                                                 |
  | `deactivatedAt` | number  | Deactivation timestamp (0 if active)   | `0`                                                                     |
  | `tags`          | array   | User tags                              | `[]`                                                                    |

  ***

  <span id="search-user-receiver-object" style={{scrollMarginTop: '100px'}} />

  **`receiver` Object:**

  | Parameter       | Type    | Description                            | Sample Value                                                            |
  | --------------- | ------- | -------------------------------------- | ----------------------------------------------------------------------- |
  | `uid`           | string  | User's unique identifier               | `"cometchat-uid-2"`                                                     |
  | `name`          | string  | User's display name                    | `"George Alan"`                                                         |
  | `avatar`        | string  | User's avatar URL                      | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-2.webp"` |
  | `role`          | string  | User's role                            | `"default"`                                                             |
  | `status`        | string  | User's online status                   | `"online"`                                                              |
  | `lastActiveAt`  | number  | Last active timestamp                  | `1771391157`                                                            |
  | `hasBlockedMe`  | boolean | Whether user has blocked current user  | `false`                                                                 |
  | `blockedByMe`   | boolean | Whether current user blocked this user | `false`                                                                 |
  | `deactivatedAt` | number  | Deactivation timestamp (0 if active)   | `0`                                                                     |
  | `tags`          | array   | User tags                              | `[]`                                                                    |

  ***

  <span id="search-user-data-object" style={{scrollMarginTop: '100px'}} />

  **`data` Object:**

  | Parameter  | Type   | Description                  | Sample Value                                                     |
  | ---------- | ------ | ---------------------------- | ---------------------------------------------------------------- |
  | `text`     | string | Message text                 | `"xq7SearchTest"`                                                |
  | `resource` | string | SDK resource identifier      | `"REACT_NATIVE-4_0_14-..."`                                      |
  | `entities` | object | Sender and receiver entities | [See below ↓](#search-user-data-entities-object)                 |
  | `metadata` | object | Injected metadata            | `{"@injected": {"extensions": {"link-preview": {"links": []}}}}` |

  ***

  <span id="search-user-data-entities-object" style={{scrollMarginTop: '100px'}} />

  **`data.entities` Object:**

  | Parameter  | Type   | Description             | Sample Value                       |
  | ---------- | ------ | ----------------------- | ---------------------------------- |
  | `sender`   | object | Sender entity wrapper   | Contains `entityType` and `entity` |
  | `receiver` | object | Receiver entity wrapper | Contains `entityType` and `entity` |

  ***

  <span id="search-user-metadata-object" style={{scrollMarginTop: '100px'}} />

  **`metadata` Object:**

  | Parameter   | Type   | Description              | Sample Value                                      |
  | ----------- | ------ | ------------------------ | ------------------------------------------------- |
  | `@injected` | object | Injected extensions data | `{"extensions": {"link-preview": {"links": []}}}` |

  ***

  <span id="search-user-error-object" style={{scrollMarginTop: '100px'}} />

  **On Failure — Error Object:**

  | Parameter | Type   | Description              | Sample Value                        |
  | --------- | ------ | ------------------------ | ----------------------------------- |
  | `code`    | string | Error code               | `"ERR_NOT_LOGGED_IN"`               |
  | `name`    | string | Error name               | `"Not logged in"`                   |
  | `message` | string | Error message            | `"No user is currently logged in."` |
  | `details` | object | Additional error details | `{}`                                |
</Accordion>

### For a Particular Group

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    let GUID = "GUID";
    let limit = 30;
    let searchKeyword = "Hello";
    let messagesRequest = new CometChat.MessagesRequestBuilder()
      .setGUID(GUID)
      .setLimit(limit)
      .setSearchKeyword(searchKeyword)
      .build();

    messagesRequest.fetchPrevious().then(
      (messages) => {
        console.log("Message list fetched:", messages);
      },
      (error) => {
        console.log("Message fetching failed with error:", error);
      }
    );
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    let GUID: string = "GUID",
      limit: number = 30,
      searchKeyword: string = "Hello",
      messagesRequest: CometChat.MessagesRequest =
        new CometChat.MessagesRequestBuilder()
          .setGUID(GUID)
          .setLimit(limit)
          .setSearchKeyword(searchKeyword)
          .build();

    messagesRequest.fetchPrevious().then(
      (messages: CometChat.BaseMessage[]) => {
        console.log("Message list fetched:", messages);
      },
      (error: CometChat.CometChatException) => {
        console.log("Message fetching failed with error:", error);
      }
    );
    ```
  </Tab>
</Tabs>

<Accordion title="Response">
  **On Success** — Returns an array of group messages matching the search keyword:

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

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

  | Parameter        | Type    | Description                       | Sample Value                                 |
  | ---------------- | ------- | --------------------------------- | -------------------------------------------- |
  | `id`             | string  | Unique message identifier         | `"25225"`                                    |
  | `conversationId` | string  | Conversation identifier           | `"group_group_1748415903905"`                |
  | `receiverId`     | string  | Group GUID                        | `"group_1748415903905"`                      |
  | `receiverType`   | string  | Type of receiver                  | `"group"`                                    |
  | `type`           | string  | Message type                      | `"text"`                                     |
  | `category`       | string  | Message category                  | `"message"`                                  |
  | `text`           | string  | Message text content              | `"xq8SearchTest"`                            |
  | `sentAt`         | number  | Timestamp when sent               | `1771392513`                                 |
  | `updatedAt`      | number  | Timestamp when updated            | `1771392513`                                 |
  | `sender`         | object  | Sender user details               | [See below ↓](#search-group-sender-object)   |
  | `receiver`       | object  | Receiver group details            | [See below ↓](#search-group-receiver-object) |
  | `data`           | object  | Additional message data           | [See below ↓](#search-group-data-object)     |
  | `metadata`       | object  | Message metadata                  | [See below ↓](#search-group-metadata-object) |
  | `reactions`      | array   | Message reactions                 | `[]`                                         |
  | `mentionedUsers` | array   | Users mentioned in message        | `[]`                                         |
  | `mentionedMe`    | boolean | Whether current user is mentioned | `false`                                      |

  ***

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

  **`sender` Object:**

  | Parameter       | Type    | Description                            | Sample Value                                                            |
  | --------------- | ------- | -------------------------------------- | ----------------------------------------------------------------------- |
  | `uid`           | string  | User's unique identifier               | `"cometchat-uid-3"`                                                     |
  | `name`          | string  | User's display name                    | `"Nancy Grace"`                                                         |
  | `avatar`        | string  | User's avatar URL                      | `"https://assets.cometchat.io/sampleapp/v2/users/cometchat-uid-3.webp"` |
  | `role`          | string  | User's role                            | `"default"`                                                             |
  | `status`        | string  | User's online status                   | `"online"`                                                              |
  | `lastActiveAt`  | number  | Last active timestamp                  | `1771391162`                                                            |
  | `hasBlockedMe`  | boolean | Whether user has blocked current user  | `false`                                                                 |
  | `blockedByMe`   | boolean | Whether current user blocked this user | `false`                                                                 |
  | `deactivatedAt` | number  | Deactivation timestamp (0 if active)   | `0`                                                                     |
  | `tags`          | array   | User tags                              | `[]`                                                                    |

  ***

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

  **`receiver` Object (Group):**

  | Parameter            | Type    | Description                     | Sample Value                  |
  | -------------------- | ------- | ------------------------------- | ----------------------------- |
  | `guid`               | string  | Group's unique identifier       | `"group_1748415903905"`       |
  | `name`               | string  | Group's display name            | `"3 People Group"`            |
  | `type`               | string  | Group type                      | `"public"`                    |
  | `conversationId`     | string  | Conversation identifier         | `"group_group_1748415903905"` |
  | `owner`              | string  | Group owner UID                 | `"123456"`                    |
  | `scope`              | string  | Current user's scope in group   | `"admin"`                     |
  | `membersCount`       | number  | Total members in group          | `12`                          |
  | `onlineMembersCount` | number  | Online members count            | `2`                           |
  | `hasJoined`          | boolean | Whether current user has joined | `true`                        |
  | `isBanned`           | boolean | Whether current user is banned  | `false`                       |
  | `joinedAt`           | number  | Timestamp when user joined      | `1749203133`                  |
  | `createdAt`          | number  | Group creation timestamp        | `1748415957`                  |
  | `updatedAt`          | number  | Group update timestamp          | `1771245340`                  |

  ***

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

  **`data` Object:**

  | Parameter  | Type   | Description                  | Sample Value                                                     |
  | ---------- | ------ | ---------------------------- | ---------------------------------------------------------------- |
  | `text`     | string | Message text                 | `"xq8SearchTest"`                                                |
  | `resource` | string | SDK resource identifier      | `"REACT_NATIVE-4_0_14-..."`                                      |
  | `entities` | object | Sender and receiver entities | Contains `sender` and `receiver` wrappers                        |
  | `metadata` | object | Injected metadata            | `{"@injected": {"extensions": {"link-preview": {"links": []}}}}` |

  ***

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

  **`metadata` Object:**

  | Parameter   | Type   | Description              | Sample Value                                      |
  | ----------- | ------ | ------------------------ | ------------------------------------------------- |
  | `@injected` | object | Injected extensions data | `{"extensions": {"link-preview": {"links": []}}}` |

  ***

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

  **On Failure — Error Object:**

  | Parameter | Type   | Description              | Sample Value                        |
  | --------- | ------ | ------------------------ | ----------------------------------- |
  | `code`    | string | Error code               | `"ERR_NOT_LOGGED_IN"`               |
  | `name`    | string | Error name               | `"Not logged in"`                   |
  | `message` | string | Error message            | `"No user is currently logged in."` |
  | `details` | object | Additional error details | `{}`                                |
</Accordion>

## Unread Message Count

*In other words, as a logged-in user, how do I find out the number of unread messages that I have?*

### For a Particular One-on-one Conversation

*How do I find out the number of unread messages I have from a particular user?*

In order to get the unread message count for a particular user, you can use the `getUnreadMessageCountForUser()` method.

This method has the below two variants:

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    CometChat.getUnreadMessageCountForUser(UID);
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    let UID: string = "UID";
    CometChat.getUnreadMessageCountForUser(UID);
    ```
  </Tab>
</Tabs>

If you wish to ignore the messages from blocked users you can use the below syntax setting the boolean parameter to true:

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    CometChat.getUnreadMessageCountForUser(UID, hideMessagesFromBlockedUsers);
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    let UID: string = "UID",
      hideMessagesFromBlockedUsers: boolean = true;
    CometChat.getUnreadMessageCountForUser(UID, hideMessagesFromBlockedUsers);
    ```
  </Tab>
</Tabs>

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    let UID = "UID";

    CometChat.getUnreadMessageCountForUser(UID).then(
      (unreadMessageCountObject) => {
        console.log("Unread message count fetched", unreadMessageCountObject);
      },
      (error) => {
        console.log("Error in getting unread message count", error);
      }
    );
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    let UID: string = "UID";

    CometChat.getUnreadMessageCountForUser(UID).then(
      (unreadMessageCount: Object) => {
        console.log("Unread message count fetched", unreadMessageCount);
      },
      (error: CometChat.CometChatException) => {
        console.log("Error in getting unread message count", error);
      }
    );
    ```
  </Tab>
</Tabs>

It will return an object which will contain the UID as the key and the unread message count as the value.

<Accordion title="Response">
  **On Success** — Returns an object with UID as key and unread count as value:

  <span id="unread-count-user-object" style={{scrollMarginTop: '100px'}} />

  **Unread Count Object:**

  | Parameter | Type   | Description                                 | Sample Value |
  | --------- | ------ | ------------------------------------------- | ------------ |
  | `{UID}`   | number | Unread message count for the specified user | `2`          |

  Example: `{"cometchat-uid-3": 2}`

  ***

  <span id="unread-count-user-error-object" style={{scrollMarginTop: '100px'}} />

  **On Failure — Error Object:**

  | Parameter | Type   | Description              | Sample Value                        |
  | --------- | ------ | ------------------------ | ----------------------------------- |
  | `code`    | string | Error code               | `"ERR_NOT_LOGGED_IN"`               |
  | `name`    | string | Error name               | `"Not logged in"`                   |
  | `message` | string | Error message            | `"No user is currently logged in."` |
  | `details` | object | Additional error details | `{}`                                |
</Accordion>

### For a Particular Group Conversation

*How do I find out the number of unread messages I have in a single group?*

In order to get the unread message count for a particular group, you can use the `getUnreadMessageCountForGroup()` method.

This method has the below two variants:

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    CometChat.getUnreadMessageCountForGroup(GUID);
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    let GUID: string = "GUID";
    CometChat.getUnreadMessageCountForGroup(GUID);
    ```
  </Tab>
</Tabs>

If you wish to ignore the messages from blocked users you can use the below syntax setting the boolean parameter to true:

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    CometChat.getUnreadMessageCountForGroup(GUID, hideMessagesFromBlockedUsers);
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    let GUID: string = "GUID",
      hideMessagesFromBlockedUsers: boolean = true;
    CometChat.getUnreadMessageCountForGroup(GUID, hideMessagesFromBlockedUsers);
    ```
  </Tab>
</Tabs>

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    let GUID = "GUID";

    CometChat.getUnreadMessageCountForGroup(GUID).then(
      (unreadMessageCountObject) => {
        console.log("Unread message count fetched", unreadMessageCountObject);
      },
      (error) => {
        console.log("Error in getting unread message count", error);
      }
    );
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    let GUID: string = "GUID";

    CometChat.getUnreadMessageCountForGroup(GUID).then(
      (unreadMessageCount: Object) => {
        console.log("Unread message count fetched", unreadMessageCount);
      },
      (error: CometChat.CometChatException) => {
        console.log("Error in getting unread message count", error);
      }
    );
    ```
  </Tab>
</Tabs>

It will return an object which will contain the GUID as the key and the unread message count as the value.

<Accordion title="Response">
  **On Success** — Returns an object with GUID as key and unread count as value:

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

  **Unread Count Object:**

  | Parameter | Type   | Description                                  | Sample Value |
  | --------- | ------ | -------------------------------------------- | ------------ |
  | `{GUID}`  | number | Unread message count for the specified group | `3`          |

  Example: `{"group_1748415903905": 3}`

  ***

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

  **On Failure — Error Object:**

  | Parameter | Type   | Description              | Sample Value                        |
  | --------- | ------ | ------------------------ | ----------------------------------- |
  | `code`    | string | Error code               | `"ERR_NOT_LOGGED_IN"`               |
  | `name`    | string | Error name               | `"Not logged in"`                   |
  | `message` | string | Error message            | `"No user is currently logged in."` |
  | `details` | object | Additional error details | `{}`                                |
</Accordion>

### For All One-on-one & Group Conversations

*How do I find out the number of unread messages for every one-on-one and group conversation?*

In order to get all the unread message count combined i.e unread message counts for all the users and groups, you can use the `getUnreadMessageCount()` method.

This method has two variants:

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    CometChat.getUnreadMessageCount();
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    CometChat.getUnreadMessageCount();
    ```
  </Tab>
</Tabs>

If you wish to ignore the messages from blocked users you can use the below syntax setting the boolean parameter to true:

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    CometChat.getUnreadMessageCount(hideMessagesFromBlockedUsers);
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    let hideMessagesFromBlockedUsers: boolean = true;
    CometChat.getUnreadMessageCount(hideMessagesFromBlockedUsers);
    ```
  </Tab>
</Tabs>

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    CometChat.getUnreadMessageCount().then(
      (unreadMessageCountObject) => {
        console.log("Unread message count fetched", unreadMessageCountObject);
      },
      (error) => {
        console.log("Error in getting unread message count", error);
      }
    );
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    CometChat.getUnreadMessageCount().then(
      (unreadMessageCount: Object) => {
        console.log("Unread message count fetched", unreadMessageCount);
      },
      (error: CometChat.CometChatException) => {
        console.log("Error in getting unread message count", error);
      }
    );
    ```
  </Tab>
</Tabs>

It returns an object having two keys:

1. `users` - The value for this key holds another object that holds the UID as key and their corresponding unread message count as value.
2. `groups` - The value for this key holds another object that holds the GUID as key and their corresponding unread message count as value.

<Accordion title="Response">
  **On Success** — Returns an object with users and groups unread counts:

  <span id="unread-count-all-object" style={{scrollMarginTop: '100px'}} />

  **Unread Count Object:**

  | Parameter | Type   | Description                                           | Sample Value                                   |
  | --------- | ------ | ----------------------------------------------------- | ---------------------------------------------- |
  | `users`   | object | Object with UIDs as keys and unread counts as values  | [See below ↓](#unread-count-all-users-object)  |
  | `groups`  | object | Object with GUIDs as keys and unread counts as values | [See below ↓](#unread-count-all-groups-object) |

  ***

  <span id="unread-count-all-users-object" style={{scrollMarginTop: '100px'}} />

  **`users` Object:**

  | Parameter | Type   | Description                | Sample Value |
  | --------- | ------ | -------------------------- | ------------ |
  | `{UID}`   | number | Unread count for each user | `2`          |

  Example: `{"cometchat-uid-3": 2}`

  ***

  <span id="unread-count-all-groups-object" style={{scrollMarginTop: '100px'}} />

  **`groups` Object:**

  | Parameter | Type   | Description                 | Sample Value |
  | --------- | ------ | --------------------------- | ------------ |
  | `{GUID}`  | number | Unread count for each group | `2`          |

  Example: `{"group_1748415903905": 2}`

  ***

  <span id="unread-count-all-error-object" style={{scrollMarginTop: '100px'}} />

  **On Failure — Error Object:**

  | Parameter | Type   | Description              | Sample Value                        |
  | --------- | ------ | ------------------------ | ----------------------------------- |
  | `code`    | string | Error code               | `"ERR_NOT_LOGGED_IN"`               |
  | `name`    | string | Error name               | `"Not logged in"`                   |
  | `message` | string | Error message            | `"No user is currently logged in."` |
  | `details` | object | Additional error details | `{}`                                |
</Accordion>

### For All One-on-one Conversations

In order to fetch the unread message counts for just the users, you can use the `getUnreadMessageCountForAllUsers()` method. This method just like others has two variants:

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    CometChat.getUnreadMessageCountForAllUsers();
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    CometChat.getUnreadMessageCountForAllUsers();
    ```
  </Tab>
</Tabs>

If you wish to ignore the messages from blocked users you can use the below syntax setting the boolean parameter to true:

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    CometChat.getUnreadMessageCountForAllUsers(hideMessagesFromBlockedUsers);
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    let hideMessagesFromBlockedUsers: boolean = true;
    CometChat.getUnreadMessageCountForAllUsers(hideMessagesFromBlockedUsers);
    ```
  </Tab>
</Tabs>

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    CometChat.getUnreadMessageCountForAllUsers().then(
      (unreadMessageCountObject) => {
        console.log("Unread message count fetched", unreadMessageCountObject);
      },
      (error) => {
        console.log("Error in getting unread message count", error);
      }
    );
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    CometChat.getUnreadMessageCountForAllUsers().then(
      (unreadMessageCount: Object) => {
        console.log("Unread message count fetched", unreadMessageCount);
      },
      (error: CometChat.CometChatException) => {
        console.log("Error in getting unread message count", error);
      }
    );
    ```
  </Tab>
</Tabs>

It returns an object which will contain the UID as the key and the unread message count as the value.

<Accordion title="Response">
  **On Success** — Returns an object with UIDs as keys and unread counts as values:

  <span id="unread-count-allusers-object" style={{scrollMarginTop: '100px'}} />

  **Unread Count Object:**

  | Parameter | Type   | Description                        | Sample Value |
  | --------- | ------ | ---------------------------------- | ------------ |
  | `{UID}`   | number | Unread message count for each user | `2` or `3`   |

  Example: `{"cometchat-uid-3": 2, "cometchat-uid-4": 3}`

  ***

  <span id="unread-count-allusers-error-object" style={{scrollMarginTop: '100px'}} />

  **On Failure — Error Object:**

  | Parameter | Type   | Description              | Sample Value                        |
  | --------- | ------ | ------------------------ | ----------------------------------- |
  | `code`    | string | Error code               | `"ERR_NOT_LOGGED_IN"`               |
  | `name`    | string | Error name               | `"Not logged in"`                   |
  | `message` | string | Error message            | `"No user is currently logged in."` |
  | `details` | object | Additional error details | `{}`                                |
</Accordion>

### For All Group Conversations

In order to fetch the unread message counts for just the groups, you can use the `getUnreadMessageCountForAllGroups()` method. This method just like others has two variants:

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    CometChat.getUnreadMessageCountForAllGroups();
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    CometChat.getUnreadMessageCountForAllGroups();
    ```
  </Tab>
</Tabs>

If you wish to ignore the messages from blocked users you can use the below syntax setting the boolean parameter to true:

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    CometChat.getUnreadMessageCountForAllGroups(hideMessagesFromBlockedUsers);
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    let hideMessagesFromBlockedUsers: boolean = true;
    CometChat.getUnreadMessageCountForAllGroups(hideMessagesFromBlockedUsers);
    ```
  </Tab>
</Tabs>

<Tabs>
  <Tab title="JavaScript">
    ```javascript theme={null}
    CometChat.getUnreadMessageCountForAllGroups().then(
      (unreadMessageCountObject) => {
        console.log("Unread message count fetched", unreadMessageCountObject);
      },
      (error) => {
        console.log("Error in getting unread message count", error);
      }
    );
    ```
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    CometChat.getUnreadMessageCountForAllGroups().then(
      (unreadMessageCount: Object) => {
        console.log("Unread message count fetched", unreadMessageCount);
      },
      (error: CometChat.CometChatException) => {
        console.log("Error in getting unread message count", error);
      }
    );
    ```
  </Tab>
</Tabs>

It returns an object which will contain the GUID as the key and the unread message count as the value.

<Accordion title="Response">
  **On Success** — Returns an object with GUIDs as keys and unread counts as values:

  <span id="unread-count-allgroups-object" style={{scrollMarginTop: '100px'}} />

  **Unread Count Object:**

  | Parameter | Type   | Description                         | Sample Value |
  | --------- | ------ | ----------------------------------- | ------------ |
  | `{GUID}`  | number | Unread message count for each group | `2` or `5`   |

  Example: `{"group_1748415903905": 2, "group_1762515421478": 2, "group_1762515423434": 5}`

  ***

  <span id="unread-count-allgroups-error-object" style={{scrollMarginTop: '100px'}} />

  **On Failure — Error Object:**

  | Parameter | Type   | Description              | Sample Value                        |
  | --------- | ------ | ------------------------ | ----------------------------------- |
  | `code`    | string | Error code               | `"ERR_NOT_LOGGED_IN"`               |
  | `name`    | string | Error name               | `"Not logged in"`                   |
  | `message` | string | Error message            | `"No user is currently logged in."` |
  | `details` | object | Additional error details | `{}`                                |
</Accordion>

<AccordionGroup>
  <Accordion title="Best Practices">
    * Always remove message listeners when a component unmounts to prevent memory leaks
    * Use unique, descriptive listener IDs (e.g., `"chat-screen-listener"`) to avoid conflicts
    * Use `getLastDeliveredMessageId()` to efficiently fetch only missed messages
    * Implement pagination with `fetchPrevious()` for message history to avoid loading too many messages at once
    * Use `setUnread(true)` to fetch only unread messages when building notification badges
  </Accordion>

  <Accordion title="Troubleshooting">
    * **Not receiving messages:** Ensure the message listener is registered and the user is logged in
    * **Duplicate messages:** Check that you're not adding the same listener ID multiple times
    * **Missing messages after reconnect:** Use the missed messages pattern with `getLastDeliveredMessageId()` to catch up
    * **Unread count not updating:** Ensure you're calling the unread count methods after marking messages as read
  </Accordion>
</AccordionGroup>

## Next Steps

<CardGroup cols={2}>
  <Card title="Send a Message" icon="paper-plane" href="/sdk/react-native/send-message">
    Send text, media, and custom messages to users and groups
  </Card>

  <Card title="Delivery & Read Receipts" icon="check-double" href="/sdk/react-native/delivery-read-receipts">
    Track when messages are delivered and read
  </Card>

  <Card title="Typing Indicators" icon="keyboard" href="/sdk/react-native/typing-indicators">
    Show real-time typing status in conversations
  </Card>

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