Skip to main content
Quick Reference for AI Agents & Developers
// Delete a message
const message = await CometChat.deleteMessage(messageId);
console.log("Deleted at:", message.getDeletedAt());

// Listen for delete events
CometChat.addMessageListener("DELETE_LISTENER", new CometChat.MessageListener({
  onMessageDeleted: (message) => {
    console.log("Deleted:", message.getId());
    console.log("Deleted by:", message.getDeletedBy());
  }
}));

// Hide deleted messages when fetching
const messagesRequest = new CometChat.MessagesRequestBuilder()
  .setUID(uid)
  .hideDeletedMessages(true)
  .build();

// Check if message was deleted
if (message.getDeletedAt()) {
  // Show "This message was deleted" placeholder
}
CometChat allows users to delete messages from conversations. This guide covers deleting messages and handling delete events.
Available via: SDK | REST API | UI Kits

Delete a Message

Use deleteMessage() with the message ID to remove a message:
const messageId = 123;

CometChat.deleteMessage(messageId).then(
  (message) => {
    console.log("Message deleted:", message);
    console.log("Deleted at:", message.getDeletedAt());
    console.log("Deleted by:", message.getDeletedBy());
  },
  (error) => {
    console.log("Error:", error);
  }
);
The returned message object includes deletedAt and deletedBy fields to identify deleted messages.

Delete Permissions

User RoleConversation TypeCan Delete
Message SenderOne-on-OneOwn messages
Message SenderGroupOwn messages
Group AdminGroupAll messages
Group ModeratorGroupAll messages

Real-Time Delete Events

Listen for message deletions while your app is running:
const listenerID = "DELETE_LISTENER";

CometChat.addMessageListener(
  listenerID,
  new CometChat.MessageListener({
    onMessageDeleted: (message) => {
      console.log("Message deleted:", message);
      console.log("Deleted at:", message.getDeletedAt());
      console.log("Deleted by:", message.getDeletedBy());
      
      // Update your UI
      removeOrMarkDeletedInUI(message);
    }
  })
);

Deleted Message Properties

PropertyMethodDescription
Deleted AtgetDeletedAt()Timestamp when deleted
Deleted BygetDeletedBy()UID of user who deleted

Missed Delete Events

When fetching message history, deleted messages include deletedAt and deletedBy fields:
messagesRequest.fetchPrevious().then((messages) => {
  messages.forEach((message) => {
    if (message.getDeletedAt()) {
      console.log("This message was deleted");
      // Show "This message was deleted" placeholder
    } else {
      // Display message normally
    }
  });
});
Additionally, an Action message is created when a message is deleted:
FieldValue
action"deleted"
actionOnDeleted message object
actionByUser who deleted
actionForReceiver (User/Group)

Hide Deleted Messages

To exclude deleted messages from history, use the filter:
const messagesRequest = new CometChat.MessagesRequestBuilder()
  .setUID(UID)
  .setLimit(30)
  .hideDeletedMessages(true)
  .build();

messagesRequest.fetchPrevious().then((messages) => {
  // Only non-deleted messages returned
});

Example: Delete Message UI

function deleteMessage(messageId) {
  return CometChat.deleteMessage(messageId).then(
    (message) => {
      // Option 1: Remove from UI
      removeMessageFromUI(messageId);
      
      // Option 2: Show "deleted" placeholder
      markMessageAsDeleted(messageId);
      
      return message;
    },
    (error) => {
      console.error("Delete failed:", error);
      throw error;
    }
  );
}

// Check if message is deleted when rendering
function renderMessage(message) {
  if (message.getDeletedAt()) {
    return "<div class='deleted'>This message was deleted</div>";
  }
  return `<div class='message'>${message.getText()}</div>`;
}

Soft Delete vs Hard Delete

CometChat uses soft delete by default:
  • Message remains in the database
  • deletedAt and deletedBy fields are set
  • Message can still be retrieved in history (unless filtered)
This allows you to:
  • Show “This message was deleted” placeholders
  • Maintain conversation context
  • Comply with data retention requirements

Next Steps