This guide shows how to migrate channel management code from stream-chat to getstream.
Before (stream-chat):
from stream_chat import StreamChat
client = StreamChat(api_key="your-api-key", api_secret="your-api-secret")
channel = client.channel("messaging", "general")
response = channel.create("user-1")After (getstream):
from getstream import Stream
from getstream.models import ChannelInput
client = Stream(api_key="your-api-key", api_secret="your-api-secret")
channel = client.chat.channel("messaging", "general")
response = channel.get_or_create(
data=ChannelInput(created_by_id="user-1")
)Key changes:
- Channel is accessed via
client.chat.channel()instead ofclient.channel() channel.create(user_id)becomeschannel.get_or_create(data=ChannelInput(created_by_id=user_id))
Before (stream-chat):
from stream_chat import StreamChat
client = StreamChat(api_key="your-api-key", api_secret="your-api-secret")
channel = client.channel("messaging", data={"members": ["user-1", "user-2"]})
channel.create("user-1")After (getstream):
from getstream import Stream
from getstream.models import ChannelInput, ChannelMemberRequest
client = Stream(api_key="your-api-key", api_secret="your-api-secret")
response = client.chat.get_or_create_distinct_channel(
type="messaging",
data=ChannelInput(
created_by_id="user-1",
members=[
ChannelMemberRequest(user_id="user-1"),
ChannelMemberRequest(user_id="user-2"),
],
),
)Key changes:
- Uses
client.chat.get_or_create_distinct_channel()instead ofclient.channel()with no ID - Members use
ChannelMemberRequestobjects instead of plain strings - Member list goes inside
ChannelInputrather than a data dict
Before (stream-chat):
from stream_chat import StreamChat
client = StreamChat(api_key="your-api-key", api_secret="your-api-secret")
response = client.query_channels(
filter_conditions={"members": {"$in": ["user-1"]}},
sort=[{"field": "last_message_at", "direction": -1}],
limit=20,
)After (getstream):
from getstream import Stream
from getstream.models import SortParamRequest
client = Stream(api_key="your-api-key", api_secret="your-api-secret")
response = client.chat.query_channels(
filter_conditions={"members": {"$in": ["user-1"]}},
sort=[SortParamRequest(field="last_message_at", direction=-1)],
limit=20,
)Key changes:
- Called on
client.chatsub-client instead ofclientdirectly - Sort uses
SortParamRequestobjects instead of plain dicts
Before (stream-chat):
from stream_chat import StreamChat
client = StreamChat(api_key="your-api-key", api_secret="your-api-secret")
channel = client.channel("messaging", "general")
channel.add_members(["user-3", "user-4"])After (getstream):
from getstream import Stream
from getstream.models import ChannelMemberRequest
client = Stream(api_key="your-api-key", api_secret="your-api-secret")
channel = client.chat.channel("messaging", "general")
response = channel.update(
add_members=[
ChannelMemberRequest(user_id="user-3"),
ChannelMemberRequest(user_id="user-4"),
]
)Key changes:
- No dedicated
add_members()method; usechannel.update(add_members=[...])instead - Members are
ChannelMemberRequestobjects instead of plain strings
Before (stream-chat):
from stream_chat import StreamChat
client = StreamChat(api_key="your-api-key", api_secret="your-api-secret")
channel = client.channel("messaging", "general")
channel.remove_members(["user-3"])After (getstream):
from getstream import Stream
client = Stream(api_key="your-api-key", api_secret="your-api-secret")
channel = client.chat.channel("messaging", "general")
response = channel.update(remove_members=["user-3"])Key changes:
- No dedicated
remove_members()method; usechannel.update(remove_members=[...])instead
Before (stream-chat):
from stream_chat import StreamChat
client = StreamChat(api_key="your-api-key", api_secret="your-api-secret")
channel = client.channel("messaging", "general")
channel.update({"color": "blue", "name": "General Chat"})After (getstream):
from getstream import Stream
from getstream.models import ChannelInputRequest
client = Stream(api_key="your-api-key", api_secret="your-api-secret")
channel = client.chat.channel("messaging", "general")
response = channel.update(
data=ChannelInputRequest(custom={"color": "blue", "name": "General Chat"})
)Key changes:
- Channel data passed as
ChannelInputRequestvia thedatakeyword instead of a plain dict - Custom fields go in the
customdict
Before (stream-chat):
from stream_chat import StreamChat
client = StreamChat(api_key="your-api-key", api_secret="your-api-secret")
channel = client.channel("messaging", "general")
channel.update_partial(to_set={"color": "red"}, to_unset=["old_field"])After (getstream):
from getstream import Stream
client = Stream(api_key="your-api-key", api_secret="your-api-secret")
channel = client.chat.channel("messaging", "general")
response = channel.update_channel_partial(
set={"color": "red"},
unset=["old_field"],
)Key changes:
- Method renamed from
update_partial()toupdate_channel_partial() - Parameters renamed from
to_set/to_unsettoset/unset
Before (stream-chat):
from stream_chat import StreamChat
client = StreamChat(api_key="your-api-key", api_secret="your-api-secret")
channel = client.channel("messaging", "general")
channel.delete()After (getstream):
from getstream import Stream
client = Stream(api_key="your-api-key", api_secret="your-api-secret")
channel = client.chat.channel("messaging", "general")
response = channel.delete(hard_delete=False)Key changes:
hard_deleteparameter is explicit (defaults toFalsefor soft delete)
Before (stream-chat):
from stream_chat import StreamChat
client = StreamChat(api_key="your-api-key", api_secret="your-api-secret")
response = client.delete_channels(
["messaging:channel1", "team:channel2"],
hard_delete=True,
)After (getstream):
from getstream import Stream
client = Stream(api_key="your-api-key", api_secret="your-api-secret")
response = client.chat.delete_channels(
cids=["messaging:channel1", "team:channel2"],
hard_delete=True,
)Key changes:
- Called on
client.chatsub-client - CIDs passed via
cidskeyword argument