// Adding a bookmark to a new folder
let bookmark = try await feed.addBookmark(activityId: "activity_123")
// Adding to an existing folder
let bookmarkWithFolder = try await feed.addBookmark(
    activityId: "activity_123",
    request: .init(folderId: "folder_456")
)
// Update a bookmark (without a folder initially) - add custom data and move it to a new folder
let updatedBookmark = try await feed.updateBookmark(
    activityId: "activity_123",
    request: .init(
        custom: ["color": "blue"],
        newFolder: .init(
            custom: ["icon": "π"],
            name: "New folder name"
        )
    )
)
// Update a bookmark - move it from one existing folder to another existing folder
let movedBookmark = try await feed.updateBookmark(
    activityId: "activity_123",
    request: .init(
        folderId: "folder_456",
        newFolderId: "folder_789"
    )
)Activity Feeds v3 is in beta β try it out!
Bookmarks
Overview
The API includes built-in support for bookmarking activities. Hereβs a quick example of how to use the bookmark API.
Adding Bookmarks
// Adding a bookmark to a new folder
val bookmark: Result<BookmarkData> = feed.addBookmark(activityId = "activity_123")
// Adding to an existing folder
val bookmarkWithFolder: Result<BookmarkData> = feed.addBookmark(
    activityId = "activity_123",
    request = AddBookmarkRequest(folderId = "folder_456")
)
// Update a bookmark (without a folder initially) - add custom data and move it to a new folder
val updatedBookmark: Result<BookmarkData> = feed.updateBookmark(
    activityId = "activity_123",
    request = UpdateBookmarkRequest(
        custom = mapOf("color" to "blue"),
        newFolder = AddFolderRequest(
            custom = mapOf("icon" to "π"),
            name = "New folder name"
        )
    )
)
// Update a bookmark - move it from one existing folder to another existing folder
val movedBookmark: Result<BookmarkData> = feed.updateBookmark(
    activityId = "activity_123",
    request = UpdateBookmarkRequest(
        folderId = "folder_456",
        newFolderId = "folder_789"
    )
)// Adding a bookmark to a new folder
const bookmark = await client.addBookmark({
  activity_id: "activity_123",
});
// Adding to an existing folder
const bookmarkWithFolder = await client.addBookmark({
  activity_id: "activity_123",
  folder_id: "folder_456",
});
// Update a bookmark (without a folder initially) - add custom data and move it to a new folder
const updatedBookmark = await client.updateBookmark({
  activity_id: "activity_123",
  folder_id: "<old folder id>",
  new_folder: {
    name: "New folder name",
    custom: {
      icon: "π",
    },
  },
  custom: {
    color: "blue",
  },
});
// Update a bookmark - move it from one existing folder to another existing folder
const movedBookmark = await client.updateBookmark({
  activity_id: "activity_123",
  folder_id: "<old folder id>",
  new_folder_id: "<new folder id>",
});// Adding a bookmark to a new folder
final bookmark = await feed.addBookmark(activityId: 'activity_123');
// Adding to an existing folder
final bookmarkWithFolder = await feed.addBookmark(
  activityId: 'activity_123',
  request: const AddBookmarkRequest(folderId: 'folder_456'),
);
// Update a bookmark (without a folder initially) - add custom data and move it to a new folder
final updatedBookmark = await feed.updateBookmark(
  activityId: 'activity_123',
  request: const UpdateBookmarkRequest(
    custom: {'color': 'blue'},
    newFolder: AddFolderRequest(
      custom: {'icon': 'π'},
      name: 'New folder name',
    ),
  ),
);
// Update a bookmark - move it from one existing folder to another existing folder
final movedBookmark = await feed.updateBookmark(
  activityId: 'activity_123',
  request: const UpdateBookmarkRequest(
    folderId: 'folder_456',
    newFolderId: 'folder_789',
  ),
);// Adding a bookmark to a new folder
const bookmark = await client.feeds.addBookmark({
  activity_id: "activity_123",
  user_id: "<user_id>",
});
// Adding to an existing folder
const bookmarkWithFolder = await client.feeds.addBookmark({
  activity_id: "activity_123",
  folder_id: "folder_456",
  user_id: "<user_id>",
});
// Update a bookmark (without a folder initially) - add custom data and move it to a new folder
const updatedBookmark = await client.feeds.updateBookmark({
  activity_id: "activity_123",
  folder_id: "<old folder id>",
  new_folder: {
    name: "New folder name",
    custom: {
      icon: "π",
    },
  },
  custom: {
    color: "blue",
  },
  user_id: "<user_id>",
});
// Update a bookmark - move it from one existing folder to another existing folder
const movedBookmark = await client.feeds.updateBookmark({
  activity_id: "activity_123",
  folder_id: "<old folder id>",
  new_folder_id: "<new folder id>",
  user_id: "<user_id>",
});// Adding a bookmark to a new folder
_, err = client.Feeds().AddBookmark(context.Background(), activityID, &getstream.AddBookmarkRequest{
  UserID: getstream.PtrTo("john"),
})
if err != nil {
  log.Fatal("Error adding bookmark:", err)
}
// Adding to an existing folder
_, err = client.Feeds().AddBookmark(context.Background(), activityID, &getstream.AddBookmarkRequest{
  FolderID: getstream.PtrTo("folder_456"),
  UserID:   getstream.PtrTo("john"),
})
if err != nil {
  log.Fatal("Error adding bookmark to folder:", err)
}
// Update a bookmark (without a folder initially) - add custom data and move it to a new folder
_, err = client.Feeds().UpdateBookmark(context.Background(), activityID, &getstream.UpdateBookmarkRequest{
  FolderID: getstream.PtrTo("old folder id"),
  NewFolder: &getstream.AddFolderRequest{
    Name: "New folder name",
    Custom: map[string]any{
      "icon": "π",
    },
  },
  Custom: map[string]any{
    "color": "blue",
  },
  UserID: getstream.PtrTo("john"),
})
if err != nil {
  log.Fatal("Error updating bookmark:", err)
}
// Update a bookmark - move it from one existing folder to another existing folder
_, err = client.Feeds().UpdateBookmark(context.Background(), activityID, &getstream.UpdateBookmarkRequest{
  FolderID:    getstream.PtrTo("old folder id"),
  NewFolderID: getstream.PtrTo("new folder id"),
  UserID:      getstream.PtrTo("john"),
})
if err != nil {
  log.Fatal("Error moving bookmark:", err)
}AddBookmarkRequest bookmarkRequest =
    AddBookmarkRequest.builder()
        .userID(testUserId)
        .newFolder(AddFolderRequest.builder().name("test-bookmarks1").build())
        .build();
