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 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.
Truncation applies to every member by default. Set member_ids to scope it to specific members instead.
Truncate a Channel
Channel->Truncate();
// Or with parameters:
Channel->Truncate(
true, // bHardDelete
{}, // TruncatedAt
FMessage{TEXT("Dear Everyone. The channel has been truncated.")},
false, // bSkipPush
[]
{
// Channel is truncated
});Truncate for Specific Members
Set member_ids to hide the message history for specific members only. Every other member keeps their full view, and no messages are deleted. They stay in the channel and remain visible to everyone not listed.
Messages created before truncated_at are hidden from the listed members. When truncated_at is omitted it defaults to the time of the request, hiding the history to date.
This sets the same per-member history cutoff as Hide Channel with clear_history, but it does not hide the channel. The channel stays in the listed members' channel lists, and every member receives channel.truncated instead of the hiding user alone receiving channel.hidden.
// Hide the history for two members; everyone else keeps their full view
await channel.truncate({
member_ids: ["jane", "john"],
});
// Hide only the messages created before a given time
await channel.truncate({
member_ids: ["jane"],
truncated_at: new Date("2026-01-01T00:00:00Z"),
});Constraints
- Every ID in
member_idsmust belong to a current member of the channel. The request fails withnot all users are active channel membersotherwise. member_idsaccepts at most 100 IDs.hard_deletecannot be combined withmember_ids. Member-scoped truncation only hides messages, it never deletes them.truncated_atreplaces each listed member's existing cutoff rather than keeping the later of the two. A second call with an earliertruncated_atmakes the messages between the two times visible to those members again.truncated_atmust be later than the channel's last whole-channel truncation and not in the future. Otherwise the request fails with"truncated_at" field must be more recent than previous oneor"truncated_at" field must not be more recent than current time. A fixed past date, like the2026-01-01example above, fails on any channel truncated after it.- The
channel.truncatedevent is delivered to every member of the channel, not only the members listed inmember_ids. Client SDKs that clear their cached messages on this event do so for all members; the messages are unaffected on the server and reappear on the next fetch.
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 | ✓ |
| member_ids | array | Hide messages for specific members only | ✓ |