# Truncate Channel

Truncating a channel removes all messages but preserves the channel data and members. To delete both the channel and its messages, use [Delete Channel](/chat/docs/<framework>/channel_delete/) instead.

Truncation can be performed client-side or server-side. Client-side truncation requires the `TruncateChannel` permission.

On server-side calls, use the `user_id` field to identify who performed the truncation.

By default, truncation hides messages. To permanently delete messages, set `hard_delete` to `true`.

## Truncate a Channel

<codetabs>

<codetabs-item value="kotlin" label="Kotlin">

```kotlin
// Removes all of the messages of the channel but doesn't affect the channel data or members
channelClient.truncate().enqueue { result ->
  if (result is Result.Success) {
    // Channel is truncated
  } else {
    // Handle Result.Failure
  }
}

// Or with message parameter.
val message = Message(text = "Dear Everyone. The channel has been truncated.")
channelClient.truncate(systemMessage = message).enqueue { result ->
  if (result is Result.Success) {
    // Channel is truncated
  } else {
    // Handle Result.Failure
  }
}
```

</codetabs-item>

<codetabs-item value="javascript" label="JavaScript">

```js
await channel.truncate();

// Or with parameters:
await channel.truncate({
 'hard_delete': true,
 'skip_push': false,
 'message': {
  'text': 'Dear Everyone. The channel has been truncated.'
  'user_id': user['id']
 }
});

// Setting user_id server side:
await channel.truncate({
 'user_id': user['id']
 });
```

</codetabs-item>

<codetabs-item value="python" label="Python">

```python
from getstream.models import MessageRequest

# Get a channel
channel = client.chat.channel("messaging", "general")

channel.truncate()

# Or with parameters:
channel.truncate(
    hard_delete=True,
    skip_push=True,
    message=MessageRequest(
        text="Dear Everyone. The channel has been truncated.",
        user_id=random_user["id"],
    ),
)
```

</codetabs-item>

<codetabs-item value="csharp" label="C#">

```csharp
using GetStream;
using GetStream.Models;

var client = new StreamClient("{{ api_key }}", "{{ api_secret }}");
var chat = new ChatClient(client);

var channelId = "channel-id";

// Truncate a channel
await chat.TruncateChannelAsync("messaging", channelId,
    new TruncateChannelRequest());

// Or with parameters:
await chat.TruncateChannelAsync("messaging", channelId,
    new TruncateChannelRequest
    {
        SkipPush = true,
        HardDelete = true,
        Message = new MessageRequest
        {
            Text = "Dear Everyone. The channel has been truncated.",
            UserID = "user-id"
        }
    });
```

</codetabs-item>

<codetabs-item value="ruby" label="Ruby">

```ruby
require 'getstream_ruby'

Models = GetStream::Generated::Models

client.chat.truncate_channel("messaging", "general", Models::TruncateChannelRequest.new)

# Or with parameters:
client.chat.truncate_channel("messaging", "general", Models::TruncateChannelRequest.new(
  skip_push: true,
  hard_delete: true,
  message: Models::MessageRequest.new(
    text: "Dear Everyone. The channel has been truncated.",
    user_id: user_id
  )
))
```

</codetabs-item>

<codetabs-item value="php" label="PHP">

```php
use GetStream\ChatClient;
use GetStream\GeneratedModels as Models;

$client = new ChatClient("{{ api_key }}", "{{ api_secret }}");

$client->truncateChannel("messaging", "general", new Models\TruncateChannelRequest());

// Or with parameters:
$client->truncateChannel("messaging", "general", new Models\TruncateChannelRequest(
    message: new Models\MessageRequest(
        text: "Dear Everyone. The channel has been truncated.",
        userID: $userId,
    ),
    skipPush: true,
));
```

</codetabs-item>

<codetabs-item value="go" label="Go">

```go
channel := client.Chat().Channel("messaging", "general")

channel.Truncate(ctx, &getstream.TruncateChannelRequest{})

// Or with parameters:
channel.Truncate(ctx, &getstream.TruncateChannelRequest{
	SkipPush:   getstream.PtrTo(true),
	HardDelete: getstream.PtrTo(true),
	Message: &getstream.MessageRequest{
		Text:   getstream.PtrTo("Truncated channel."),
		UserID: getstream.PtrTo(userID),
	},
})
```

</codetabs-item>

<codetabs-item value="swift" label="Swift">

```swift
let controller = client.channelController(for: .init(type: .messaging, id: "general"))

controller.truncateChannel()
```

</codetabs-item>

<codetabs-item value="unity" label="Unity">

```csharp
await channel.TruncateAsync(systemMessage: "Clearing up the history!");
```

</codetabs-item>

<codetabs-item value="java" label="Java">

```java
// Android SDK

// Removes all of the messages of the channel but doesn't affect the channel data or members
channelClient.truncate().enqueue(result -> {
  if (result.isSuccess()) {
    // Channel is truncated
  } else {
    // Handle result.error()
  }
});

// Backend SDK
chat.truncateChannel(type, id, TruncateChannelRequest.builder().build()).execute();
```

</codetabs-item>

<codetabs-item value="unreal" label="Unreal">

```cpp
Channel->Truncate();

// Or with parameters:
Channel->Truncate(
  true,  // bHardDelete
  {},   // TruncatedAt
  FMessage{TEXT("Dear Everyone. The channel has been truncated.")},
  false,  // bSkipPush
  []
  {
    // Channel is truncated
  });
```

</codetabs-item>

</codetabs>

## Truncate Options

| Field        | Type   | Description                                            | Optional |
| ------------ | ------ | ------------------------------------------------------ | -------- |
| truncated_at | Date   | Truncate messages up to this time                      | ✓        |
| user_id      | string | User who performed the truncation (server-side only)   | ✓        |
| message      | object | A system message to add after truncation               | ✓        |
| skip_push    | bool   | Do not send a push notification for the system message | ✓        |
| hard_delete  | bool   | Permanently delete messages instead of hiding them     | ✓        |


---

This page was last updated at 2026-03-13T13:15:46.900Z.

For the most recent version of this documentation, visit [https://getstream.io/chat/docs/android/truncate_channel/](https://getstream.io/chat/docs/android/truncate_channel/).