AddBookmarkResponse response =
    feeds.addBookmark(activityId, bookmarkRequest).execute().getData();// Adding a bookmark to a new folder
$response = $feedsClient->addBookmark(
    'activity_123',
    new GeneratedModels\AddBookmarkRequest(
        userID: 'user_123',
        newFolder: new GeneratedModels\AddFolderRequest(name: 'New folder name')
    )
);
// Adding to an existing folder
$response = $feedsClient->addBookmark(
    'activity_123',
    new GeneratedModels\AddBookmarkRequest(
        userID: 'user_123',
        folderID: 'folder_456'
    )
);
// Update a bookmark (without a folder initially) - add custom data and move it to a new folder
$response = $feedsClient->updateBookmark(
    'activity_123',
    new GeneratedModels\UpdateBookmarkRequest(
        userID: 'user_123',
        custom: (object)['color' => 'blue'],
        newFolder: new GeneratedModels\AddFolderRequest(
            name: 'New folder name',
            custom: (object)['icon' => 'π']
        )
    )
);
// Update a bookmark - move it from one existing folder to another existing folder
$response = $feedsClient->updateBookmark(
    'activity_123',
    new GeneratedModels\UpdateBookmarkRequest(
        userID: 'user_123',
        folderID: 'folder_456',
        newFolderID: 'folder_789'
    )
);var response = await _feedsV3Client.AddBookmarkAsync(
    activityId,
    new AddBookmarkRequest
    {
        UserID = _testUserId,
        NewFolder = new AddFolderRequest { Name = "test-bookmarks1" }
    }
);response = self.client.feeds.add_bookmark(
    activity_id,
    user_id=self.test_user_id,
    new_folder=AddFolderRequest(name="test-bookmarks1"),
)# Adding a bookmark to a new folder
bookmark_request = GetStream::Generated::Models::AddBookmarkRequest.new(
  user_id: 'user123',
  new_folder: GetStream::Generated::Models::AddFolderRequest.new(
    name: 'test-bookmarks1'
  )
)
response = client.feeds.add_bookmark(activity_id, bookmark_request)
# Adding to an existing folder
bookmark_with_folder_request = GetStream::Generated::Models::AddBookmarkRequest.new(
  user_id: 'user123',
  folder_id: 'folder_456'
)
response = client.feeds.add_bookmark(activity_id, bookmark_with_folder_request)
# Update a bookmark (without a folder initially) - add custom data and move it to a new folder
update_request = GetStream::Generated::Models::UpdateBookmarkRequest.new(
  user_id: 'user123',
  custom: {
    color: 'blue'
  },
  new_folder: GetStream::Generated::Models::AddFolderRequest.new(
    name: 'New folder name',
    custom: {
      icon: 'π'
    }
  )
)
response = client.feeds.update_bookmark(activity_id, update_request)
# Update a bookmark - move it from one existing folder to another existing folder
move_request = GetStream::Generated::Models::UpdateBookmarkRequest.new(
  user_id: 'user123',
  folder_id: 'folder_456',
  new_folder_id: 'folder_789'
)
response = client.feeds.update_bookmark(activity_id, move_request)Removing Bookmarks
// Removing a bookmark
try await feed.deleteBookmark(
    activityId: "activity_123",
    folderId: "folder_456"
)
// When you read a feed we include the bookmark
try await feed.getOrCreate()
print(feed.state.activities[0].ownBookmarks)// Removing a bookmark
feed.deleteBookmark(
    activityId = "activity_123",
    folderId = "folder_456"
)
// When you read a feed we include the bookmark
feed.getOrCreate()
feed.state.activities.collect { activities ->
    println(activities.first().ownBookmarks)
}// Removing a bookmark
await client.deleteBookmark({
  activity_id: activityId,
});
// When you read a feed we include the bookmark
const response = await feed.getOrCreate({ watch: true });
console.log(feed.state.getLatestValue().activities?.[0].own_bookmarks);
console.log(feed.state.getLatestValue().activities?.[0].bookmark_count);// Removing a bookmark
await feed.deleteBookmark(activityId: 'activity_123', folderId: 'folder_456');
// When you read a feed we include the bookmark
final feedData = await feed.getOrCreate();
print(feed.state.activities[0].ownBookmarks);// Removing a bookmark
await serverClient.feeds.deleteBookmark({
  activity_id: activityId,
  user_id: testUser2.id,
});
// When you read a feed we include the bookmark
const response = await feed.getOrCreate({ user_id: "sara" });
console.log(results.activities[0].own_bookmarks);
console.log(results.activities[0].bookmark_count);_, err = client.Feeds().DeleteBookmark(context.Background(), activityID, &getstream.DeleteBookmarkRequest{
  FolderID: getstream.PtrTo(folderID),
  UserID: getstream.PtrTo("john"),
})UpdateBookmarkRequest updateRequest =
    UpdateBookmarkRequest.builder().folderID(folderID).userID(testUserId).build();
