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

# Delete Message

> Delete CometChat messages in React Native apps by message ID and listen for real-time deletion events.

<Accordion title="AI Integration Quick Reference">
  | Field          | Value                                                                                                                                                                                                                                                                 |
  | -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
  | Package        | `@cometchat/chat-sdk-react-native`                                                                                                                                                                                                                                    |
  | Import         | `import { CometChat } from "@cometchat/chat-sdk-react-native";`                                                                                                                                                                                                       |
  | Key Methods    | `addMessageListener()`, `deleteMessage()`                                                                                                                                                                                                                             |
  | Key Classes    | `BaseMessage`, `CometChatException`, `MessageListener`                                                                                                                                                                                                                |
  | Prerequisites  | SDK initialized via [`CometChat.init()`](/sdk/react-native/setup-sdk) and a logged-in user via [`CometChat.login()`](/sdk/react-native/authentication-overview)                                                                                                       |
  | Primary output | `Promise<CometChat.BaseMessage>` — the message in its deleted state (a tombstone, not removal); rejects with `CometChatException`                                                                                                                                     |
  | Constraints    | The message object survives with `getDeletedAt()` set — render a deleted-state bubble rather than dropping it from the list. Every `add*Listener()` needs a matching `remove*Listener()` with the same listener ID — unremoved listeners leak and fire after unmount. |
  | Related        | [Edit a Message](/sdk/react-native/edit-message) · [Send a Message](/sdk/react-native/send-message) · [Receive Messages](/sdk/react-native/receive-messages)                                                                                                          |
  | Full reference | [`BaseMessage`](/sdk/reference/messages#basemessage) · [`CometChatException`](/sdk/reference/auxiliary#cometchatexception)                                                                                                                                            |

  ```javascript theme={null}
  let messageId = "MESSAGE_ID";

  // Delete a message
  await CometChat.deleteMessage(messageId);

  // Listen for real-time deletions
  CometChat.addMessageListener("ID", new CometChat.MessageListener({
    onMessageDeleted: (message) => {
      console.log("Deleted:", message.getId(), message.getDeletedAt());
    }
  }));
  ```

  **Who can delete:** Message sender, Group admin, Group moderator
  **Deleted fields:** `deletedAt` (timestamp), `deletedBy` (user who deleted)
</Accordion>

<Warning>
  This operation is irreversible. Deleted messages cannot be recovered.
</Warning>

Deleting a message is straightforward. Receiving delete events has two parts:

1. Adding a listener for [real-time deletes](#real-time-message-delete-events) when your app is running
2. Fetching [missed deletes](#missed-message-delete-events) when your app was offline

## Delete a Message

Use `deleteMessage()` with the message ID.

<Tabs>
  <Tab title="TypeScript">
    ```typescript theme={null}
    let messageId: number = 1;

    CometChat.deleteMessage(messageId).then(
      (message: CometChat.BaseMessage) => {
          console.log("Message deleted", message);
      }, (error: CometChat.CometChatException) => {
          console.log("Message delete failed with error:", error);
      }
    );
    ```
  </Tab>

  <Tab title="JavaScript">
    ```javascript theme={null}
    let messageId = "ID_OF_THE_MESSAGE_YOU_WANT_TO_DELETE";

    CometChat.deleteMessage(messageId).then(
    message => {
      console.log("Message deleted", message);
    }, error => {
      console.log("Message delete failed with error:", error);
    }
    );
    ```

    Alternatively, you can use the `async/await` syntax:

    ```javascript theme={null}
    let messageId = "ID_OF_THE_MESSAGE_YOU_WANT_TO_DELETE";

    try {
      const message = await CometChat.deleteMessage(messageId);
      console.log("Message deleted", message);
    } catch (error) {
      console.log("Message delete failed with error:", error);
    }
    ```
  </Tab>
</Tabs>

The deleted message object is returned with `deletedAt` (timestamp) and `deletedBy` (UID of deleter) fields set.

The `deleteMessage()` method returns a [`BaseMessage`](/sdk/reference/messages#basemessage) object.

Relevant fields to access on the returned message:

| Field     | Getter           | Return Type | Description                             |
| --------- | ---------------- | ----------- | --------------------------------------- |
| deletedAt | `getDeletedAt()` | `number`    | Timestamp when the message was deleted  |
| deletedBy | `getDeletedBy()` | `string`    | UID of the user who deleted the message |

Message deletion in CometChat is controlled by -

| User            | Conversation Type       | Deletion Capabilities          |
| --------------- | ----------------------- | ------------------------------ |
| Message Sender  | One-on-One Conversation | Messages they have sent.       |
| Message Sender  | Group Conversation      | Messages they have sent.       |
| Group Admin     | Group Conversation      | All the messages in the group. |
| Group Moderator | Group Conversation      | All the messages in the group. |

## Real-time Message Delete Events

Use `onMessageDeleted` in `MessageListener` to receive real-time delete events.

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

    CometChat.addMessageListener(
      listenerID,
      new CometChat.MessageListener({
          onMessageDeleted: (message: CometChat.BaseMessage) => {
              console.log("Deleted Message", message);
          }
      })
    );
    ```
  </Tab>

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

    CometChat.addMessageListener(
    listenerID,
    new CometChat.MessageListener({
      onMessageDeleted: message => {
        console.log("Deleted Message", message);
      }
    })
    );
    ```
  </Tab>
</Tabs>

The `onMessageDeleted` callback receives a [`BaseMessage`](/sdk/reference/messages#basemessage) object with the `deletedAt` and `deletedBy` fields set.

Relevant fields to access on the returned message:

| Field     | Getter           | Return Type | Description                             |
| --------- | ---------------- | ----------- | --------------------------------------- |
| deletedAt | `getDeletedAt()` | `number`    | Timestamp when the message was deleted  |
| deletedBy | `getDeletedBy()` | `string`    | UID of the user who deleted the message |

## Missed Message Delete Events

When fetching message history, deleted messages have `deletedAt` and `deletedBy` fields set. Additionally, an [`Action`](/sdk/reference/messages#action) message is created when a message is deleted.

The [`Action`](/sdk/reference/messages#action) object contains:

* `action` — `deleted`
* `actionOn` — Deleted message object
* `actionBy` — User who deleted the message
* `actionFor` — Receiver (User/Group)

<Note>
  You must be the message sender or a group admin/moderator to delete a message.
</Note>

<Warning>
  Always remove message listeners when they're no longer needed to prevent memory leaks.
</Warning>

***

## Next Steps

<CardGroup cols={2}>
  <Card title="Edit a Message" icon="pen-to-square" href="/sdk/react-native/edit-message">
    Edit sent messages in conversations
  </Card>

  <Card title="Send Messages" icon="paper-plane" href="/sdk/react-native/send-message">
    Send text, media, and custom messages
  </Card>

  <Card title="Receive Messages" icon="inbox" href="/sdk/react-native/receive-messages">
    Listen for incoming messages in real-time
  </Card>

  <Card title="Flag a Message" icon="flag" href="/sdk/react-native/flag-message">
    Report inappropriate messages
  </Card>
</CardGroup>
