# References

When you add a user or a collection object to an activity, Stream stores the unique reference and replaces it at read time. In some complex cases, you need to be able to generate a reference to an existing object and embed that inside of an activity.

```js label="JavaScript"
// First create a collection entry with upsert api
await client.collections.upsert("food", [
  { id: "cheese-burger", name: "Cheese Burger" },
]);

// Then create a user
await client.user("john-doe").create({
  name: "John Doe",
  occupation: "Software Engineer",
  gender: "male",
});

// Since we know their IDs we can create references to both without reading from APIs
const cheeseBurgerRef = client.collections.entry("food", "cheese-burger");
const johnDoeRef = client.user("john-doe");

// And then add an activity with these references
await client.feed("user", "john").addActivity({
  actor: johnDoeRef,
  verb: "eat",
  object: cheeseBurgerRef,
});
```

<Admonition type="info">

If you are using the APIs on web / mobile (see auth section) you must set activity.actor to the reference of the current user or otherwise you will get a permission error (see examples above).

</Admonition>


---

This page was last updated at 2026-08-07T20:37:31.037Z.

For the most recent version of this documentation, visit [https://getstream.io/activity-feeds/docs/javascript/v2/collections-references/](https://getstream.io/activity-feeds/docs/javascript/v2/collections-references/).