Skip to main content
Saving bookmarks a message for the logged-in user. Unlike a pin, a save is private and cross-conversation: nobody else can see it, no role is required, and the saved list spans every conversation the user is part of.
savedAt is per-viewer. It is only ever populated in the acting user’s own context — you will never see another user’s saves on a message.

Save a Message

Call saveMessage() with the message’s ID. It resolves with the full updated message, with savedAt set.
Saving is idempotent — saving an already saved message succeeds rather than failing.

Unsave a Message

The resolved message comes back with savedAt cleared, never left stale.

Fetch Saved Messages

Build a MessagesRequest with setSaved(true). The saved list is user-level, so unlike the pinned list you do not set a UID or a GUID — leaving both unset is what makes it cross-conversation.
The list comes back newest message first. Call fetchPrevious() again on the same object to page through older entries. Because the list spans conversations, every row carries its own context — use getConversationId(), getReceiverId() and getReceiverType() to route a tap on a saved message back to the right conversation.

Check if a Message is Saved

The presence of savedAt is the boolean — an unsaved message simply has no save attribute.

Real-time Save Events

Save and unsave are private multi-device events: they are delivered to the user’s other logged-in sessions so a save on the phone shows up on the desktop. Add the callbacks to your existing MessageListener.
These callbacks fire for saves made on your other devices, not the one that performed the save — that device already has the message resolved from saveMessage(). Update your saved list from the promise there, and from these callbacks everywhere else.

Save Limit

A user may save a capped number of messages across all conversations. Read the cap from app settings rather than hard-coding it.
It resolves to null when the app settings carry no value — show generic copy in that case rather than guessing a number.

Feature Availability

This resolves false rather than rejecting when the flag is missing or settings are unavailable.

Next Steps

Pin A Message

Highlight a message for everyone in a conversation

Pin A Conversation

Pin a conversation to the top of the list

Retrieve Conversations

Fetch and order the conversation list

Additional Message Filtering

Filter messages by saved, pinned, type, tags and more