# V2 to V3 Migration

<admonition type="info">

Our team is working on an automated V2 to V3 migration system.
On this page you can read what changed in the API:

</admonition>

## V3 changes

**Backend vs Client side**

One of the largest changes is that in V2 we recommended a backend integration. V3 is built with both front-end and backend integrations in mind.

**Users**

User data on feeds 3.0 is shared with our video and chat products.

**Feeds**

Feeds need to be created before being used. So in the past you could add an activity to a feed and the feed would be automatically created.

In V3 you need to create the feed before adding activities to it. Feeds also have an owner which influences how client side permissions work.

**SDKs**

V3 comes with new SDKs so you want to use the modern SDKs.

**Foreign ID vs ID**

In v2 you needed to use a foreign id to indicate the uniqueness of activities and map it your system. In V3 of the API this has been replaced by making it possible to specify an ID when creating an activity

```jsx
// old
feed.addActivity({ foreign_id: "update:123" });

// new
feed.addActivity({ id: "update:123" });
```

**Activity structure**

```jsx
// old
activity = {
  actor: "john",
  verb: "post",
  text: "day in NYC",
  image_url: "my image",
  to: ["user:a", "user:b"],
};
// new
activity = {
  user: "john",
  type: "post",
  text: "day in NYC",
  attachments: [{ type: "image", image_url: "" }],
  feeds: ["user:a", "user:b"],
};
```

**1000 Feed pagination limit**

V2 of feeds has a limitation that you can only read up to 1000 activities in a feed. V3 has several changes related to this

- You can change a feed’s activity selectors to include certain feeds or queries of activities. This means you can include popular content or content close to the user (geolocation).
- It’s possible to query activities

**Aggregated, Notification and Flat feeds**

Aggregated and notification feeds are no longer a separate feed type in V3. Aggregation and notification are now just settings on the feed. This makes it easier to switch between how your feeds work.

## Migration steps

### Integrate the new SDKs

Start by integrating the new SDKs and verifying that your app works well.

### Enabling the V2 to V3 sync

On your V2 app enable the sync to V3 features. This will ensure that new data on your app is synced.
Before this will work you need to ensure that the relevant feed groups and settings are present in V3.

You want to make sure that all new data is syncing correctly and displayed well in your app.

### Export

```bash
stream-import login
stream-import export --api_key hello targetfile.json.gz
stream-import status --api_key helo
```

### Import

See the docs in the import system for running an import

### Clean up

You now have all data from V2 available in V3. Our team will clean up the unused V2 app after 6 months of no activity

---

This page was last updated at 2025-08-15T14:14:10.930Z.

For the most recent version of this documentation, visit [https://getstream.io/activity-feeds/docs/react-native/v2_to_v3_migration/](https://getstream.io/activity-feeds/docs/react-native/v2_to_v3_migration/).