# Changing Feed Visibility

## Changing Feed Visibility

<admonition type="warning">

Visibility changes are asynchronous. The API returns optimistically, then reconciles follow relationships in the background.

</admonition>

### How transitions behave

**Tightening visibility** (for example `visible` -> `members` or `private`):

- Users who no longer qualify are unfollowed automatically.
- Tightening to `members` keeps member follows and owner follow.
- Tightening to `private` keeps only owner follow.

**Loosening visibility** from `followers` (for example `followers` -> `visible`):

- Pending follow requests are processed by `pending_follows_action`:
  - `auto_approve` (default)
  - `reject`
- `pending_follows_action` is only used when transitioning away from `followers`.

### Examples

<Tabs>

```go label="Go"
feed := client.Feeds().Feed("user", "alice")

resp, err := feed.ChangeFeedVisibility(context.Background(), &getstream.ChangeFeedVisibilityRequest{
  Visibility: "followers",
})
if err != nil {
  log.Fatal(err)
}
log.Printf("updated visibility: %+v", resp.Data)

// Process pending follow requests while loosening from followers
_, err = feed.ChangeFeedVisibility(context.Background(), &getstream.ChangeFeedVisibilityRequest{
  Visibility:           "visible",
  PendingFollowsAction: getstream.PtrTo("reject"),
})
if err != nil {
  log.Fatal(err)
}
```

```js label="Node"
const feed = client.feeds.feed("user", "jack");

await feed.changeVisibility({
  visibility: "followers",
  user_id: "<user id>",
});

// Process pending follow requests while loosening from followers
await feed.changeVisibility({
  visibility: "visible",
  pending_follows_action: "auto_approve",
  user_id: "<user id>",
});
```

```php label="PHP"
$feed = $feedsClient->feed('user', 'jack');

$feed->changeFeedVisibility(
    new \GetStream\GeneratedModels\ChangeFeedVisibilityRequest(
        visibility: 'followers'
    )
);

// Process pending follow requests while loosening from followers
$feed->changeFeedVisibility(
    new \GetStream\GeneratedModels\ChangeFeedVisibilityRequest(
        visibility: 'visible',
        pendingFollowsAction: 'reject'
    )
);
```

```csharp label="C#"
var feed = _feedsV3Client.Feed("user", "jack");

await feed.ChangeFeedVisibilityAsync(new ChangeFeedVisibilityRequest
{
    Visibility = "followers"
});

await feed.ChangeFeedVisibilityAsync(new ChangeFeedVisibilityRequest
{
    Visibility = "visible",
    PendingFollowsAction = "auto_approve"
});
```

```ruby label="Ruby"
feed = client.feed('user', 'jack')

feed.change_feed_visibility(
  GetStream::Generated::Models::ChangeFeedVisibilityRequest.new(
    visibility: 'followers'
  )
)

feed.change_feed_visibility(
  GetStream::Generated::Models::ChangeFeedVisibilityRequest.new(
    visibility: 'visible',
    pending_follows_action: 'reject'
  )
)
```

```java label="Java"
Feed feed = new Feed("user", "jack", feedsClient);

feed.changeFeedVisibility(
    ChangeFeedVisibilityRequest.builder()
        .visibility("followers")
        .build());

feed.changeFeedVisibility(
    ChangeFeedVisibilityRequest.builder()
        .visibility("visible")
        .pendingFollowsAction("auto_approve")
        .build());
```

</Tabs>


---

This page was last updated at 2026-05-01T20:42:55.208Z.

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