---
source_url: https://www.pubnub.com/docs/chat/sdks/messages/message-deletes
title: Deleting messages (deprecated)
updated_at: 2026-05-25T11:25:36.346Z
---

> Documentation Index
> For a curated overview of PubNub documentation, see: https://www.pubnub.com/docs/llms.txt
> For the full list of all documentation pages, see: https://www.pubnub.com/docs/llms-full.txt


# Deleting messages (deprecated)

:::warning Use Chat SDKs
This documentation is deprecated. Use any of our dedicated [Chat SDKs](https://www.pubnub.com/docs/chat/overview) to quickly implement chat functionality in your application.
:::

Since PubNub stores all messages in a time-series database, it doesn’t expose an API to directly update a message. However, clients can update messages (or [soft delete](#soft-delete-a-message) them) by passing another version of the message using the Message Reactions feature.

## Soft delete a message

Use the [addMessageAction](https://www.pubnub.com/docs/sdks/javascript/api-reference/message-actions#add-message-reaction) method to soft delete a message after it has been published by adding an action to it.

Soft deleting a message just attaches a delete flag to the message. Refer to hard delete if you want to permanently delete the message from Message Persistence for compliance reasons.

:::note User ID / UUID
User ID is also referred to as **UUID/uuid** in some APIs and server responses but **holds the value** of the **userId** parameter you [set during initialization](https://www.pubnub.com/docs/general/setup/users-and-devices#set-the-user-id).
:::

###### JavaScript

```js
pubnub.addMessageAction(
  {
    channel: 'ch-1'
    messageTimetoken: '15610547826970040',
    action: {
      type: 'deleted',
      value: '.',
    },
  },
  function(status, response) {
  }
);
```

###### Swift

```swift
extension MyAppMessageAction: MessageAction {}

let action = MyAppMessageAction(type: "deleted", value: ".")

pubnub.addMessageAction(
  channel: "ch-1",
  message: action,
  messageTimetoken: 15610547826970040
) { result in
  switch result {
  case let .success(response):
    print("Successfully Message Reaction Add Response: \(response)")
  case let .failure(error):
    print("Error from failed response: \(error.localizedDescription)")
  }
})
```

###### Java

```java
pubnub.addMessageAction()
    .channel("ch-1")
    .messageAction(new PNMessageAction()
            .setType("deleted")
            .setValue(".")
            .setMessageTimetoken(15610547826970040L)
    )
    .async(result -> { /* check result */ });
```

###### Unity

```csharp
MessageActionAdd messageAct = new MessageActionAdd();
messageAct.ActionType = "deleted";
messageAct.ActionValue = ".";

pubnub.AddMessageActions().Channel("ch-1").MessageAction(messageAct).MessageTimetoken(15610547826970040).Async((result, status) => {
        if (!status.Error) {
            Debug.Log("result.ActionTimetoken: " + result.ActionTimetoken);
            Debug.Log("result.ActionType: " + result.ActionType);
            Debug.Log("result.ActionValue: " + result.ActionValue);
            Debug.Log("result.MessageTimetoken: " + result.MessageTimetoken);
            Debug.Log("result.UserID: " + result.UserId);
        } else {
            Debug.Log(status.Error);
            Debug.Log(status.ErrorData.Info);
        }
});
```

PubNub triggers events when messages are soft deleted using message reactions. Users subscribed to the channel can receive these events and mark the message as deleted.

```json
{
   "channel":"main",
   "subscription":null,
   "timetoken":"15610547826970040",
   "publisher":"user-1",
   "message":{
      "source":"actions",
      "version":"1.0",
      "action":"added",
      "data":{
         "type":"deleted",
         "value":".",
         "messageTimetoken":"15610547826970040",
         "actionTimetoken":"15610547826999081"
      }
   }
}
```

## Hard delete a message

The [deleteMessages](https://www.pubnub.com/docs/general/messages/actions#delete-messages) method permanently deletes messages from Message Persistence in a given channel. You can delete a single message, or a range of messages.

The Delete Message API looks backwards in time. The start timetoken parameter should be more forward in time than the end parameter: end < start.

In the example below, the `start` and `end` timetoken parameter values are 1/10 nanosecond (last digit of timetoken) apart to delete the message stored at the `end` parameter's timetoken value.

:::warning Required setting in Admin Portal
You need to turn on the *Enable Delete-From-History* setting on your keyset in [Admin Portal](https://admin.pubnub.com) in order to hard delete messages. We do not recommend heavy use of this API for performance reasons. Messages should be soft deleted when possible.
:::

###### JavaScript

```javascript
pubnub.deleteMessages(
  {
    channel: 'chats.room1',
    start: "15526611838554309",
    end: "15526611838554310",
  },
  function (status, response) {
    console.log(status, response);
  }
);
```

###### Swift

```swift
pubnub.deleteMessageHistory(
  from: "chats.room1",
  start: 15526611838554309,
  end: 15526611838554310
) { result in
  switch result {
    case let .success(response):
      print("Successful Message Deletion Response: \(response)")

    case let .failure(error):
      print("Failed Message Deletion Response: \(error.localizedDescription)")
  }
}
```

###### Objective-C

```objectivec
[self.client deleteMessagesFromChannel:@"chats.room1"
    start:@15526611838554309 end:@15526611838554310
    withCompletion:^(PNAcknowledgmentStatus *status) {

  if (status.isError) {
    // handle error condtion
  }
  else {
    // confirm delete success
  }
}];
```

###### Java

```java
pubnub.deleteMessages()
  .channels(Arrays.asList("chats.room1"))
  .start(15526611838554309L)
  .end(15526611838554310L)
  .async(result -> { /* check result */ });
```

###### C#

```csharp
pubnub.DeleteMessages().Channel("chats.room1")
  .Start(15526611838554309)
  .End(15526611838554310)
  .Execute(new PNDeleteMessageResultExt((result, status) => {
      if (status != null && status.Error) {
        Console.WriteLine(status.ErrorData.Information);
      }
      else if (result != null) {
        Console.WriteLine(pubnub.JsonPluggableLibrary.SerializeToJsonString(result));
      }
    }
  ));
```

###### Python

```python
envelope = PubNub(pnconf).delete_messages().channel('chats.room1') \
  .start(15526611838554309) \
  .end(15526611838554310) \
  .sync()
```