Skip to content
Warning:
You are viewing the Feeds v2 documentation. Feeds v2 is in maintenance mode and no longer receives new features. New projects should use Feeds v3, a major upgrade in performance, capabilities, and developer experience. To move an existing app, follow the migration guide.

Reactions

Adding Reactions

Reactions are a special kind of data that can be used to capture user interaction with specific activities. Common examples of reactions are likes , comments , and upvotes . Reactions are automatically returned to feeds' activities at read time when the reactions parameters are used.

Reactions are always related to activities; in order to add a reaction to an activity you need to provide its ID.

Parameters

name type description default optional
kind string The type of reaction (eg. like, comment, ...) -
activity_id string The ID of the activity the reaction refers to -
data object Additional data to attach to the reaction -
target_feeds array The feeds that should receive a notification activity -
target_feeds_extra_data object Additional data to attach to the notification activities -
user_id string Id of the user adding the reaction if not own user. Required for server side. -
// add a like reaction to the activity with id activityID
	r := stream.AddReactionRequestObject{
		Kind:    "like",
		ActivityID: activityID,
	}
	like, err := client.Reactions().Add(context.TODO(), r)
	if err != nil {
		panic(err)
	}

	// adds a comment reaction to the activity with id activityId
	r = stream.AddReactionRequestObject{
		Kind:    "comment",
		ActivityID: activityID,
		UserID:   "bob",
	}
	comment, err := client.Reactions().Add(context.TODO(), r)
	if err != nil {
		panic(err)
	}

Here's a complete example:

// first let's read current user's timeline feed and pick one activity
	feed, err := client.FlatFeed("timeline", "bob")
	if err != nil {
		panic(err)
	}

	resp, err := feed.GetActivities(context.TODO())
	if err != nil {
		panic(err)
	}
	activity := resp.Results[0]

	// then let's add a like reaction to that activity
	r := stream.AddReactionRequestObject{
		Kind:    "like",
		ActivityID: activity.ID,
		UserID:   "bob",
	}
	_, err := client.Reactions().Add(context.TODO(), r)
	if err != nil {
		panic(err)
	}
Info:

The size of a reaction can not exceed 10kB

Retrieving Reactions

You can read reactions and filter them based on their user_id or activity_id values. Further filtering can be done with the kind parameter (e.g. retrieve all likes by one user, retrieve all comments for one activity, etc.).

Reactions are returned in descending order (newest to oldest) by default and when using id_lt[e] , and in ascending order (oldest to newest) when using id_gt[e] .

Parameters

name type description default optional
activity_id string Retrieve reactions by activity_id -
user_id string Retrieve reactions by user_id -
reaction_id string Retrieve children reaction by reaction_id -
kind string If provided it will only retrieve reactions of a certain kind (e.g. "like") -
limit integer The number of reactions to retrieve (Max. 25) 10
id_gte string Retrieve reactions created after the one with ID equal to the parameter (inclusive) -
id_gt string Retrieve reactions created after the one with ID equal to the parameter. -
id_lte string Retrieve reactions created before the one with ID equal to the parameter (inclusive) -
id_lt string Retrieve reactions before the one with ID equal to the parameter -
with_activity_data boolean Returns activity data when paginating using activity_id -
with_own_children boolean Enable returning the children reactions when filtering reactions by parent ID -
Info:

If you want to filter reactions by activity_id or reaction_id and user_id you need to use the parameter filter_user_id instead of the user_id parameter described above.

// retrieve all kind of reactions for an activity
	resp, err := client.Reactions().Filter(context.TODO(), stream.ByActivityID("ed2837a6-0a3b-4679-adc1-778a1704852d"))
	if err != nil {
		panic(err)
	}

	// retrieve first 10 likes for an activity
	resp, err := client.Reactions().Filter(
		context.TODO(),
		stream.ByActivityID("ed2837a6-0a3b-4679-adc1-778a1704852d").ByKind("like"),
		stream.WithLimit(10),
	)
	if err != nil {
		panic(err)
	}

	// retrieve the next 10 likes using the id_lt param
	filterAttribute := stream.ByActivityID("ed2837a6-0a3b-4679-adc1-778a1704852d").ByKind("like")
	pagination := stream.WithIDLT("e561de8f-00f1-11e4-b400-0cc47a024be0")
	resp, err := client.Reactions().Filter(context.TODO(), filterAttribute, pagination)
	if err != nil {
		panic(err)
	}

Retrieving Reactions by ID

resp, err := client.Reactions().Get(context.TODO(), id)
if err != nil {
  panic(err)
}

Updating Reactions

Reactions can be updated by providing reaction ID parameter. Changes to reactions are propagated to all notified feeds; if the target_feeds list is updated, notifications will be added and removed accordingly.

Parameters

name type description default optional
reaction_id string The ID of the reaction -
data object Reaction data -
target_feeds string The list of feeds that should receive a copy of the reaction. -
resp, err := client.Reactions().Update(context.TODO(), reactionID, map[string]any{"text": "love it!"}, nil)
	if err != nil {
		panic(err)
	}

Removing Reactions

Reactions are easy to remove. Simply pass in their ID, like so:

_, err := client.Reactions().Delete(context.TODO(), reactionID)
	if err != nil {
		panic(err)
	}

Soft delete and restore

Info:

This feature is currently supported only selected SDKs. If you need support for other SDKs, please contact support.

Reactions can be soft deleted and restored by ID:

JavaScript
client.reactions.delete(reactionId, true);
client.reactions.restore(reactionId);