---
source_url: https://www.pubnub.com/docs/chat/kotlin-chat-sdk/build/features/messages/delete
title: Delete messages
updated_at: 2026-06-15T12:11:32.373Z
---

> 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


# Delete messages

`delete()` permanently removes a message from Message Persistence or marks it as `deleted` (soft delete).

:::note Requires Message Persistence
Enable [Message Persistence](https://youtu.be/qLMtbINWGig) and **Enable Delete-From-History** in the [Admin Portal](https://admin.pubnub.com/).
:::

### Method signature

This method takes the following parameters:

```kotlin
message.delete(soft: Boolean = false, preserveFiles: Boolean = false): PNFuture<Message?>
```

#### Input

| Parameter | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| soft | Boolean | Optional | `false` | When `false` (default), permanently deletes message data. When `true`, marks the [Message object](https://www.pubnub.com/docs/chat/kotlin-chat-sdk/learn/chat-entities/message) as `deleted` while preserving data for restoration. |
| preserveFiles | Boolean | Optional | `false` | Whether to keep files attached to the message. |

#### Output

| Type | Description |
| --- | --- |
| `PNFuture<Message?>` | For hard delete, the method returns the last version of the `Message` object before it was permanently deleted. For soft delete, an updated message instance with an added `deleted` action type. |

### Sample code

Permanently delete the message with the `16200000000000001` timetoken from the `support` channel.

```kotlin
val channel: Channel
// ...

// define the timetoken of the message to archive (soft delete)
val messageTimetoken: Long = 16200000000000001

channel.getMessage(messageTimetoken).async { messageResult ->
    messageResult.onSuccess { message ->
        // handle success
        message?.delete()?.async { deleteResult ->
            deleteResult.onSuccess {
                // handle success
                println("Message successfully deleted: ${it?.timetoken}")
            }.onFailure {
                // handle failure
                println("Failed to delete the message: ${it.message}")
            }
        }
    }.onFailure {
        // handle failure
        println("Failed to fetch the message: ${it.message}")
    }
}
```

### Other examples

Archive (soft delete) the message with the `16200000000000001` timetoken from the `support` channel, keeping its data in Message Persistence.

```kotlin
val channel: Channel
// ...

// define the timetoken of the message to archive (soft delete)
val messageTimetoken: Long = 16200000000000001

channel.getMessage(messageTimetoken).async { messageResult ->
    messageResult.onSuccess { message ->
        // handle success
        message?.delete(soft = true)?.async { deleteResult ->
            deleteResult.onSuccess {
                // handle success
                println("Message successfully soft deleted: ${it?.timetoken}")
            }.onFailure {
                // handle failure
                println("Failed to soft delete the message: ${it.message}")
            }
        }
    }.onFailure {
        // handle failure
        println("Failed to fetch the message: ${it.message}")
    }
}
```