// 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"
)
)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
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
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
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 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' } } |
Managing Bookmark Folders
Update bookmark folder
The endpoint performs a partial update: only the fields you include in the request are changed, and each of those fields is completely overwritten.
Updating a bookmark folder sends feeds.bookmark_folder.updated event to the clients of the user who owns the folder. There are no default client-side SDK handlers for this event, but you can add a custom handler if your UI needs to be updated.
Delete bookmark folder
Use the delete bookmark folder endpoint to remove a folder by ID. All bookmarks in that folder are removed.
Deleting a bookmark folder sends feeds.bookmark_folder.deleted event to the clients of the user who owns the folder. There are no default client-side SDK handlers for this event, but you can add a custom handler if your UI needs to be updated.
# Add a bookmark with a new folder
add_response = client.feeds.add_bookmark(
activity_id,
GetStream::Generated::Models::AddBookmarkRequest.new(
user_id: 'user123',
new_folder: GetStream::Generated::Models::AddFolderRequest.new(
name: 'Breakfast recipes',
custom: { icon: '🍳' }
)
)
)
folder_id = add_response.bookmark.folder.id
# Update the folder
update_response = client.feeds.update_bookmark_folder(
folder_id,
GetStream::Generated::Models::UpdateBookmarkFolderRequest.new(
name: 'Sweet Breakfast Recipes',
custom: { icon: '🥞' }
)
)
# Delete the folder (and all bookmarks in it)
client.feeds.delete_bookmark_folder(update_response.bookmark_folder.id)