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

AddBookmarkRequest bookmarkRequest =
    AddBookmarkRequest.builder()
        .userID(testUserId)
        .newFolder(AddFolderRequest.builder().name("test-bookmarks1").build())
        .build();

AddBookmarkResponse response =
    feeds.addBookmark(activityId, bookmarkRequest).execute().getData();

Removing Bookmarks

UpdateBookmarkRequest updateRequest =
    UpdateBookmarkRequest.builder().folderID(folderID).userID(testUserId).build();

UpdateBookmarkResponse response =
    feeds.updateBookmark(activityId, updateRequest).execute().getData();

Querying Bookmarks

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();

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

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();

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
AddBookmarkResponse addResponse = feeds.addBookmark(activityId,
    AddBookmarkRequest.builder()
        .userID(testUserId)
        .newFolder(AddFolderRequest.builder()
            .name("Breakfast recipes")
            .custom(Map.of("icon", "🍳"))
            .build())
        .build()).execute().getData();

String folderId = addResponse.getBookmark().getFolder().getId();

// Update the folder
UpdateBookmarkFolderResponse updateResponse = feeds.updateBookmarkFolder(folderId,
    UpdateBookmarkFolderRequest.builder()
        .name("Sweet Breakfast Recipes")
        .custom(Map.of("icon", "🥞"))
        .build()).execute().getData();

// Delete the folder (and all bookmarks in it)
feeds.deleteBookmarkFolder(updateResponse.getBookmarkFolder().getId()).execute();
Add Chat to my app: getstream.io/SKILL.md

The fastest way to build with Stream. Start a new project or improve an existing one. Full CLI and documentation integration out of the box.


Ask your agent:

/stream Build me a Social App with Feeds and Moderation.
/stream Any livestream calls running?
/stream Feeds Java v3: <Your Question>