Updating a Channel

There are two ways to update a channel with the Stream API: partial updates and full updates. A partial update preserves existing custom key–value data, while a full update replaces the entire channel object and removes any fields not included in the request.

Partial Update

A partial update lets you set or unset specific fields without affecting the rest of the channel’s custom data — essentially a patch-style update.

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

channel.GetOrCreate(ctx, &getstream.GetOrCreateChannelRequest{
	Data: &getstream.ChannelInput{
		CreatedByID: getstream.PtrTo("thierry"),
		Custom: map[string]any{
			"source":         "user",
			"source_detail":  map[string]any{"user_id": "123"},
			"channel_detail": map[string]any{"topic": "Plants and Animals", "rating": "pg"},
		},
	},
})

// let's change the source of this channel
channel.UpdateChannelPartial(ctx, &getstream.UpdateChannelPartialRequest{
	Set: getstream.PtrTo(map[string]any{
		"source": "system",
	}),
})

// since it's system generated we no longer need source_detail
channel.UpdateChannelPartial(ctx, &getstream.UpdateChannelPartialRequest{
	Unset: getstream.PtrTo([]string{"source_detail"}),
})

// and finally update one of the nested fields in the channel_detail
channel.UpdateChannelPartial(ctx, &getstream.UpdateChannelPartialRequest{
	Set: getstream.PtrTo(map[string]any{
		"channel_detail.topic": "Nature",
	}),
})

// and maybe we decide we no longer need a rating
channel.UpdateChannelPartial(ctx, &getstream.UpdateChannelPartialRequest{
	Unset: getstream.PtrTo([]string{"channel_detail.rating"}),
})

Full Update

The update function updates all of the channel data. Any data that is present on the channel and not included in a full update will be deleted.

channel.Update(ctx, &getstream.UpdateChannelRequest{
	Data: &getstream.ChannelInputRequest{
		Custom: map[string]any{
			"name":  "myspecialchannel",
			"color": "green",
		},
	},
})

Request Params

Name Type Description Optional
channel data object Object with the new channel information. One special field is "frozen". Setting this field to true will freeze the channel. Read more about freezing channels in "Freezing Channels"
text object Message object allowing you to show a system message in the Channel that something changed. Yes
Info:

Updating a channel using these methods cannot be used to add or remove members. For this, you must use specific methods for adding/removing members, more information can be found here.

Add Chat to my app: getstream.io/SKILL.md

The fastest way to build with Stream. Start a new project or improve an existing one. Full CLI and documentation integration out of the box.


Ask your agent:

/stream Build me a Social App with Feeds and Moderation.
/stream Any livestream calls running?
/stream Chat Go: <Your Question>