UpdateBookmarkResponse response =
    feeds.updateBookmark(activityId, updateRequest).execute().getData();// Removing a bookmark
$response = $feedsClient->deleteBookmark(
    'activity_123',
    'folder_456',
    'user_123'
);
// When you read a feed we include the bookmark
$feedResponse = $feedsClient->getOrCreateFeed('user', 'user_123', new GeneratedModels\GetOrCreateFeedRequest(
  userID: 'user_123'
));
$activities = $feedResponse->getData()->activities;
echo $activities[0]['own_bookmarks'];
echo $activities[0]['bookmark_count'];var response = await _feedsV3Client.UpdateBookmarkAsync(
    activityId,
    new UpdateBookmarkRequest
    {
        UserID = _testUserId,
        FolderID = folderId  // Use existing folder ID, not create new folder
    }
);bookmark_data = bookmark_response.data
folder_id = bookmark_data.bookmark.folder.id
response = self.client.feeds.update_bookmark(
    activity_id, folder_id=folder_id, user_id=self.test_user_id
)# Removing a bookmark
response = client.feeds.delete_bookmark(activity_id, folder_id, 'user123')
# When you read a feed we include the bookmark
feed_response = client.feeds.get_or_create('user', 'user123')
puts feed_response.activities[0].own_bookmarks
puts feed_response.activities[0].bookmark_countQuerying Bookmarks
// Query bookmarks
let query = BookmarksQuery(limit: 5)
let bookmarkList = client.bookmarkList(for: query)
let page1 = try await bookmarkList.get()
// Get next page
let page2 = try await bookmarkList.queryMoreBookmarks(limit: 3)
// Query by activity ID
let activityBookmarkList = client.bookmarkList(
    for: .init(
        filter: .equal(.activityId, "activity_123")
    )
)
let activityBookmarks = try await activityBookmarkList.get()
// Query by folder ID
let folderBookmarkList = client.bookmarkList(
    for: .init(
        filter: .equal(.folderId, "folder_456")
    )
)
let folderBookmarks = try await folderBookmarkList.get()// Query bookmarks
val query = BookmarksQuery(limit = 5)
val bookmarkList = client.bookmarkList(query = query)
val page1: Result<List<BookmarkData>> = bookmarkList.get()
// Get next page
val page2: Result<List<BookmarkData>> = bookmarkList.queryMoreBookmarks(limit = 3)
// Query by activity ID
val activityBookmarkList = client.bookmarkList(
    query = BookmarksQuery(
        filter = BookmarksFilterField.activityId.equal("activity_123")
    )
)
val activityBookmarks: Result<List<BookmarkData>> = activityBookmarkList.get()
// Query by folder ID
val folderBookmarkList = client.bookmarkList(
    query = BookmarksQuery(
        filter = BookmarksFilterField.folderId.equal("folder_456")
    )
)
val folderBookmarks: Result<List<BookmarkData>> = folderBookmarkList.get()// Query bookmarks
const firstPage = await client.queryBookmarks({
  limit: 2,
});
// Get next page
const secondPage = await client.queryBookmarks({
  limit: 2,
  next: firstPage.next,
});
// Query by activity ID
const response = await client.queryBookmarks({
  filter: {
    activity_id: "activity_123",
  },
});
// Query by folder ID
const response = await client.queryBookmarks({
  filter: {
    folder_id: "folder_456",
  },
});// Query bookmarks
const query = BookmarksQuery(limit: 5);
final bookmarkList = client.bookmarkList(query);
final page1 = await bookmarkList.get();
// Get next page
final page2 = await bookmarkList.queryMoreBookmarks(limit: 3);
// Query by activity ID
final activityBookmarkList = client.bookmarkList(
  const BookmarksQuery(
    filter: Filter.equal(BookmarksFilterField.activityId, 'activity_123'),
  ),
);
final activityBookmarks = await activityBookmarkList.get();
// Query by folder ID
final folderBookmarkList = client.bookmarkList(
  const BookmarksQuery(
    filter: Filter.equal(BookmarksFilterField.folderId, 'folder_456'),
  ),
);
final folderBookmarks = await folderBookmarkList.get();// Query bookmarks
const firstPage = await client.feeds.queryBookmarks({
  filter: {
    user_id: "<user id>",
  },
  limit: 2,
});
// Get next page
const secondPage = await client.feeds.queryBookmarks({
  filter: {
    user_id: "<user id>",
  },
  limit: 2,
  next: firstPage.next,
});
// Query by activity ID
const response = await client.feeds.queryBookmarks({
  filter: {
    user_id: "<user id>",
    activity_id: "activity_123",
  },
});
// Query by folder ID
const response = await client.feeds.queryBookmarks({
  filter: {
    user_id: "<user id>",
    folder_id: "folder_456",
  },
});// Query bookmarks
firstPage, err := client.Feeds().QueryBookmarks(context.Background(), &getstream.QueryBookmarksRequest{
  Filter: map[string]any{
    "user_id": "john",
  },
  Limit: getstream.PtrTo(2),
})
if err != nil {
  log.Fatal("Error querying bookmarks:", err)
}
// Get next page
_, err = client.Feeds().QueryBookmarks(context.Background(), &getstream.QueryBookmarksRequest{
  Filter: map[string]any{
    "user_id": "john",
  },
  Limit: getstream.PtrTo(2),
  Next:  firstPage.Data.Next,
})
if err != nil {
  log.Fatal("Error querying next page bookmarks:", err)
}
// Query by activity ID
_, err = client.Feeds().QueryBookmarks(context.Background(), &getstream.QueryBookmarksRequest{
  Filter: map[string]any{
    "user_id":     "john",
    "activity_id": activityID,
  },
})
if err != nil {
  log.Fatal("Error querying bookmarks by activity ID:", err)
}
// Query by folder ID
_, err = client.Feeds().QueryBookmarks(context.Background(), &getstream.QueryBookmarksRequest{
  Filter: map[string]any{
    "user_id":   "john",
    "folder_id": folderID,
  },
})
if err != nil {
  log.Fatal("Error querying bookmarks by folder ID:", err)
}Map<String, Object> filter = new HashMap<>();
filter.put("user_id", testUserId);
QueryBookmarksRequest request =
    QueryBookmarksRequest.builder().limit(10).filter(filter).build();
