open_channel:create
open_channel:remove
open_channel:enter
open_channel:exit
open_channel:message_send
open_channel:message_update
open_channel:message_delete
group_channel:create
group_channel:changed
group_channel:remove
group_channel:invite
group_channel:join
group_channel:decline_invite
group_channel:leave
group_channel:message_send
group_channel:message_read
group_channel:message_update
group_channel:message_delete
group_channel:reaction_add
group_channel:reaction_delete
Sendbird Migration
Migrating data from Sendbird to Stream Chat is easy. Sendbird lets you export chat data from your account. The Stream Dashboard supports importing data exported from Sendbird.
When rebuilding your chat functions with Stream, there are some key differences to keep in mind.
Channel Types
Sendbird has 2 channel types:
Open channels
Group channels
Stream Chat has 5 built-in channel types:
livestream
messaging
commerce
gaming
team
Stream Chat also supports creating your own channel types. This allows you to configure the features and permissions to exactly fit your use case.
Usually, you’ll want to use the “livestream” chat type if you’re using a Sendbird open channel.
Channels
Instead of the getChannel
and channel.enter
, Stream uses 1 API call to both get and enter a channel.
The concept of UserMessage and FileMessage in Sendbird is replaced using a Message with a list of attachments.
Thumbnails
Sendbird requires you to specify different thumbnails up-front. Stream lets you request different image sizes at read time.
Private vs. Public Groups
This difference is handled by Stream’s permission system. You can allow or not allow non-members to edit the list of members for a channel.
Realtime sync from Sendbird to Stream
This feature is only available on Stream’s Enterprise pricing plans. Request the Stream team to enable this feature for your app by contacting support.
Stream enables real-time data synchronization from Sendbird through webhook integration. When used together with Stream-to-Sendbird sync, this allows for a gradual migration to Stream, ensuring everything functions correctly. This approach is particularly useful when you can’t control user upgrade timing, such as with mobile apps.
Setup
To begin synchronization, provide Stream with your Sendbird app ID and token. Once Stream enables the sync, configure your Sendbird webhook URL to https://chat.stream-io-api.com/sendbird/webhook?api_key=<YOUR_STREAM_API_KEY>
in the Sendbird webhook configuration page.
Stream processes each incoming Sendbird webhook by storing its payload in a persistent queue. This enables webhook replay if failures or misconfigurations occur, while guaranteeing chronological processing of events without any out-of-order handling.
Default configuration
- The default admin user (and creator of channels) on Stream side is
data-migration-admin
- The channel ID will be the same as in Sendbird, but with the prefixes
sendbird_{group,open}_channel_
stripped - The channel type will be
custom_type
if set on the Sendbird channel objectpublic
if the Sendbird channel type isopen
or the channel is publicmessaging
if none of the above is true
- The user
name
on Stream side will come from the usernickname
on the Sendbird side - The user
image
on Stream side will come from the userprofileUrl
on the Sendbird side - The message type will be
system
if the message is aADMM
message from Sendbirdregular
otherwise
- The default channel role will be
channel_member
These defaults can be overridden by request.
Handled events
The following events are handled as defined by the category
field in the Sendbird webhook:
If you only wish to have Stream handle a subset of these it is also configurable.