Notifications and mentions
Read Bluesky and LinkedIn organization notifications, plus native mention timelines on X, Instagram, and Threads, with cursors and scopes.
Bluesky and LinkedIn implement the normalized notifications facade. LinkedIn
covers organization pages only. X, Instagram, and Threads have no notifications
API, so their adapters declare notifications.read as unsupported-by-platform
and expose native mention reads instead. YouTube and TikTok have neither.
Normalized API
social.notifications.list(account, { cursor?, limit? }, options?)
social.notifications.iterate(account, { limit?, maxPages?, maxItems? }, options?)
social.notifications.markSeen(account, { seenAt? }, options?)
list returns Page<JsonObject> with items and optional opaque nextCursor.
Pass that cursor unchanged to the next list call. iterate follows cursors
lazily within its bounds. markSeen returns void; notifications.read and
notifications.seen are separate capabilities. Objects stay provider-shaped.
The examples assume one social client built with the platform’s adapter and an
account from connectedAccountRef. accountId is the Bluesky DID, the
LinkedIn organization URN, the X or Threads user ID, or the Instagram account ID. Native calls also take the
context your application passes to adapter operations.
Platform support
Bluesky
Normalized list, iterate, and markSeen. Needs an access JWT or OAuth
session with repo. Paging uses the AT Protocol cursor.
Configure bluesky({ auth: { service, did, accessJwt } }), or pass an OAuth
session instead of accessJwt. The adapter calls
app.bsky.notification.listNotifications and the seen endpoint. Reasons include
like, repost, follow, mention, and reply.
const page = await social.notifications.list(account, { limit: 50 });
await social.notifications.markSeen(account, { seenAt: new Date().toISOString() });Normalized list and iterate for organization accounts. Needs the
Community Management API product, rw_organization_admin, and an administrator
role on the organization. markSeen is not supported.
Configure linkedin({ auth: { accessToken, author: "urn:li:organization:123" }, apiVersion }).
The adapter calls organizationalEntityNotifications with all seven action
types: LIKE, COMMENT, SHARE, SHARE_MENTION, ADMIN_COMMENT,
COMMENT_EDIT, and COMMENT_DELETE. Items keep notificationId, action,
sourcePost, generatedActivity, and lastModifiedAt.
const page = await social.notifications.list(account, { limit: 50 });Page sizes run from 1 to 100 and the cursor is an offset. LinkedIn keeps
notifications for 60 days and recommends webhooks for ongoing delivery. Member
accounts declare notifications.read as account-ineligible.
X
Native mentions only. X API v2 has no notifications list endpoint. The
Account Activity API and X Activity API push events to webhooks or streams, which
this read does not cover. Needs a user access token with mentions.read.
Subject to X API paging and rate limits.
Configure x({ auth: { userId, accessToken } }) and use the X user ID as
accountId. The method calls GET /2/users/:id/mentions and returns a
Page<JsonObject> of X posts.
const native = social.native("default", { acknowledgeUnsafe: true });
const page = await native.mentions({ account, limit: 50, context });Pass page.nextCursor back as cursor. A missing user token or scope raises
missing_permission or unauthorized.
Native listMentions (also exposed as mentions). Works with Instagram
Login and Facebook Login. Instagram Login needs instagram_business_basic and
instagram_business_manage_comments. Facebook Login needs instagram_basic,
instagram_manage_comments, and pages_read_engagement.
Configure instagram({ auth: { accountId, accessToken } }) for Instagram Login,
or add flavor: "facebook-login". The adapter reads the /{ig-user-id}/tags
edge on the matching Graph host and returns tagged-media objects with a cursor.
Meta does not return private media or Story mentions.
const native = social.native("default", { acknowledgeUnsafe: true });
const page = await native.listMentions({ account, limit: 50, context });mentionedMedia and mentionedComment look up one caption or comment mention
by ID and need Facebook Login. Meta documents no Instagram Login equivalent, so
with Instagram Login they raise unsupported_capability before any request.
Threads
Native mentions only. The Threads API has no notifications endpoint. Needs
threads_basic and threads_manage_mentions.
Configure threads({ auth: { userId, accessToken } }). The method calls the
/:threads-user-id/mentions edge and returns the provider JSON unchanged.
const native = social.native("default", { acknowledgeUnsafe: true });
const page = await native.mentions({ account, context });Store the provider cursor and pass it as cursor on the next call. The provider
reports missing permissions as unauthorized or an upstream error.
YouTube
Not supported. The YouTube Data API has no notifications resource.
activities.list reports actions a channel took, not notifications it received.
The adapter declares notifications.read as unsupported-by-platform and has
no native mentions method. A normalized call raises SocialError with
code: "unsupported_capability".
const { capabilities } = social.capabilities().default;
const canRead = capabilities.some(
(c) => c.operation === "notifications.read" && c.availability === "available",
);TikTok
Not supported. TikTok for Developers APIs expose no notification inbox or
mentions read. The adapter declares notifications.read as
unsupported-by-platform, and a normalized call raises unsupported_capability.
Errors
Calling the normalized notifications facade for X, Instagram, Threads, YouTube,
TikTok, or a LinkedIn member account raises unsupported_capability before any
request. So does markSeen on LinkedIn. Invalid page limits raise
invalid_input. Native calls bypass tenant authorization and concurrency
middleware, so apply your own policy around them.
Sources, accessed 2026-09-24: LinkedIn organization social action notifications, X Activity API, X Account Activity API, Threads API reference, Instagram IG User reference, YouTube Data API reference, TikTok for Developers overview.