Build a notification inbox with seen/unseen state, real-time delivery, push notification setup, and granular event-based triggers.
SDK v7.x · Last verified March 2026 · iOS · Android · Web · Flutter
Speed run — just the code
TypeScript SDK gap: Client.registerPushNotification is not available in the TypeScript SDK. iOS and Android use native push token registration. In TS/Web, configure push notifications via your web push service (e.g., Firebase Messaging). Tracking: see .docs-ops/evals/sdk-tickets-to-file.md.
// 1. Get notification tray itemsconst { data } = await notificationTray.getNotificationTrayItems({ limit: 20 });// 2. Mark a notification as seenawait notificationTray.markTraySeen('notificationId');// 3. Register push token// Push token registration not in TS SDK (see Warning above)// Configure push via your web push service (e.g., Firebase Messaging)});// 4. Observe tray status (refreshes after markTraySeen)notificationTray.getNotificationTraySeen(({ data }) => { if (data) showBadge(!data.isSeen);});
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.
Notifications are your primary re-engagement tool. This guide covers building an in-app notification tray with seen/unseen tracking, setting up push notifications across all platforms, and subscribing to real-time social events.
Prerequisites: SDK installed and authenticated. For push notifications: APNs certificate (iOS) or FCM credentials (Android) configured in Admin Console → Settings → Integrations.Also recommended: Complete Build a Social Feed and Community Platform first — notifications are triggered by feed and community events.
After completing this guide you’ll have:
An in-app notification tray with seen/unseen state and real-time delivery
Push notifications (APNs and FCM) registered and firing for key events
Notification triggers mapped to SDK events and webhook callbacks
Quick Start: Query Notification Tray
TypeScript
import { notificationTray } from '@amityco/ts-sdk';const unsubscribe = notificationTray.getNotificationTrayItems( { limit: 20 }, ({ data: items, onNextPage, hasNextPage, loading, error }) => { if (loading) return; if (error) { handleError(error); return; } renderResults(items); if (hasNextPage) { onNextPage?.(); } },);unsubscribe();
Part 1: In-App Notification Tray
1
Get unseen notification status
Use the tray status to show an unseen indicator on your notification icon. The tray status has no count: isSeen is false when there is tray activity newer than the last time the tray was marked as seen. It refreshes when you call markTraySeen.
When the user opens the tray, mark all unseen items as seen. Or mark individual items as seen on tap. Both bulk and per-item marking are supported.
import { notificationTray } from '@amityco/ts-sdk';// Mark all as seenawait notificationTray.markTraySeen();// Or mark a single itemawait item.markSeen();
Each notification item contains targetType and targetId fields you can use to deep-link to the source content (post, comment, user, or community).Reference all notification types → Notification Events Reference
Part 2: Push Notifications
1
Configure push credentials in Admin Console
Before registering devices, add your push credentials in Admin Console → Settings → Push Notifications:
After the user logs in, retrieve the device token and register it with the SDK. This associates the device with the authenticated user so the backend can route pushes correctly.
import { Client } from '@amityco/ts-sdk';// Register a device token (web push or React Native FCM token)await client.registerPushNotification({ token: deviceToken });
Let users control what they’re notified about at a granular level. Settings are organised by module (SOCIAL, CHAT, LIVE_STREAM) and apply across all of the user’s devices.
1
Get current notification settings
Read the user’s current preferences to populate a settings screen.
import { UserRepository } from '@amityco/ts-sdk';// Notification settings API: see push-notification docs for v6 SDK approachconsole.log('Notifications enabled:', settings.isEnabled);settings.modules.forEach(m => console.log(m.moduleType, m.isEnabled));
2
Update notification module settings
Enable or disable individual modules, or turn off all notifications at once.
import { UserRepository } from '@amityco/ts-sdk';// Disable social, keep chat enabled// Notification settings update: see push-notification docs for v6 SDK approach// await legacySettingsUpdate({ modules: [ { moduleType: 'social', isEnabled: false }, { moduleType: 'chat', isEnabled: true }, ],});// Or disable all notifications at once// Notification settings update: see push-notification docs for v6 SDK approach// await legacySettingsUpdate({ isEnabled: false });
For finer control, users can configure which notification types they receive per community (new post, new comment, mentions). This is separate from the global user setting above.Full reference → Community Notification Settings
Connect to Moderation & Analytics
Admin Console — Push notification settings for community and chat events
Webhook: trigger notifications for moderation actions
When a moderator removes content, use webhook events (post.deleted, user.banned) to send a custom in-app or push notification explaining the action to the affected user.→ Webhook Events
Notification analytics
Track notification open rates and click-through rates in Admin Console → Analytics Dashboard → Engagement Metrics to understand which notification types drive the most re-engagement.
Common Mistakes
Polling for notifications on a timer — This drains battery and creates unnecessary API calls. Observe the tray status instead:
// ❌ Bad — polling every 5 secondssetInterval(() => fetchNotifications(), 5000);// ✅ Good: observe the tray statusnotificationTray.getNotificationTraySeen(({ data }) => { if (data) updateBadge(!data.isSeen);});
Not handling push permission rejection — On iOS, users can deny push permissions. Always check the permission status and provide an in-app fallback (notification tray) when push is disabled.
Registering push tokens before login — Push token registration requires an active session. Always call registerPushNotification after login() completes, not in parallel.
Best Practices
Notification tray UX
Group related notifications (e.g., “5 reactions on your post”) instead of showing individual items
Show a relative timestamp (“2 min ago”) that updates while the tray is open
Mark all as seen when the tray is closed, not opened — allows the user to scan without losing unseen state
Include a thumbnail of the content the notification relates to
Push notification best practices
Keep push payloads minimal — fetch full content on tap, not in the payload
Include userId in the notification payload to support multi-account scenarios
Group pushes by thread on iOS using threadIdentifier
Respect iOS Critical Alert restrictions — social notifications should never be critical
Avoiding notification fatigue
Default to email digest for low-activity users rather than per-event push
Provide granular opt-out: users should be able to mute a specific community without turning off all notifications
Rate-limit push if a post gets hundreds of reactions — send “50+ reactions on your post” not one push per reaction
Dive deeper: Discovery & Engagement API Reference has full parameter tables, method signatures, and platform-specific details for every API used in this guide.
Next Steps
Your next step → Content Moderation Pipeline
Notifications are flowing — now ensure content quality with flagging, AI moderation, and admin review.
Or explore related guides:
User Profiles & Social Graph
Follow activity that drives notification events
Comments & Reactions
Engagement events that trigger notification items
Content Moderation Pipeline
Use webhooks to notify users of moderation actions
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"social.plus","description":"social.plus is a feature-rich SDK for building chat, communities, feeds, live video, and social experiences. Comprehensive documentation for the SDK, UIKit, and platform APIs.","colors":{"primary":"#3b41ec","light":"#6366f1","dark":"#3b41ec"},"logo":{"light":"https://mintcdn.com/social-b97141fb/QwADtWlE1NPB5yTT/logo/light.svg?fit=max\u0026auto=format\u0026n=QwADtWlE1NPB5yTT\u0026q=85\u0026s=cc4a2414bd3c7e1fd07689198dd00f93","dark":"https://mintcdn.com/social-b97141fb/QwADtWlE1NPB5yTT/logo/dark.svg?fit=max\u0026auto=format\u0026n=QwADtWlE1NPB5yTT\u0026q=85\u0026s=ee2191102e694711a35061e3be10cc29"},"favicon":"https://mintcdn.com/social-b97141fb/_wo9-ScL4FIZ2Zcx/favicon.svg?fit=max\u0026auto=format\u0026n=_wo9-ScL4FIZ2Zcx\u0026q=85\u0026s=2c5951c6234b03d492a6f81ea013e767","navbar":{"primary":{"type":"button","label":"Talk to Sales","href":"https://www.social.plus/contact/contact-sales"}},"footer":{"socials":{"github":"https://github.com/Amityco","linkedin":"https://www.linkedin.com/company/socialpluscorp"}},"integrations":{"ga4":{"measurementId":"G-SVLMXB68RR"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"social-b97141fb","hasAudioNarration":false,"actualSubdomain":"social-b97141fb","customDomains":["learn.social.plus"],"gitSource":{"type":"github","owner":"amityco","repo":"social-plus-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af3fda893e0aa0dd04437e9","clientVersion":"0.0.4142","searchFilterCounts":[{"language":"default","tag":"API","count":593},{"language":"default","tag":"SDK","count":187},{"language":"default","tag":"Webhook event","count":101},{"language":"default","tag":"Realtime event","count":94},{"language":"default","tag":"Social","count":83},{"language":"default","tag":"Analytics \u0026 Moderation","count":58},{"language":"default","tag":"Content Management","count":44},{"language":"default","tag":"UIKit","count":41},{"language":"default","tag":"Chat","count":40},{"language":"default","tag":"Fundamentals","count":40}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"/* latin-ext */\n@font-face {\n font-family: 'Figtree';\n font-style: italic;\n font-weight: 300;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/figtree/v9/_Xmu-HUzqDCFdgfMm4GNAa5o_ik.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Figtree';\n font-style: italic;\n font-weight: 300;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/figtree/v9/_Xmu-HUzqDCFdgfMm4GND65o.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Figtree';\n font-style: italic;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/figtree/v9/_Xmu-HUzqDCFdgfMm4GNAa5o_ik.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Figtree';\n font-style: italic;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/figtree/v9/_Xmu-HUzqDCFdgfMm4GND65o.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Figtree';\n font-style: italic;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/figtree/v9/_Xmu-HUzqDCFdgfMm4GNAa5o_ik.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Figtree';\n font-style: italic;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/figtree/v9/_Xmu-HUzqDCFdgfMm4GND65o.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Figtree';\n font-style: italic;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/figtree/v9/_Xmu-HUzqDCFdgfMm4GNAa5o_ik.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Figtree';\n font-style: italic;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/figtree/v9/_Xmu-HUzqDCFdgfMm4GND65o.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Figtree';\n font-style: italic;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/figtree/v9/_Xmu-HUzqDCFdgfMm4GNAa5o_ik.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Figtree';\n font-style: italic;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/figtree/v9/_Xmu-HUzqDCFdgfMm4GND65o.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Figtree';\n font-style: italic;\n font-weight: 800;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/figtree/v9/_Xmu-HUzqDCFdgfMm4GNAa5o_ik.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Figtree';\n font-style: italic;\n font-weight: 800;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/figtree/v9/_Xmu-HUzqDCFdgfMm4GND65o.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Figtree';\n font-style: italic;\n font-weight: 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/figtree/v9/_Xmu-HUzqDCFdgfMm4GNAa5o_ik.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Figtree';\n font-style: italic;\n font-weight: 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/figtree/v9/_Xmu-HUzqDCFdgfMm4GND65o.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Figtree';\n font-style: normal;\n font-weight: 300;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/figtree/v9/_Xms-HUzqDCFdgfMm4q9DbZs.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Figtree';\n font-style: normal;\n font-weight: 300;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/figtree/v9/_Xms-HUzqDCFdgfMm4S9DQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Figtree';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/figtree/v9/_Xms-HUzqDCFdgfMm4q9DbZs.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Figtree';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/figtree/v9/_Xms-HUzqDCFdgfMm4S9DQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Figtree';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/figtree/v9/_Xms-HUzqDCFdgfMm4q9DbZs.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Figtree';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/figtree/v9/_Xms-HUzqDCFdgfMm4S9DQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Figtree';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/figtree/v9/_Xms-HUzqDCFdgfMm4q9DbZs.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Figtree';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/figtree/v9/_Xms-HUzqDCFdgfMm4S9DQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Figtree';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/figtree/v9/_Xms-HUzqDCFdgfMm4q9DbZs.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Figtree';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/figtree/v9/_Xms-HUzqDCFdgfMm4S9DQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Figtree';\n font-style: normal;\n font-weight: 800;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/figtree/v9/_Xms-HUzqDCFdgfMm4q9DbZs.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Figtree';\n font-style: normal;\n font-weight: 800;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/figtree/v9/_Xms-HUzqDCFdgfMm4S9DQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Figtree';\n font-style: normal;\n font-weight: 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/figtree/v9/_Xms-HUzqDCFdgfMm4q9DbZs.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Figtree';\n font-style: normal;\n font-weight: 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/figtree/v9/_Xms-HUzqDCFdgfMm4S9DQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n:root{--hero-bg-primary: #ffffff;--hero-bg-secondary: rgba(59, 65, 236, 0.05);--hero-bg-gradient: radial-gradient(50% 50% at 50% 50%, rgba(59, 65, 236, 0.08) 39.4%, rgba(255, 255, 255, 0) 100%);--hero-text-primary: #1a1a2e;--hero-text-secondary: rgba(60, 60, 70, 0.8);--hero-line-color: rgba(0, 0, 0, 0.08);--hero-line-accent: rgba(0, 0, 0, 0.06);--search-bg: rgba(255, 255, 255, 0.8);--search-border: rgba(160, 160, 165, 0.3);--search-text: #1a1a2e;--search-placeholder: rgba(0, 0, 0, 0.6);--search-hover-bg: rgba(59, 65, 236, 0.1);--search-hover-border: rgba(59, 65, 236, 0.3);--card-bg: rgba(255, 255, 255, 0.8);--card-border: rgba(160, 160, 165, 0.3);--card-hover-bg: rgba(255, 255, 255, 0.95);--card-text: #1a1a2e;--card-text-secondary: rgba(60, 60, 70, 0.8)}.announcement-banner{position:relative;width:100%;box-sizing:border-box;margin:0 0 1rem 0;padding:0.65rem 1rem;background:linear-gradient(90deg, rgba(59,65,236,0.12), rgba(99,102,241,0.12));font-size:0.875rem;display:flex;justify-content:center;align-items:center;gap:.5rem;backdrop-filter:blur(6px);z-index:1}.announcement-banner .announcement-lead{font-weight:700;color:#1a1a2e}.announcement-banner .announcement-rest{color:#1f2230}.announcement-banner .announcement-link{color:#1a1a2e;text-decoration:underline;text-underline-offset:2px;font-weight:600}.announcement-banner .announcement-link:hover{text-decoration-thickness:2px}.announcement-banner .announcement-text{text-align:center}.announcement-banner a:hover{text-decoration:none}[data-theme=\"dark\"] .announcement-banner,html[data-theme=\"dark\"] .announcement-banner,.dark .announcement-banner,html.dark .announcement-banner{background:linear-gradient(90deg, rgba(59,65,236,0.22), rgba(99,102,241,0.22))}[data-theme=\"dark\"] .announcement-banner .announcement-lead,html[data-theme=\"dark\"] .announcement-banner .announcement-lead,.dark .announcement-banner .announcement-lead,html.dark .announcement-banner .announcement-lead{color:#ffffff}[data-theme=\"dark\"] .announcement-banner .announcement-rest,html[data-theme=\"dark\"] .announcement-banner .announcement-rest,.dark .announcement-banner .announcement-rest,html.dark .announcement-banner .announcement-rest{color:#f2f3ff}[data-theme=\"dark\"] .announcement-banner,html[data-theme=\"dark\"] .announcement-banner,.dark .announcement-banner,html.dark .announcement-banner{background:linear-gradient(90.08deg, #3B41EC 0%, #222586 100%)}[data-theme=\"dark\"] .announcement-banner .announcement-link,html[data-theme=\"dark\"] .announcement-banner .announcement-link,.dark .announcement-banner .announcement-link,html.dark .announcement-banner .announcement-link{color:#ffffff}[data-theme=\"dark\"] .announcement-banner .announcement-link:hover,html[data-theme=\"dark\"] .announcement-banner .announcement-link:hover,.dark .announcement-banner .announcement-link:hover,html.dark .announcement-banner .announcement-link:hover{text-decoration-thickness:2px}[data-theme=\"dark\"],html[data-theme=\"dark\"],.dark,html.dark{--hero-bg-primary: #0a0a0f;--hero-bg-secondary: rgba(10, 10, 15, 0);--hero-bg-gradient: radial-gradient(50% 50% at 50% 50%, rgba(59, 65, 236, 0.1) 39.4%, rgba(10, 10, 15, 0) 100%);--hero-text-primary: #ffffff;--hero-text-secondary: rgba(160, 160, 165, 1);--hero-line-color: rgba(255, 255, 255, 0.08);--hero-line-accent: rgba(255, 255, 255, 0.06);--search-bg: rgba(10, 10, 15, 0.5);--search-border: rgba(160, 160, 165, 0.5);--search-text: #ffffff;--search-placeholder: rgba(255, 255, 255, 0.6);--search-hover-bg: rgba(255, 255, 255, 0.15);--search-hover-border: rgba(255, 255, 255, 0.3);--card-bg: rgba(10, 10, 15, 0.5);--card-border: rgba(160, 160, 165, 0.5);--card-hover-bg: rgba(20, 20, 25, 0.8);--card-text: #ffffff;--card-text-secondary: rgba(160, 160, 165, 1)}html,body,*{font-family:'Figtree', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif!important}[data-theme=\"dark\"],[data-theme=\"light\"],.mintlify-content,.docs-content,.navigation,.sidebar,.content,.main-content{font-family:'Figtree', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif!important}h1,h2,h3,h4,h5,h6{font-family:'Figtree', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif!important;font-weight:600!important}p,span,div,a,li,td,th{font-family:'Figtree', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif!important;font-weight:400!important}.nav-item,.sidebar-item,button,input,select,textarea{font-family:'Figtree', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif!important}pre,code{font-family:'JetBrains Mono', 'Fira Code', 'Consolas', monospace!important}.card,.card *,.accordion,.accordion *,.tab,.tab *{font-family:'Figtree', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif!important}.hero-section{background:var(--hero-bg-gradient);background-color:var(--hero-bg-primary);min-height:60vh;display:flex;align-items:center;justify-content:center;position:relative;overflow:hidden;margin:-2rem -2rem 4rem -2rem;padding:4rem 2rem;transition:background-color 0.3s ease, background 0.3s ease}.hero-section::before{content:'';position:absolute;top:10%;right:-10%;width:40%;height:80%;pointer-events:none;z-index:0;border-left:1px solid var(--hero-line-color);border-top:1px solid var(--hero-line-accent);border-radius:50% 0 0 50%;transform:rotate(-15deg);transition:border-color 0.3s ease}.hero-section::after{content:'';position:absolute;bottom:10%;left:-10%;width:40%;height:80%;pointer-events:none;z-index:0;border-right:1px solid var(--hero-line-color);border-bottom:1px solid var(--hero-line-accent);border-radius:0 50% 50% 0;transform:rotate(-15deg);transition:border-color 0.3s ease}.hero-section .hero-content::before{content:'';position:absolute;top:20%;right:10%;width:30%;height:1px;background:linear-gradient(90deg, transparent, var(--hero-line-color), transparent);transform:rotate(45deg);z-index:0;transition:background 0.3s ease}.hero-section .hero-content::after{content:'';position:absolute;bottom:20%;left:10%;width:30%;height:1px;background:linear-gradient(90deg, transparent, var(--hero-line-color), transparent);transform:rotate(-45deg);z-index:0;transition:background 0.3s ease}.hero-content{text-align:center;z-index:1;position:relative;max-width:64rem;width:100%}.hero-text{margin-top:4rem;margin-bottom:0rem}.hero-title{font-family:'Figtree', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;font-size:3.5rem;font-weight:900;color:var(--hero-text-primary);margin-bottom:1.5rem;line-height:1.1;text-shadow:0 4px 8px rgba(0, 0, 0, 0.3);transition:color 0.3s ease}@media (max-width: 768px){.hero-title{font-size:2.5rem}}.hero-description{font-family:'Figtree', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;font-size:1rem;font-weight:400;color:var(--hero-text-secondary);max-width:42rem;margin:0 auto;line-height:1.6;text-shadow:0 2px 4px rgba(0, 0, 0, 0.2);transition:color 0.3s ease}:root .hero-title,:not([data-theme=\"dark\"]) .hero-title,:not(.dark) .hero-title{text-shadow:0 2px 4px rgba(0, 0, 0, 0.1)}:root .hero-description,:not([data-theme=\"dark\"]) .hero-description,:not(.dark) .hero-description{text-shadow:none}:root .search-icon,:not([data-theme=\"dark\"]) .search-icon,:not(.dark) .search-icon{opacity:0.8}:root .hero-section::before,:root .hero-section::after,:not([data-theme=\"dark\"]) .hero-section::before,:not([data-theme=\"dark\"]) .hero-section::after,:not(.dark) .hero-section::before,:not(.dark) .hero-section::after{opacity:0.6}[data-theme=\"dark\"] .hero-title,html[data-theme=\"dark\"] .hero-title,.dark .hero-title,html.dark .hero-title{text-shadow:0 4px 8px rgba(0, 0, 0, 0.3)}[data-theme=\"dark\"] .hero-description,html[data-theme=\"dark\"] .hero-description,.dark .hero-description,html.dark .hero-description{text-shadow:0 2px 4px rgba(0, 0, 0, 0.2)}*{transition:background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease}:root .cards-section .card:hover h3,:root .cards-section .card:hover h4,:not([data-theme=\"dark\"]) .cards-section .card:hover h3,:not([data-theme=\"dark\"]) .cards-section .card:hover h4,:not(.dark) .cards-section .card:hover h3,:not(.dark) .cards-section .card:hover h4{color:rgba(59, 65, 236, 0.9)!important;text-shadow:none}[data-theme=\"dark\"] .cards-section .card:hover h3,[data-theme=\"dark\"] .cards-section .card:hover h4,html[data-theme=\"dark\"] .cards-section .card:hover h3,html[data-theme=\"dark\"] .cards-section .card:hover h4,.dark .cards-section .card:hover h3,.dark .cards-section .card:hover h4,html.dark .cards-section .card:hover h3,html.dark .cards-section .card:hover h4{color:rgba(99, 102, 241, 1)!important;text-shadow:0 0 12px rgba(99, 102, 241, 0.3)}.search-container{display:flex;justify-content:center;margin-top:1rem}.search-box{display:flex;align-items:center;background:var(--search-bg)!important;border:1px solid var(--search-border)!important;backdrop-filter:blur(10px);border-radius:0.75rem;padding:0.4rem 0.75rem;min-width:20rem;transition:all 0.3s ease;cursor:pointer}.search-box:hover{background:var(--search-hover-bg)!important;border-color:var(--search-hover-border)!important}.search-icon{margin-right:0.75rem;opacity:0.7}.search-input{flex:1;background:transparent;border:none;outline:none;color:var(--search-text);font-size:1rem;cursor:pointer;pointer-events:none;transition:color 0.3s ease}.search-input::placeholder{color:var(--search-placeholder);transition:color 0.3s ease}.search-shortcut{padding:0.2rem 0.5rem;border-radius:0.375rem;font-size:0.75rem;color:var(--search-text);margin-left:0.5rem;opacity:0.8;transition:color 0.3s ease, opacity 0.3s ease}.cards-section{max-width:64rem;margin:0 auto;padding:2rem}.cards-section .card,.hero-section+.cards-section .card{background:var(--card-bg)!important;border:1px solid var(--card-border)!important;text-align:left!important;transition:all 0.3s ease!important}.cards-section .card:hover{background:var(--card-hover-bg)!important;border-color:rgba(59, 65, 236, 0.4)!important;transform:translateY(-4px)!important;box-shadow:0 12px 24px rgba(0, 0, 0, 0.1),\n 0 4px 8px rgba(59, 65, 236, 0.15)!important}.cards-section .card h3,.cards-section .card h4,.cards-section .card p,.cards-section .card div{text-align:left!important;color:var(--card-text)!important;transition:color 0.3s ease!important}.cards-section .card p{color:var(--card-text-secondary)!important}.cards-section .card:hover h3,.cards-section .card:hover h4{color:rgba(59, 65, 236, 1)!important}@media (max-width: 768px){.hero-section{margin:-1rem -1rem 2rem -1rem;padding:3rem 1rem;min-height:50vh}.search-box{min-width:16rem}.cards-section{padding:1rem}}.cards-section .card{transition:all 0.4s cubic-bezier(0.23, 1, 0.32, 1)!important;transform:perspective(1000px) rotateX(0deg) rotateY(0deg) translateZ(0)!important;transform-style:preserve-3d!important;position:relative!important;overflow:hidden!important}.cards-section .card::before{content:'';position:absolute;top:-2px;left:-2px;right:-2px;bottom:-2px;background:linear-gradient(45deg, \n rgba(59, 65, 236, 0.3), \n rgba(99, 102, 241, 0.2), \n rgba(59, 65, 236, 0.1),\n rgba(59, 65, 236, 0.4)\n );background-size:300% 300%;border-radius:inherit;z-index:-1;opacity:0;animation:gradientShift 3s ease infinite;transition:opacity 0.3s ease}@keyframes gradientShift{0%{background-position:0% 50%}50%{background-position:100% 50%}100%{background-position:0% 50%}}.cards-section .card:hover{transform:perspective(1000px) rotateX(5deg) rotateY(-5deg) translateZ(20px) scale(1.02)!important;border-color:transparent!important;box-shadow:0 25px 50px rgba(0, 0, 0, 0.2),\n 0 0 30px rgba(59, 65, 236, 0.3),\n inset 0 1px 0 rgba(59, 65, 236, 0.1)!important}[data-theme=\"dark\"] .cards-section .card:hover,html[data-theme=\"dark\"] .cards-section .card:hover,.dark .cards-section .card:hover,html.dark .cards-section .card:hover{background:rgba(20, 20, 25, 0.8)!important;box-shadow:0 25px 50px rgba(0, 0, 0, 0.4),\n 0 0 30px rgba(59, 65, 236, 0.3),\n inset 0 1px 0 rgba(255, 255, 255, 0.1)!important}:root .cards-section .card:hover,:not([data-theme=\"dark\"]) .cards-section .card:hover,:not(.dark) .cards-section .card:hover{background:rgba(255, 255, 255, 0.95)!important;box-shadow:0 25px 50px rgba(0, 0, 0, 0.15),\n 0 0 30px rgba(59, 65, 236, 0.2),\n inset 0 1px 0 rgba(59, 65, 236, 0.1)!important}.cards-section .card:hover::before{opacity:1}.search-box{transition:all 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);position:relative;overflow:visible}.search-box::before{content:'';position:absolute;top:50%;left:50%;width:4px;height:4px;background:rgba(59, 65, 236, 0.8);border-radius:50%;transform:translate(-50%, -50%);opacity:0;transition:all 0.6s ease;box-shadow:0 0 0 0 rgba(59, 65, 236, 0.6),\n 10px -10px 0 0 rgba(99, 102, 241, 0.6),\n -10px 10px 0 0 rgba(139, 92, 246, 0.6),\n 15px 15px 0 0 rgba(59, 65, 236, 0.4),\n -15px -15px 0 0 rgba(99, 102, 241, 0.4)}.search-box:hover{background:var(--search-hover-bg)!important;border-color:rgba(59, 65, 236, 0.7)!important;transform:scale(1.05);box-shadow:0 20px 40px rgba(0, 0, 0, 0.1),\n 0 0 60px rgba(59, 65, 236, 0.4),\n inset 0 1px 0 rgba(59, 65, 236, 0.2)}[data-theme=\"dark\"] .search-box:hover,html[data-theme=\"dark\"] .search-box:hover,.dark .search-box:hover,html.dark .search-box:hover{background:rgba(255, 255, 255, 0.15)!important;border-color:rgba(255, 255, 255, 0.3)!important;box-shadow:0 20px 40px rgba(0, 0, 0, 0.25),\n 0 0 60px rgba(59, 65, 236, 0.4),\n inset 0 1px 0 rgba(255, 255, 255, 0.2)}:root .search-box:hover,:not([data-theme=\"dark\"]) .search-box:hover,:not(.dark) .search-box:hover{background:rgba(59, 65, 236, 0.1)!important;border-color:rgba(59, 65, 236, 0.3)!important;box-shadow:0 20px 40px rgba(0, 0, 0, 0.1),\n 0 0 60px rgba(59, 65, 236, 0.4),\n inset 0 1px 0 rgba(59, 65, 236, 0.2)}.search-box:hover::before{opacity:1;transform:translate(-50%, -50%) scale(1.5)}.search-icon{transition:all 0.5s cubic-bezier(0.34, 1.56, 0.64, 1)}.search-box:hover .search-icon{transform:scale(1.3);opacity:1;filter:drop-shadow(0 0 8px rgba(59, 65, 236, 0.3))}.search-shortcut{transition:all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1)}.search-box:hover .search-shortcut{background:rgba(59, 65, 236, 0.7);transform:scale(1.05);backdrop-filter:blur(12px);box-shadow:0 2px 8px rgba(59, 65, 236, 0.2)}.cards-section .card h3,.cards-section .card h4{transition:all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1)!important;position:relative;z-index:2}.cards-section .card:hover h3,.cards-section .card:hover h4{color:rgba(99, 102, 241, 1)!important;transform:translateY(-2px);text-shadow:0 0 12px rgba(99, 102, 241, 0.3)}.cards-section .card p{transition:all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1)!important;position:relative;z-index:2}.cards-section .card:hover p{transform:translateY(-1px)}.cards-section .card::after{content:'';position:absolute;top:50%;left:50%;width:0;height:0;background:radial-gradient(circle, rgba(59, 65, 236, 0.15) 0%, rgba(255, 255, 255, 0.05) 50%, transparent 70%);border-radius:50%;transform:translate(-50%, -50%);transition:all 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);z-index:1;pointer-events:none}.cards-section .card:active::after{width:250px;height:250px}.cards-section .card:focus-visible{outline:2px solid rgba(59, 65, 236, 0.7);outline-offset:3px;box-shadow:0 0 0 4px rgba(59, 65, 236, 0.15)}.search-box:focus-within{border-color:rgba(59, 65, 236, 0.6)!important;box-shadow:0 0 0 4px rgba(59, 65, 236, 0.15),\n 0 8px 20px rgba(0, 0, 0, 0.15)}.cards-section .card:active::after{width:300px;height:300px}[data-theme=\"dark\"] .hero-section,html[data-theme=\"dark\"] .hero-section,.dark .hero-section,html.dark .hero-section{background:radial-gradient(50% 50% at 50% 50%, rgba(59, 65, 236, 0.1) 39.4%, rgba(10, 10, 15, 0) 100%)!important;background-color:#0a0a0f!important}[data-theme=\"dark\"] .hero-title,html[data-theme=\"dark\"] .hero-title,.dark .hero-title,html.dark .hero-title{color:#ffffff!important}[data-theme=\"dark\"] .hero-description,html[data-theme=\"dark\"] .hero-description,.dark .hero-description,html.dark .hero-description{color:rgba(160, 160, 165, 1)!important}[data-theme=\"dark\"] .search-box,html[data-theme=\"dark\"] .search-box,.dark .search-box,html.dark .search-box{background:rgba(10, 10, 15, 0.5)!important;border:1px solid rgba(160, 160, 165, 0.5)!important}[data-theme=\"dark\"] .search-input,html[data-theme=\"dark\"] .search-input,.dark .search-input,html.dark .search-input{color:#ffffff!important}[data-theme=\"dark\"] .search-input::placeholder,html[data-theme=\"dark\"] .search-input::placeholder,.dark .search-input::placeholder,html.dark .search-input::placeholder{color:rgba(255, 255, 255, 0.6)!important}[data-theme=\"dark\"] .search-shortcut,html[data-theme=\"dark\"] .search-shortcut,.dark .search-shortcut,html.dark .search-shortcut{color:rgba(255, 255, 255, 0.8)!important}[data-theme=\"dark\"] .cards-section .card,html[data-theme=\"dark\"] .cards-section .card,.dark .cards-section .card,html.dark .cards-section .card{background:rgba(10, 10, 15, 0.5)!important;border:1px solid rgba(160, 160, 165, 0.5)!important}[data-theme=\"dark\"] .cards-section .card h3,[data-theme=\"dark\"] .cards-section .card h4,[data-theme=\"dark\"] .cards-section .card p,html[data-theme=\"dark\"] .cards-section .card h3,html[data-theme=\"dark\"] .cards-section .card h4,html[data-theme=\"dark\"] .cards-section .card p,.dark .cards-section .card h3,.dark .cards-section .card h4,.dark .cards-section .card p,html.dark .cards-section .card h3,html.dark .cards-section .card h4,html.dark .cards-section .card p{color:#ffffff!important}[data-theme=\"dark\"] .cards-section .card p,html[data-theme=\"dark\"] .cards-section .card p,.dark .cards-section .card p,html.dark .cards-section .card p{color:rgba(160, 160, 165, 1)!important}[data-theme=\"dark\"] .hero-section::before,[data-theme=\"dark\"] .hero-section::after,html[data-theme=\"dark\"] .hero-section::before,html[data-theme=\"dark\"] .hero-section::after,.dark .hero-section::before,.dark .hero-section::after,html.dark .hero-section::before,html.dark .hero-section::after{border-color:rgba(255, 255, 255, 0.08)!important}[data-theme=\"dark\"] .hero-section::before,html[data-theme=\"dark\"] .hero-section::before,.dark .hero-section::before,html.dark .hero-section::before{border-left-color:rgba(255, 255, 255, 0.08)!important;border-top-color:rgba(255, 255, 255, 0.06)!important}[data-theme=\"dark\"] .hero-section::after,html[data-theme=\"dark\"] .hero-section::after,.dark .hero-section::after,html.dark .hero-section::after{border-right-color:rgba(255, 255, 255, 0.08)!important;border-bottom-color:rgba(255, 255, 255, 0.06)!important}[data-theme=\"dark\"] .hero-section .hero-content::before,[data-theme=\"dark\"] .hero-section .hero-content::after,html[data-theme=\"dark\"] .hero-section .hero-content::before,html[data-theme=\"dark\"] .hero-section .hero-content::after,.dark .hero-section .hero-content::before,.dark .hero-section .hero-content::after,html.dark .hero-section .hero-content::before,html.dark .hero-section .hero-content::after{background:linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent)!important}.hero-section,.hero-section *,.search-container,.search-container *,.cards-section,.cards-section *{font-family:'Figtree', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif!important}.search-input{font-weight:400}.search-shortcut{font-weight:500}.cards-section .card h3,.cards-section .card h4{font-weight:600!important}.cards-section .card p{font-weight:400!important}"}],"page":{"pagePath":"use-cases/social/notifications-and-engagement","slug":"/use-cases/social/notifications-and-engagement","pageMetadata":{"title":"Notifications \u0026 Engagement","description":"Build a notification inbox with seen/unseen state, real-time delivery, push notification setup, and granular event-based triggers.","href":"/use-cases/social/notifications-and-engagement"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Build a notification inbox with seen/unseen state, real-time delivery, push notification setup, and granular event-based triggers.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,hr:`hr`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,Card,CardGroup,CodeBlock,Frame,Heading,Info,Mermaid,Note,OptimizedImage,Step,Steps,Tip,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Mermaid)_missingMdxReference(`Mermaid`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(Info,{children:[_jsx(_components.strong,{children:`SDK v7.x`}),` · Last verified March 2026 · iOS · Android · Web · Flutter`]}),`\n`,_jsxs(Accordion,{title:`Speed run — just the code`,icon:`forward`,id:`speed-run-just-the-code`,children:[_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`TypeScript SDK gap`}),`: `,_jsx(_components.code,{children:`Client.registerPushNotification`}),` is not available in the TypeScript SDK. iOS and Android use native push token registration. In TS/Web, configure push notifications via your web push service (e.g., Firebase Messaging). Tracking: see `,_jsx(_components.code,{children:`.docs-ops/evals/sdk-tickets-to-file.md`}),`.`]})}),_jsx(CodeBlock,{filename:``,numberOfLines:`15`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`15`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// 1. Get notification tray items`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` notificationTray`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getNotificationTrayItems`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({ `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`limit:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 20`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// 2. Mark a notification as seen`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` notificationTray`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`markTraySeen`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'notificationId'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// 3. Register push token`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Push token registration not in TS SDK (see Warning above)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Configure push via your web push service (e.g., Firebase Messaging)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// 4. Observe tray status (refreshes after markTraySeen)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`notificationTray`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getNotificationTraySeen`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(({ `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`showBadge`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`isSeen`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})}),_jsx(_components.p,{children:`Full walkthrough below ↓`})]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`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.`]})}),`\n`,_jsx(_components.p,{children:`Notifications are your primary re-engagement tool. This guide covers building an in-app notification tray with seen/unseen tracking, setting up push notifications across all platforms, and subscribing to real-time social events.`}),`\n`,_jsx(Mermaid,{chart:`graph TD\n A[Social activity occurs] --> B{Who triggered it?}\n B -->|Comment on post| C[Post author notified]\n B -->|Reaction on content| D[Content author notified]\n B -->|Mention in comment| E[Mentioned user notified]\n B -->|New follower| F[Followed user notified]\n B -->|Community post| G[Community member notified]\n C \u0026 D \u0026 E \u0026 F \u0026 G --> H{Delivery channel}\n H -->|In-app open| I[Notification tray item]\n H -->|App backgrounded| J[Push notification]\n I --> K[User taps → navigates to content]\n J --> K\n\n classDef action fill:#e1f5fe,stroke:#0288d1,color:#01579b\n classDef decision fill:#fff8e1,stroke:#f9a825,color:#f57f17\n classDef process fill:#f3e5f5,stroke:#7b1fa2,color:#4a148c\n classDef outcome fill:#e8f5e9,stroke:#388e3c,color:#1b5e20\n\n class A action\n class B,H decision\n class C,D,E,F,G,I,J process\n class K outcome`}),`\n`,_jsxs(Info,{children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Prerequisites`}),`: SDK installed and authenticated. For push notifications: APNs certificate (iOS) or FCM credentials (Android) configured in `,_jsx(_components.strong,{children:`Admin Console → Settings → Integrations`}),`.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Also recommended:`}),` Complete `,_jsx(_components.a,{href:`/use-cases/social/build-a-social-feed`,children:`Build a Social Feed`}),` and `,_jsx(_components.a,{href:`/use-cases/social/community-platform`,children:`Community Platform`}),` first — notifications are triggered by feed and community events.`]})]}),`\n`,_jsxs(Note,{children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`After completing this guide you’ll have:`})}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`An in-app notification tray with seen/unseen state and real-time delivery`}),`\n`,_jsx(_components.li,{children:`Push notifications (APNs and FCM) registered and firing for key events`}),`\n`,_jsx(_components.li,{children:`Notification triggers mapped to SDK events and webhook callbacks`}),`\n`]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`quick-start-query-notification-tray`,children:`Quick Start: Query Notification Tray`}),`\n`,_jsx(CodeBlock,{filename:`TypeScript`,numberOfLines:`20`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`20`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`notificationTray`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '@amityco/ts-sdk'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` unsubscribe`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` notificationTray`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getNotificationTrayItems`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`limit:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 20`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ({ `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`items`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`onNextPage`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`hasNextPage`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`loading`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`loading`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` handleError`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` renderResults`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`items`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`hasNextPage`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` onNextPage`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`?.();`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`unsubscribe`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`]})})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`part-1-in-app-notification-tray`,children:`Part 1: In-App Notification Tray`}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Get unseen notification status`,children:[_jsxs(_components.p,{children:[`Use the tray status to show an unseen indicator on your notification icon. The tray status has no count: `,_jsx(_components.code,{children:`isSeen`}),` is `,_jsx(_components.code,{children:`false`}),` when there is tray activity newer than the last time the tray was marked as seen. It refreshes when you call `,_jsx(_components.code,{children:`markTraySeen`}),`.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`9`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`notificationTray`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '@amityco/ts-sdk'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` unsubscribe`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` notificationTray`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getNotificationTraySeen`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ({ `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`notificationTraySeen`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`loading`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`loading`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` \u0026\u0026`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` notificationTraySeen`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` updateBadge`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`notificationTraySeen`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`isSeen`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})}),`\n`]})})}),_jsxs(_components.p,{children:[`Full reference → `,_jsx(_components.a,{href:`/social-plus-sdk/social/discovery-engagement/notifications/notification-tray-status`,children:`Notification Tray Status`})]})]}),_jsxs(Step,{title:`Mark notifications as seen`,children:[_jsx(_components.p,{children:`When the user opens the tray, mark all unseen items as seen. Or mark individual items as seen on tap. Both bulk and per-item marking are supported.`}),_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`notificationTray`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '@amityco/ts-sdk'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Mark all as seen`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` notificationTray`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`markTraySeen`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Or mark a single item`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` item`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`markSeen`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`Full reference → `,_jsx(_components.a,{href:`/social-plus-sdk/social/discovery-engagement/notifications/notification-tray-status`,children:`Notification Tray Status`})]})]}),_jsxs(Step,{title:`Navigate from a notification tap`,children:[_jsxs(_components.p,{children:[`Each notification item contains `,_jsx(_components.code,{children:`targetType`}),` and `,_jsx(_components.code,{children:`targetId`}),` fields you can use to deep-link to the source content (post, comment, user, or community).`]}),_jsxs(_components.p,{children:[`Reference all notification types → `,_jsx(_components.a,{href:`/social-plus-sdk/social/discovery-engagement/notifications/notification-events-reference`,children:`Notification Events Reference`})]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`part-2-push-notifications`,children:`Part 2: Push Notifications`}),`\n`,_jsx(Mermaid,{chart:`sequenceDiagram\n participant Device as User's Device\n participant SDK\n participant Server as social.plus Server\n participant APNs as APNs / FCM\n\n Device->>SDK: registerPushNotification(token)\n SDK->>Server: Register device token\n Server-->>SDK: Registered\n\n Note over Server: Another user comments on the post\n Server->>Server: Generate notification\n alt App in foreground\n Server->>SDK: Real-time event\n SDK->>Device: In-app notification tray item\n else App in background\n Server->>APNs: Push payload\n APNs->>Device: System push notification\n Device->>SDK: User taps → deep link to content\n end`}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Configure push credentials in Admin Console`,children:[_jsxs(_components.p,{children:[`Before registering devices, add your push credentials in `,_jsx(_components.strong,{children:`Admin Console → Settings → Push Notifications`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`iOS`}),`: Upload your APNs certificate or key`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Android`}),`: Add your FCM Server Key`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`React Native / Flutter`}),`: Configure per platform`]}),`\n`]}),_jsxs(_components.p,{children:[`→ Platform setup guides: `,_jsx(_components.a,{href:`/social-plus-sdk/core-concepts/realtime-communication/push-notifications/setup/ios-setup`,children:`iOS`}),` · `,_jsx(_components.a,{href:`/social-plus-sdk/core-concepts/realtime-communication/push-notifications/setup/android-setup`,children:`Android`}),` · `,_jsx(_components.a,{href:`/social-plus-sdk/core-concepts/realtime-communication/push-notifications/setup/react-native-setup`,children:`React Native`}),` · `,_jsx(_components.a,{href:`/social-plus-sdk/core-concepts/realtime-communication/push-notifications/setup/flutter-setup`,children:`Flutter`})]})]}),_jsxs(Step,{title:`Register the device for push`,children:[_jsx(_components.p,{children:`After the user logs in, retrieve the device token and register it with the SDK. This associates the device with the authenticated user so the backend can route pushes correctly.`}),_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`Client`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '@amityco/ts-sdk'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Register a device token (web push or React Native FCM token)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` client`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`registerPushNotification`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({ `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`token:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` deviceToken`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`Full reference → `,_jsx(_components.a,{href:`/social-plus-sdk/core-concepts/realtime-communication/push-notifications/register-and-unregister-push-notifications-on-a-device`,children:`Register Push Notifications`})]})]}),_jsxs(Step,{title:`Unregister on logout`,children:[_jsx(_components.p,{children:`Always unregister the device token when the user logs out to prevent push notifications being sent to the wrong user’s device.`}),_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Unregister on logout — stops push notifications to this device`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` client`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`unregisterPushNotification`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({ `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`token:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` deviceToken`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`Full reference → `,_jsx(_components.a,{href:`/social-plus-sdk/core-concepts/realtime-communication/push-notifications/register-and-unregister-push-notifications-on-a-device`,children:`Register Push Notifications`})]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`part-3-user-notification-preferences`,children:`Part 3: User Notification Preferences`}),`\n`,_jsxs(_components.p,{children:[`Let users control what they’re notified about at a granular level. Settings are organised by module (`,_jsx(_components.code,{children:`SOCIAL`}),`, `,_jsx(_components.code,{children:`CHAT`}),`, `,_jsx(_components.code,{children:`LIVE_STREAM`}),`) and apply across all of the user’s devices.`]}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Get current notification settings`,children:[_jsx(_components.p,{children:`Read the user’s current preferences to populate a settings screen.`}),_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`UserRepository`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '@amityco/ts-sdk'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Notification settings API: see push-notification docs for v6 SDK approach`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'Notifications enabled:'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`settings`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`isEnabled`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`settings`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`modules`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`forEach`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`m`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` =>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`m`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`moduleType`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`m`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`isEnabled`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`));`})]}),`\n`]})})})]}),_jsxs(Step,{title:`Update notification module settings`,children:[_jsx(_components.p,{children:`Enable or disable individual modules, or turn off all notifications at once.`}),_jsx(CodeBlock,{filename:``,numberOfLines:`14`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`14`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`UserRepository`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '@amityco/ts-sdk'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Disable social, keep chat enabled`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Notification settings update: see push-notification docs for v6 SDK approach`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// await legacySettingsUpdate({`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#C8C8C8`},children:` modules`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`moduleType:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'social'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`isEnabled:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` false`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`moduleType:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'chat'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`isEnabled:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` true`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Or disable all notifications at once`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// Notification settings update: see push-notification docs for v6 SDK approach`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// await legacySettingsUpdate({ isEnabled: false });`})}),`\n`]})})}),_jsxs(_components.p,{children:[`Full reference → `,_jsx(_components.a,{href:`/social-plus-sdk/core-concepts/realtime-communication/push-notifications/settings/user-settings`,children:`User Notification Settings`})]})]}),_jsxs(Step,{title:`Configure community-level settings (optional)`,children:[_jsx(_components.p,{children:`For finer control, users can configure which notification types they receive per community (new post, new comment, mentions). This is separate from the global user setting above.`}),_jsxs(_components.p,{children:[`Full reference → `,_jsx(_components.a,{href:`/social-plus-sdk/core-concepts/realtime-communication/push-notifications/settings/community-settings`,children:`Community Notification Settings`})]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`connect-to-moderation-\u0026-analytics`,children:`Connect to Moderation \u0026 Analytics`}),`\n`,_jsx(Frame,{caption:`Admin Console — Push notification settings for community and chat events`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/social-b97141fb/g7VmEe9XMeck-8PT/images/console-push-notifications-overview.png?fit=max\u0026auto=format\u0026n=g7VmEe9XMeck-8PT\u0026q=85\u0026s=42c3e7433f72cade447f91f2cdcf4624`,alt:`Admin Console — Push notification settings`,\"data-og-width\":`1280`,width:`1280`,\"data-og-height\":`900`,height:`900`,\"data-path\":`images/console-push-notifications-overview.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/social-b97141fb/g7VmEe9XMeck-8PT/images/console-push-notifications-overview.png?w=280\u0026fit=max\u0026auto=format\u0026n=g7VmEe9XMeck-8PT\u0026q=85\u0026s=89bb05ca1e0d270b097d86a7e09029a3 280w, https://mintcdn.com/social-b97141fb/g7VmEe9XMeck-8PT/images/console-push-notifications-overview.png?w=560\u0026fit=max\u0026auto=format\u0026n=g7VmEe9XMeck-8PT\u0026q=85\u0026s=c30caea503d8e0c4c632cb430a9ed678 560w, https://mintcdn.com/social-b97141fb/g7VmEe9XMeck-8PT/images/console-push-notifications-overview.png?w=840\u0026fit=max\u0026auto=format\u0026n=g7VmEe9XMeck-8PT\u0026q=85\u0026s=f6d9b4a9ec813607b593f1760dafffe8 840w, https://mintcdn.com/social-b97141fb/g7VmEe9XMeck-8PT/images/console-push-notifications-overview.png?w=1100\u0026fit=max\u0026auto=format\u0026n=g7VmEe9XMeck-8PT\u0026q=85\u0026s=686d1958a08a96047a6ad461c3e38bc6 1100w, https://mintcdn.com/social-b97141fb/g7VmEe9XMeck-8PT/images/console-push-notifications-overview.png?w=1650\u0026fit=max\u0026auto=format\u0026n=g7VmEe9XMeck-8PT\u0026q=85\u0026s=32f2abc1a88f0c5fd994bfe398f18fa5 1650w, https://mintcdn.com/social-b97141fb/g7VmEe9XMeck-8PT/images/console-push-notifications-overview.png?w=2500\u0026fit=max\u0026auto=format\u0026n=g7VmEe9XMeck-8PT\u0026q=85\u0026s=8de31bfcc0492673b38640e76f6862f5 2500w`})}),`\n`,_jsxs(AccordionGroup,{children:[_jsxs(Accordion,{title:`Webhook: trigger notifications for moderation actions`,icon:`webhook`,id:`webhook-trigger-notifications-for-moderation-actions`,children:[_jsxs(_components.p,{children:[`When a moderator removes content, use webhook events (`,_jsx(_components.code,{children:`post.deleted`}),`, `,_jsx(_components.code,{children:`user.banned`}),`) to send a custom in-app or push notification explaining the action to the affected user.`]}),_jsxs(_components.p,{children:[`→ `,_jsx(_components.a,{href:`/analytics-and-moderation/social+-apis-and-services/webhook-event`,children:`Webhook Events`})]})]}),_jsx(Accordion,{title:`Notification analytics`,icon:`chart-bar`,id:`notification-analytics`,children:_jsxs(_components.p,{children:[`Track notification open rates and click-through rates in `,_jsx(_components.strong,{children:`Admin Console → Analytics Dashboard → Engagement Metrics`}),` to understand which notification types drive the most re-engagement.`]})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`common-mistakes`,children:`Common Mistakes`}),`\n`,_jsxs(Warning,{children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Polling for notifications on a timer`}),` — This drains battery and creates unnecessary API calls. Observe the tray status instead:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`7`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// ❌ Bad — polling every 5 seconds`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`setInterval`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(() `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` fetchNotifications`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(), `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`5000`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// ✅ Good: observe the tray status`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`notificationTray`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`getNotificationTraySeen`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(({ `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`=>`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`updateBadge`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`isSeen`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})})]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Not handling push permission rejection`}),` — On iOS, users can deny push permissions. Always check the permission status and provide an in-app fallback (notification tray) when push is disabled.`]})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Registering push tokens before login`}),` — Push token registration requires an active session. Always call `,_jsx(_components.code,{children:`registerPushNotification`}),` after `,_jsx(_components.code,{children:`login()`}),` completes, not in parallel.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`best-practices`,children:`Best Practices`}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Notification tray UX`,icon:`bell`,id:`notification-tray-ux`,children:_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Group related notifications (e.g., “5 reactions on your post”) instead of showing individual items`}),`\n`,_jsx(_components.li,{children:`Show a relative timestamp (“2 min ago”) that updates while the tray is open`}),`\n`,_jsx(_components.li,{children:`Mark all as seen when the tray is closed, not opened — allows the user to scan without losing unseen state`}),`\n`,_jsx(_components.li,{children:`Include a thumbnail of the content the notification relates to`}),`\n`]})}),_jsx(Accordion,{title:`Push notification best practices`,icon:`mobile`,id:`push-notification-best-practices`,children:_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Keep push payloads minimal — fetch full content on tap, not in the payload`}),`\n`,_jsxs(_components.li,{children:[`Include `,_jsx(_components.code,{children:`userId`}),` in the notification payload to support multi-account scenarios`]}),`\n`,_jsxs(_components.li,{children:[`Group pushes by thread on iOS using `,_jsx(_components.code,{children:`threadIdentifier`})]}),`\n`,_jsx(_components.li,{children:`Respect iOS Critical Alert restrictions — social notifications should never be critical`}),`\n`]})}),_jsx(Accordion,{title:`Avoiding notification fatigue`,icon:`bell-slash`,id:`avoiding-notification-fatigue`,children:_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Default to email digest for low-activity users rather than per-event push`}),`\n`,_jsx(_components.li,{children:`Respect platform quiet hours (iOS Focus mode, Android DND)`}),`\n`,_jsx(_components.li,{children:`Provide granular opt-out: users should be able to mute a specific community without turning off all notifications`}),`\n`,_jsx(_components.li,{children:`Rate-limit push if a post gets hundreds of reactions — send “50+ reactions on your post” not one push per reaction`}),`\n`]})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Dive deeper`}),`: `,_jsx(_components.a,{href:`/social-plus-sdk/social/discovery-engagement/overview`,children:`Discovery \u0026 Engagement API Reference`}),` has full parameter tables, method signatures, and platform-specific details for every API used in this guide.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next Steps`}),`\n`,_jsx(Card,{title:`Your next step → Content Moderation Pipeline`,icon:`arrow-right`,href:`/use-cases/social/content-moderation-pipeline`,children:_jsx(_components.p,{children:`Notifications are flowing — now ensure content quality with flagging, AI moderation, and admin review.`})}),`\n`,_jsx(_components.p,{children:`Or explore related guides:`}),`\n`,_jsxs(CardGroup,{cols:3,children:[_jsx(Card,{title:`User Profiles \u0026 Social Graph`,href:`/use-cases/social/user-profiles-and-social-graph`,icon:`user-group`,children:_jsx(_components.p,{children:`Follow activity that drives notification events`})}),_jsx(Card,{title:`Comments \u0026 Reactions`,href:`/use-cases/social/comments-and-reactions`,icon:`comments`,children:_jsx(_components.p,{children:`Engagement events that trigger notification items`})}),_jsx(Card,{title:`Content Moderation Pipeline`,href:`/use-cases/social/content-moderation-pipeline`,icon:`shield-check`,children:_jsx(_components.p,{children:`Use webhooks to notify users of moderation actions`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Notifications \u0026 Engagement","description":"Build a notification inbox with seen/unseen state, real-time delivery, push notification setup, and granular event-based triggers.","href":"/use-cases/social/notifications-and-engagement"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Quick Start: Query Notification Tray","slug":"quick-start-query-notification-tray","depth":2,"children":[]},{"title":"Part 1: In-App Notification Tray","slug":"part-1-in-app-notification-tray","depth":2,"children":[]},{"title":"Part 2: Push Notifications","slug":"part-2-push-notifications","depth":2,"children":[]},{"title":"Part 3: User Notification Preferences","slug":"part-3-user-notification-preferences","depth":2,"children":[]},{"title":"Connect to Moderation \u0026 Analytics","slug":"connect-to-moderation-\u0026-analytics","depth":2,"children":[]},{"title":"Common Mistakes","slug":"common-mistakes","depth":2,"children":[]},{"title":"Best Practices","slug":"best-practices","depth":2,"children":[]},{"title":"Next Steps","slug":"next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/social-b97141fb/1df53d02ad88749c/scrollbar.js"],"subdomain":"social-b97141fb","siteName":"social.plus","title":"Notifications \u0026 Engagement - social.plus","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-11T05:30:07.497Z","originalFileLocation":"use-cases/social/notifications-and-engagement.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Build a notification inbox with seen/unseen state, real-time delivery, push notification setup, and granular event-based triggers.\">\u003cmeta data-mint-head name=\"application-name\" content=\"social.plus\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/social-b97141fb/ha6XzkLPEc67sP9-/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/social-b97141fb/ha6XzkLPEc67sP9-/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/social-b97141fb/ha6XzkLPEc67sP9-/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/social-b97141fb/ha6XzkLPEc67sP9-/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/social-b97141fb/ha6XzkLPEc67sP9-/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/social-b97141fb/ha6XzkLPEc67sP9-/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/social-b97141fb/ha6XzkLPEc67sP9-/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/social-b97141fb/ha6XzkLPEc67sP9-/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/social-b97141fb/ha6XzkLPEc67sP9-/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Notifications \u0026amp; Engagement - social.plus\">\u003cmeta data-mint-head property=\"og:description\" content=\"Build a notification inbox with seen/unseen state, real-time delivery, push notification setup, and granular event-based triggers.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"social.plus\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://learn.social.plus/use-cases/social/notifications-and-engagement\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://social-b97141fb.mintlify.site/_mintlify/api/og/v2?division=Engage+%26+Grow\u0026amp;title=Notifications+%26+Engagement\u0026amp;description=Build+a+notification+inbox+with+seen%2Funseen+state%2C+real-time+delivery%2C+push+notification+setup%2C+and+granular+event-based+triggers.\u0026amp;theme=cb9d565e324f355cbe2d0daa\u0026amp;signature=896f1553a9a42b90f68850547569a8c664ec4cad48418b719dce28b7efeb9105\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Notifications \u0026amp; Engagement - social.plus\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Build a notification inbox with seen/unseen state, real-time delivery, push notification setup, and granular event-based triggers.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://social-b97141fb.mintlify.site/_mintlify/api/og/v2?division=Engage+%26+Grow\u0026amp;title=Notifications+%26+Engagement\u0026amp;description=Build+a+notification+inbox+with+seen%2Funseen+state%2C+real-time+delivery%2C+push+notification+setup%2C+and+granular+event-based+triggers.\u0026amp;theme=cb9d565e324f355cbe2d0daa\u0026amp;signature=896f1553a9a42b90f68850547569a8c664ec4cad48418b719dce28b7efeb9105\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/social-b97141fb/ha6XzkLPEc67sP9-/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"social.plus\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3b41ec\">\u003clink data-mint-head rel=\"canonical\" href=\"https://learn.social.plus/use-cases/social/notifications-and-engagement\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/use-cases/social/notifications-and-engagement.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://learn.social.plus/#organization\",\"name\":\"social.plus\",\"url\":\"https://learn.social.plus\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/social-b97141fb/QwADtWlE1NPB5yTT/logo/light.svg?fit=max\u0026auto=format\u0026n=QwADtWlE1NPB5yTT\u0026q=85\u0026s=cc4a2414bd3c7e1fd07689198dd00f93\"}},{\"@type\":\"WebSite\",\"@id\":\"https://learn.social.plus#website\",\"name\":\"social.plus\",\"url\":\"https://learn.social.plus\",\"publisher\":{\"@id\":\"https://learn.social.plus/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://learn.social.plus/use-cases/social/notifications-and-engagement#webpage\",\"url\":\"https://learn.social.plus/use-cases/social/notifications-and-engagement\",\"name\":\"Notifications \u0026 Engagement\",\"description\":\"Build a notification inbox with seen/unseen state, real-time delivery, push notification setup, and granular event-based triggers.\",\"dateModified\":\"2026-11-11T05:30:07.497Z\",\"isPartOf\":{\"@id\":\"https://learn.social.plus#website\"},\"breadcrumb\":{\"@id\":\"https://learn.social.plus/use-cases/social/notifications-and-engagement#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://learn.social.plus/use-cases/social/notifications-and-engagement#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"social.plus\",\"item\":\"https://learn.social.plus\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Notifications \u0026 Engagement\",\"item\":\"https://learn.social.plus/use-cases/social/notifications-and-engagement\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://learn.social.plus/use-cases/social/notifications-and-engagement#article\",\"headline\":\"Notifications \u0026 Engagement\",\"name\":\"Notifications \u0026 Engagement\",\"description\":\"Build a notification inbox with seen/unseen state, real-time delivery, push notification setup, and granular event-based triggers.\",\"url\":\"https://learn.social.plus/use-cases/social/notifications-and-engagement\",\"mainEntityOfPage\":{\"@id\":\"https://learn.social.plus/use-cases/social/notifications-and-engagement#webpage\"},\"dateModified\":\"2026-11-11T05:30:07.497Z\",\"publisher\":{\"@id\":\"https://learn.social.plus/#organization\"},\"isPartOf\":{\"@id\":\"https://learn.social.plus#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"social.plus\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"social.plus\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/use-cases/social/notifications-and-engagement.md","siteName":"social.plus","nav":{"global":null,"tabs":[{"tab":"Welcome","pages":[{"title":"Welcome","href":""}]},{"tab":"SDK","pages":[{"title":"SDK","href":"/social-plus-sdk/overview"}]},{"tab":"UIKit","pages":[{"title":"UIKit","href":"/uikit/overview"}]},{"tab":"Analytics \u0026 Moderation","pages":[{"title":"Analytics \u0026 Moderation","href":"/analytics-and-moderation/overview"}]},{"tab":"API","pages":[{"title":"API","href":"/analytics-and-moderation/social+-apis-and-services/README"}]},{"tab":"Guides","groups":[{"group":"Overview","pages":[{"title":"Guides","href":"/use-cases/overview"},{"title":"Choose Your Path","href":"/use-cases/choose-your-path"}]},{"group":"Build Your Community","pages":[{"title":"User Onboarding \u0026 Visitor Mode","href":"/use-cases/social/user-onboarding-and-visitor-mode"},{"title":"User Profiles \u0026 Social Graph","href":"/use-cases/social/user-profiles-and-social-graph"},{"title":"Community Platform","href":"/use-cases/social/community-platform"},{"title":"Roles, Permissions \u0026 Governance","href":"/use-cases/social/roles-permissions-and-governance"},{"title":"Build a Social Feed","href":"/use-cases/social/build-a-social-feed"}]},{"group":"Create \u0026 Share Content","pages":[{"title":"Rich Content Creation","href":"/use-cases/social/rich-content-creation"},{"title":"Comments \u0026 Reactions","href":"/use-cases/social/comments-and-reactions"},{"title":"Polls \u0026 Interactive Content","href":"/use-cases/social/polls-and-interactive-content"},{"title":"Stories \u0026 Ephemeral Content","href":"/use-cases/social/stories-and-ephemeral-content"},{"title":"Short-Form Video Clips","href":"/use-cases/social/short-form-video-clips"}]},{"group":"Communication","pages":[{"title":"Channels \u0026 Conversations","href":"/use-cases/chat/channels-and-conversations"},{"title":"Sending Messages","href":"/use-cases/chat/sending-messages"},{"title":"Message Reactions \u0026 Replies","href":"/use-cases/chat/message-reactions-and-replies"},{"title":"Unread Counts \u0026 Read Receipts","href":"/use-cases/chat/unread-counts-and-read-receipts"},{"title":"Rich Media Messages","href":"/use-cases/chat/rich-media-messages"},{"title":"Channel Roles \u0026 Permissions","href":"/use-cases/chat/channel-roles-and-permissions"},{"title":"Chat Moderation","description":"Mute and ban users, remove messages, set rate limits, and connect AI moderation to keep your chat communities safe.","href":"/use-cases/chat/chat-moderation"}]},{"group":"Engage \u0026 Grow","pages":[{"title":"Notifications \u0026 Engagement","href":"/use-cases/social/notifications-and-engagement"},{"title":"Real-time Presence \u0026 Activity","description":"Show who's online with user and channel presence, heartbeat sync, and real-time event subscriptions for live social updates.","href":"/use-cases/social/realtime-presence-and-activity"},{"title":"Search \u0026 Discovery","href":"/use-cases/social/search-and-discovery"},{"title":"User Search \u0026 People Discovery","href":"/use-cases/social/user-search-and-people-discovery"},{"title":"Content Sharing \u0026 Deep Links","href":"/use-cases/social/content-sharing-and-deep-links"},{"title":"Post Impressions \u0026 Creator Analytics","href":"/use-cases/social/post-impressions-and-creator-analytics"},{"title":"Events \u0026 Activities","href":"/use-cases/social/events-and-activities"},{"title":"Content Moderation Pipeline","href":"/use-cases/social/content-moderation-pipeline"},{"title":"Comment Review Workflow","href":"/use-cases/social/comment-review-workflow"},{"title":"User Profile Moderation","href":"/use-cases/social/user-profile-moderation"}]},{"group":"Livestream","pages":[{"title":"Livestream","href":"/use-cases/social/livestream/overview"},{"title":"Go Live \u0026 Room Management","href":"/use-cases/social/livestream/go-live-and-room-management"},{"title":"Co-Hosting","href":"/use-cases/social/livestream/co-hosting"},{"title":"Live Chat \u0026 Engagement","href":"/use-cases/social/livestream/live-chat-and-engagement"},{"title":"Product Tagging","href":"/use-cases/social/livestream/product-tagging"}]},{"group":"Monetize","pages":[{"title":"Product Tagging \u0026 Social Commerce","href":"/use-cases/social/product-tagging-and-social-commerce"},{"title":"Advertising \u0026 Monetization","href":"/use-cases/social/advertising-and-monetization"}]}]},{"tab":"AI","pages":[{"title":"AI","href":"/ai/overview"}]}]},"basePath":"","title":"Notifications \u0026 Engagement - social.plus","buildId":"dpl_G2Qd45vZZ7MkBiGF9yYx8ZsbbKXX","deploymentId":"dpl_G2Qd45vZZ7MkBiGF9yYx8ZsbbKXX","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-DL7q6v_h.js","DynamicMarkdown-CaSwclgK.js","zoom-image-lightbox-BLUesUNd.js","lightbox-handle-r17bVUz3.js"]}