QueryBookmarksResponse response = feeds.queryBookmarks(request).execute().getData();// Query bookmarks
$firstPage = $feedsClient->queryBookmarks(
    new GeneratedModels\QueryBookmarksRequest(
        limit: 2,
        filter: (object)['user_id' => 'user_123']
    )
);
// Get next page
$secondPage = $feedsClient->queryBookmarks(
    new GeneratedModels\QueryBookmarksRequest(
        limit: 2,
        next: $firstPage->getData()->next,
        filter: (object)['user_id' => 'user_123']
    )
);
// Query by activity ID
$response = $feedsClient->queryBookmarks(
    new GeneratedModels\QueryBookmarksRequest(
        filter: (object)[
            'user_id' => 'user_123',
            'activity_id' => 'activity_123'
        ]
    )
);
// Query by folder ID
$response = $feedsClient->queryBookmarks(
    new GeneratedModels\QueryBookmarksRequest(
        filter: (object)[
            'user_id' => 'user_123',
            'folder_id' => 'folder_456'
        ]
    )
);var response = await _feedsV3Client.QueryBookmarksAsync(
    new QueryBookmarksRequest
    {
        Limit = 10,
        Filter = new Dictionary<string, object> { ["user_id"] = _testUserId }
    }
);response = self.client.feeds.query_bookmarks(
    limit=10, filter={"user_id": self.test_user_id}
)# Query bookmarks
query_request = GetStream::Generated::Models::QueryBookmarksRequest.new(
  limit: 10,
  filter: {
    user_id: 'user123'
  }
)
response = client.feeds.query_bookmarks(query_request)
# Query by activity ID
activity_query_request = GetStream::Generated::Models::QueryBookmarksRequest.new(
  filter: {
    user_id: 'user123',
    activity_id: 'activity_123'
  }
)
response = client.feeds.query_bookmarks(activity_query_request)
# Query by folder ID
folder_query_request = GetStream::Generated::Models::QueryBookmarksRequest.new(
  filter: {
    user_id: 'user123',
    folder_id: 'folder_456'
  }
)
response = client.feeds.query_bookmarks(folder_query_request)Bookmarks Queryable Built-In Fields
| name | type | description | supported operations | example | 
|---|---|---|---|---|
user_id | string or list of strings | The ID of the user who owns the bookmark | $in, $eq | { user_id: { $eq: 'user_123' } } | 
activity_id | string or list of strings | The ID of the activity that was bookmarked | $in, $eq | { activity_id: { $eq: 'activity_123' } } | 
folder_id | string or list of strings | The ID of the folder containing the bookmark | $eq, $in, $exists | { folder_id: { $exists: true } } | 
created_at | string, must be formatted as an RFC3339 timestamp | The time the bookmark was created | $eq, $gt, $gte, $lt, $lte | { created_at: { $gte: '2023-12-04T09:30:20.45Z' } } | 
updated_at | string, must be formatted as an RFC3339 timestamp | The time the bookmark was last updated | $eq, $gt, $gte, $lt, $lte | { updated_at: { $gte: '2023-12-04T09:30:20.45Z' } } | 
Querying Bookmark Folders
// Query bookmark folders
let query = BookmarkFoldersQuery(limit: 5)
let bookmarkFolderList = client.bookmarkFolderList(for: query)
let page1 = try await bookmarkFolderList.get()
// Get next page
let page2 = try await bookmarkFolderList.queryMoreBookmarkFolders(limit: 3)
// Query by folder name (partial matching)
let projectFolderList = client.bookmarkFolderList(
    for: .init(
        filter: .contains(.folderName, "project")
    )
)
let projectFolders = try await projectFolderList.get()// Query bookmark folders
val query = BookmarkFoldersQuery(limit = 5)
val bookmarkFolderList = client.bookmarkFolderList(query = query)
val page1: Result<List<BookmarkFolderData>> = bookmarkFolderList.get()
// Get next page
val page2: Result<List<BookmarkFolderData>> = bookmarkFolderList.queryMoreBookmarkFolders(limit = 3)
// Query by folder name (partial matching)
val projectFolderList = client.bookmarkFolderList(
    query = BookmarkFoldersQuery(
        filter = BookmarkFoldersFilterField.folderName.contains("project")
    )
)
val projectFolders: Result<List<BookmarkFolderData>> = projectFolderList.get()// Query bookmark folders
const firstPage = await client.queryBookmarkFolders({
  limit: 2,
});
// Get next page
const secondPage = await client.queryBookmarkFolders({
  limit: 2,
  next: firstPage.next,
});
const response = await client.queryBookmarkFolders({
  filter: {
    folder_name: {
      $contains: "project",
    },
  },
  limit: 2,
  next: firstPage.next,
});// Query bookmark folders
const query = BookmarkFoldersQuery(limit: 5);
final bookmarkFolderList = client.bookmarkFolderList(query);
final page1 = await bookmarkFolderList.get();
// Get next page
final page2 = await bookmarkFolderList.queryMoreBookmarkFolders(limit: 3);
// Query by folder name (partial matching)
final projectFolderList = client.bookmarkFolderList(
  const BookmarkFoldersQuery(
    filter: Filter.contains(BookmarkFoldersFilterField.name, 'project'),
  ),
);
final projectFolders = await projectFolderList.get();// Query bookmark folders
const firstPage = await client.feeds.queryBookmarkFolders({
    filter: {
        user_id: '<user id>'
    },
    limit: 2
});
// Get next page
const secondPage = await client.feeds.queryBookmarkFolders({
    filter: {
        user_id: '<user id>'
    }
    limit: 2,
    next: firstPage.next,
});
const response  = await client.feeds.queryBookmarkFolders({
    filter: {
        user_id: '<user id>',
        folder_name: {
            $contains: 'project'
        }
    },
    limit: 2,
    next: firstPage.next,
});// Query bookmark folders
firstPage, err := client.Feeds().QueryBookmarkFolders(context.Background(), &getstream.QueryBookmarkFoldersRequest{
  Filter: map[string]any{
    "user_id": "<user id>",
  },
  Limit: getstream.PtrTo(2),
})
if err != nil {
  log.Fatal("Error querying bookmark folders:", err)
}
// Get next page
_, err = client.Feeds().QueryBookmarkFolders(context.Background(), &getstream.QueryBookmarkFoldersRequest{
  Filter: map[string]any{
    "user_id": "<user id>",
  },
  Limit: getstream.PtrTo(2),
  Next:  firstPage.Data.Next,
})
if err != nil {
  log.Fatal("Error querying bookmark folders second page:", err)
}
// Query with folder name filter
_, err = client.Feeds().QueryBookmarkFolders(context.Background(), &getstream.QueryBookmarkFoldersRequest{
  Filter: map[string]any{
    "user_id": "<user id>",
    "folder_name": map[string]any{
      "$contains": "project",
    },
  },
  Limit: getstream.PtrTo(2),
  Next:  firstPage.Data.Next,
})
if err != nil {
  log.Fatal("Error querying bookmark folders with filter:", err)
}Map<String, Object> filter = new HashMap<>();
filter.put("user_id", testUserId);
QueryBookmarksRequest request =
    QueryBookmarksRequest.builder().limit(10).filter(filter).build();
