Add emoji reactions to messages and build threaded reply conversations inside any channel.
SDK v7.x · Last verified March 2026 · iOS · Android · Web · Flutter
Speed run — just the code
// React to a messageawait ReactionRepository.addReaction({ referenceType: 'message', referenceId: messageId, reactionName: '👍',});// Reply to a message (parentId creates a thread)await MessageRepository.createMessage({ subChannelId: channelId, parentId: parentMessageId, // ← this is what makes it a reply data: { text: 'Great point!' }, dataType: 'text',});// Query replies for a messageconst replies = MessageRepository.getMessages({ subChannelId: channelId, parentId: parentMessageId,});
Full walkthrough below ↓
Platform note — code samples below use TypeScript. Every method has an equivalent in the iOS (Swift), Android (Kotlin), and Flutter (Dart) SDKs — see the linked SDK reference in each step.
Reactions turn passive reading into participation. Threaded replies keep side conversations organized without cluttering the main feed. Together they’re the core engagement layer of any chat experience.
Prerequisites: Messages are being sent and received → Sending Messages
Users can report messages that have received reactions containing offensive content. Reports appear in Admin Console → Content Moderation → Flagged Items.
Webhook: reaction events
reaction.added and reaction.removed webhook events let you track engagement patterns or sync reaction data to your analytics pipeline.→ Webhook Events
Duplicating reactions — A user can add the same reactionName only once per message. Calling addReaction a second time with the same name is a no-op (not an error). Track local state to style the “active” reaction button correctly.
Querying root messages with parentId set — When querying the main channel feed, always set parentId: null (or omit it). Otherwise you’ll get only replies and miss all top-level messages.
Curate a small emoji picker (6–8 options) rather than exposing the full Unicode emoji keyboard. This speeds up rendering and keeps reaction data cleaner. Store allowed reactions in your app’s config or in the channel’s metadata.
Show reply count before expanding
Use the replyCount field on the parent message to render a “View 3 replies” button. Only query the thread on demand — lazy loading keeps the initial message feed fast.
Nest replies only one level deep
social.plus supports single-level threading (replies to a message). Deeply nested threads hurt UX on mobile. Flatten all replies to one level even if your users try to reply-to-a-reply.
Dive deeper: Messaging API Reference has full parameter tables, method signatures, and platform-specific details for every API used in this guide.