# 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](/chat/docs/<framework>/import/) 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.

[You can query users](https://docs.sendbird.com/javascript/application#3_retrieve_a_list_of_all_or_certain_users_in_an_application)

### Realtime sync from Sendbird to Stream

<admonition type="info">

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](https://getstream.io/contact/support/).

</admonition>

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 object
  - `public` if the Sendbird channel type is `open` or the channel is public
  - `messaging` if none of the above is true
- The user `name` on Stream side will come from the user `nickname` on the Sendbird side
- The user `image` on Stream side will come from the user `profileUrl` on the Sendbird side
- The message type will be
  - `system` if the message is a `ADMM` message from Sendbird
  - `regular` 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:

```text
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
```

If you only wish to have Stream handle a subset of these it is also configurable.

---

This page was last updated at 2025-08-19T14:51:03.834Z.

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