QueryBookmarksResponse response = feeds.queryBookmarks(request).execute().getData();// Query bookmark folders
$firstPage = $feedsClient->queryBookmarkFolders(
    new GeneratedModels\QueryBookmarkFoldersRequest(
        limit: 2,
        filter: (object)['user_id' => 'user_123']
    )
);
// Get next page
$secondPage = $feedsClient->queryBookmarkFolders(
    new GeneratedModels\QueryBookmarkFoldersRequest(
        limit: 2,
        next: $firstPage->getData()->next,
        filter: (object)['user_id' => 'user_123']
    )
);
// Query by folder name (partial matching)
$response = $feedsClient->queryBookmarkFolders(
    new GeneratedModels\QueryBookmarkFoldersRequest(
        filter: (object)[
            'user_id' => 'user_123',
            'folder_name' => [
                '$contains' => 'project'
            ]
        ],
        limit: 2
    )
);var response = await _feedsV3Client.QueryBookmarksAsync(
    new QueryBookmarksRequest
    {
        Limit = 10,
        Filter = new Dictionary<string, object> { ["user_id"] = _testUserId }
    }
);response = self.client.feeds.query_bookmarks(
    limit=10, filter={"user_id": self.test_user_id}
)# Query bookmarks
query_request = GetStream::Generated::Models::QueryBookmarksRequest.new(
  limit: 10,
  filter: {
    user_id: 'user123'
  }
)
response = client.feeds.query_bookmarks(query_request)
# Query by activity ID
activity_query_request = GetStream::Generated::Models::QueryBookmarksRequest.new(
  filter: {
    user_id: 'user123',
    activity_id: 'activity_123'
  }
)
response = client.feeds.query_bookmarks(activity_query_request)
# Query by folder ID
folder_query_request = GetStream::Generated::Models::QueryBookmarksRequest.new(
  filter: {
    user_id: 'user123',
    folder_id: 'folder_456'
  }
)
response = client.feeds.query_bookmarks(folder_query_request)Bookmark Folders Queryable Built-In Fields
| name | type | description | supported operations | example | 
|---|---|---|---|---|
user_id | string or list of strings | The ID of the user who owns the folder | $in, $eq | { user_id: { $eq: 'user_123' } } | 
folder_name | string or list of strings | The name of the bookmark folder | $eq, $in, $contains | { folder_name: { $contains: 'work' } } | 
created_at | string, must be formatted as an RFC3339 timestamp | The time the folder was created | $eq, $gt, $gte, $lt, $lte | { created_at: { $gte: '2023-12-04T09:30:20.45Z' } } | 
updated_at | string, must be formatted as an RFC3339 timestamp | The time the folder was last updated | $eq, $gt, $gte, $lt, $lte | { updated_at: { $gte: '2023-12-04T09:30:20.45Z' } } |