# Batch Endpoints

You can use batch endpoints to insert, delete or read multiple entries at once. These three endpoints are only available when running Stream on your backend.

### Upsert

Upsert allows you to insert or update up to 1000 entries with a single API call. The payload is an array of entries.
Entries that already exist (same ID) will be updated with the new version.

| name       | type   | description                                                         | default | optional |
| ---------- | ------ | ------------------------------------------------------------------- | ------- | -------- |
| collection | string | The name of the collection                                          | -       |          |
| entry_id   | string | The id of the entry, if not given an ID will be generated by Stream | -       | ✓        |
| data       | object | The data related to the user                                        | -       |          |

```go label="Go"
// Update the information for collection users with ID 123
	object := stream.CollectionObject{
		ID: "123",
		Data: map[string]any{
			"name":      "john doe",
			"favorite_color": "blue",
		},
	}
	resp, err := client.Collections().Upsert(context.TODO(), "users", object)
	if err != nil {
		panic(err)
	}
```

### Select

This method allows you to retrieve up to 1000 entries by ID.

| name        | type           | description                                                                        | default | optional |
| ----------- | -------------- | ---------------------------------------------------------------------------------- | ------- | -------- |
| foreign_ids | list of string | The list of collection:id entries to retrieve (eg. ["visitor:123", "visitor:124"]) | -       | ✓        |
| data        | object         | The data related to the user                                                       | -       |          |

```go label="Go"
// select the entries with ID 123 and 124 from items collection
	resp, err := client.Collections().Select(context.TODO(), "items", "123", "124")
	if err != nil {
		panic(err)
	}
```

### Delete Many

This method allows you to delete up to 1000 entries by ID.

| name       | type            | description                | default | optional |
| ---------- | --------------- | -------------------------- | ------- | -------- |
| collection | string          | The name of the collection | -       |          |
| ids        | list of strings | The list of id to remove   | -       | ✓        |

```go label="Go"
// delete the entries with ID 123 and 124 from visitor collection
	resp, err := client.Collections().DeleteMany(context.TODO(), "visitor", "123", "124")
	if err != nil {
		panic(err)
	}
```

<Admonition type="info">

When you delete an entry from a collection any references will be converted to a missing reference error when reading feeds with [enrichment](https://getstream.io/activity-feeds/docs/node/v2/enrichment/).

</Admonition>


---

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

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