This page is checked against
@amityco/ts-sdk package metadata and the TypeScript SDK source changelog in AmityTypescriptSDK/CHANGELOG.md.New ReleasesImprovements
🚀 New Features
GIF Attachments on Posts
Attach GIFs from your own GIF provider to a post. A GIF is a link, not an uploaded file: there is nofileId and nothing to upload.- Create: pass
{ type: 'gif', url, width?, height? }inattachmentsonPostRepository.createPostorcreateMixedMediaPost. Theurlmust be https, end in.gif, and be at most 2,000 characters.widthandheightare optional, from 1 to 4096. The server rejectsnullsizes, other keys, and product tags on a GIF. - Post structure: a post that holds only GIFs has
structureTypegif(PostStructureType.GIF). GIFs mixed with other media make the postmixed. A post holds 1 to 10 attachments. - Read: each GIF child post has
dataTypegifanddataof{ url, width?, height? }. - Edit:
PostRepository.editPosttakes the full list of attachments to keep. A GIF is matched by itsurl, so send each kept GIF back as read fromchildrenPosts. An attachment you leave out is deleted, and[]removes them all. - Query:
PostRepository.getPostsand the custom-ranking global feed acceptgifindataTypes. - New types:
Amity.GifAttachment,Amity.PostAttachment, andAmity.ContentDataGif.
GIF Attachments on Comments
Add a GIF to a comment, with or without text.- Create: pass
{ type: 'gif', url, width?, height? }inattachmentsonCommentRepository.createComment. The comment text stays indata. - Update:
CommentRepository.updateCommentnow acceptsattachments. A new list replaces the current one,[]removes the GIF and keeps the text, and leavingattachmentsout keeps it as is. - Query:
CommentRepository.getCommentsacceptsgifindataTypes.values.
✨ Improvements
- Improved performance when opening conversation and community channels with many members.
attachmentProductTagsis now optional onPostRepository.createMixedMediaPost.
🧩 Compatibility
Environment
Environment
New Releases
🚀 New Features
Realtime Global Ban Detection
Added theAmityAutoSubscription.USER option. With it enabled, a global ban reaches the client as soon as it happens, without waiting for the next API call. It is off by default. Turn it on with Client.enableAutoSubscriptions([AmityAutoSubscription.USER]).🧩 Compatibility
Environment
Environment
New Releases
🚀 New Features
Child Endangerment Report Reason
AddedContentFlagReasonEnum.ChildEndangerment (“Child endangerment”) as a report category for posts, comments, messages, and user behavior.Report Reason Helpers
getContentFlagReasons()returns every report category in display order, withOtherslast. Build your report picker from this list so categories added in later releases appear without a UI change.getContentFlagReasonKey(reason)returns a stable snake_case key for a category, such aschild_endangerment, for building localization keys. Don’t send the key to the server; flag with the enum value.AmityContentFlagReasonTypeis now available as an alias ofContentFlagReasonEnum, matching the name used on Android and iOS.
🧩 Compatibility
Environment
Environment
New ReleasesImprovements
🚀 New Features
Sort Channels by Last Message
ChannelRepository.getChannels accepts sortBy: 'lastMessage', which orders channels by their newest message. Unlike lastActivity, member changes don’t move a channel. Channels now also expose lastMessageAt: the time of the newest message, or the creation time when there are no messages. It can be null for some older channels, so fall back to createdAt. Your own sent messages move the channel immediately.Report Details for Posts, Comments, and Messages
PostRepository.flagPost, CommentRepository.flagComment, and MessageRepository.flagMessage accept an options object, { reason, detail? }. reason is a ContentFlagReasonEnum value, and any category, including Others, can carry a detail of up to 300 characters.- Passing a reason string is deprecated. Use
{ reason: ContentFlagReasonEnum.Others, detail: customText }instead of a custom string. The string form keeps working for the rest of the current major version.
Typed User Reports
UserRepository.flagUserProfile(userId, { field, comment? })reports a profile field:UserProfileFieldEnum.DISPLAY_NAME,DESCRIPTION, orAVATAR.UserRepository.flagUserBehavior(userId, { reason, comment? })reports behavior with aContentFlagReasonEnumcategory.commentis trimmed, left out when blank, and rejected if longer than 300 characters.UserRepository.unflagUser(userId, { reportType? })can withdraw one report type withUserReportTypeFilterEnum, or the legacy typeless report withUNTYPED. WithoutreportType, it withdraws all of your reports on the user, as before.- Passing options to
UserRepository.flagUseris deprecated in favor of the two methods above.flagUser(userId)without options is still supported.
Flag State on the User Object
user.isFlaggedByMetells you whether the current user has reported this user, usually without a network request. Observe the user withUserRepository.getUserto keep a “reported” badge current.user.getUserFlagsByMe()returns the exact answer, with your reports listed by type, reason, and comment.UserRepository.isUserFlaggedByMeis deprecated in favor of these two.
✨ Improvements
- Added the server error codes
GLOBAL_MUTE(400313),UNSAFE_CONTENT(400314), andVISITOR_REPORT_DENIED(488999) toAmity.ServerError.
🧩 Compatibility
Environment
Environment
New Releases
🚀 New Features
Module Entitlement
Check which product modules your network can use, so your app only offers the features you can access.- Read the settings:
Client.getModuleSettings()returns the network’s module settings: the enforcement mode (off,shadow, orenforce), the granted modules, and the full module catalog with each module’s prerequisites. The SDK doesn’t cache the result, so keep it yourself. - Resolve a module:
resolveModuleAvailability(moduleSettings, moduleKey)tells you whether a module such asliveorchatis available. It accounts for the enforcement mode and prerequisite modules. When a module is unavailable,reasonisnotGrantedorprerequisiteUnavailable. - Handle rejections: a call to a module your network isn’t entitled to throws
AmityModuleNotEntitledError(server code400325). Itsmodulesproperty lists the missing modules.
off, every module resolves as available.🧩 Compatibility
Environment
Environment
New ReleasesImprovements
🚀 New Features
Comment Approval for Communities
A community can now require review before a new comment is visible. While a comment is pending, only its author, the community’s reviewers, and network admins can see it. It stays out of public comment lists and comment counts until a reviewer approves it. See Comment Review.- Turn it on: set
needApprovalOnCommentCreationwhen you create or update the community. - Approval status:
comment.approvalStatusispending,approved, orrejected. - Create without a local copy:
CommentRepository.createComment(bundle, false)skips the local comment, so the comment you get back carries the server’s approval status. The default,true, keeps today’s behavior. - Review queue:
CommentRepository.getCommentReviewQueuereturns the community’s pending comments. Narrow it to one post or a date range. - Approve or decline:
CommentRepository.approveCommentanddeclineComment. Declining deletes the comment. The optionalreason(at most 250 characters) is kept for the moderation record only. - Permission: reviewers need
ReviewCommunityCommentPermission. - Editing while pending:
Client.getSocialSettings()returnsisAllowEditCommentWhenReviewingEnabled, which tells you whether an author may edit a pending comment. - Realtime: an approved comment appears as soon as it is approved, through the
comment.approvedevent. Subscribe withCommentRepository.onCommentApproved. A declined comment arrives as a deletion.
Curated Content
Fetch the posts selected for a topic configured in the Console, and build your own discovery surface around them. A pool is one bounded, ranked result with no pagination, and the SDK keeps the server’s order. See Topic-based Content Discovery.- Fetch a pool:
CuratedContentRepository.getPool(topicId, limit?)returns a promise of the pool: the topic plus its ranked posts.limitmust be between 1 and 100. - Analytics:
topic.analyticsprovidesmarkAsViewed(),markPostAsViewed(postId), andmarkPostClick(postId).
Pin Message in Live Channels
Pin one message in a live channel so it stays visible above the chat. Pinning a new message replaces the current pin. The server clears the pin when the message is deleted or its author is banned from the channel or globally. See Pin and Unpin Messages.- Pin and unpin:
MessageRepository.pinMessageandunpinMessage. - Read the pin:
channel.pinnedMessageholds the current pinned message, ornullwhen nothing is pinned. - Permission:
PinMessagePermission. Channel moderators, and livestream hosts and co-hosts, have it by default. - Realtime:
ChannelRepository.getChannelemits on every pin and unpin, driven by thechannel.messagePinnedandchannel.messageUnpinnedevents.ChannelRepository.onChannelMessagePinnedandonChannelMessageUnpinnedare also available as separate callbacks.
Local Event on Channel Creation
createChannel now fires a local channel.created event right after a successful create. A newly created channel appears immediately in a running ChannelRepository.getChannels query, instead of waiting for its first message.✨ Improvements
- Added
post.getLocalCommentCount(includePending). By default, the count leaves out the current user’s own comments that are still awaiting approval. Passtrueto include them.post.localCommentCountis now deprecated and equalsgetLocalCommentCount(true).
🐞 Bug Fixes
- Fixed a member’s channel role change (
channel.roleAdded/channel.roleRemoved) not updatingChannelRepository.getChannel, which could leave a stale pin permission. - Fixed a globally banned user’s session staying active when the realtime ban event was missed. The next API call now terminates the session and notifies
onClientBanned. - Fixed a deleted message’s text lingering in the channel list preview when the preview setting excludes deleted messages.
- Fixed
message.creator.avataralways resolving toundefinedeven though the type declared it.
🧩 Compatibility
Environment
Environment
Improvements
New ReleasesImprovements
🚀 New Features
v4 Sessions
MigratedloginWithAccessToken to v4 sessions.Skip Token Renewal for Banned Users
Token renewal is now skipped for globally banned users.🐞 Bug Fixes
- No longer builds a cache key from an id the payload left null.
- Capped the MQTT v5 session expiry at 1800s.
- Typed the video file metadata.
🧩 Compatibility
Environment
Environment
Improvements
New ReleasesImprovements
🚀 New Features
Report User with Reason
Added the ability to report a user with a reason.✨ Improvements
- Upgraded the MQTT client to protocol v5.
🐞 Bug Fixes
- Added an
excludeOwnEventsquery parameter to event queries. - Fixed the message preview not updating in real time on edit.
- Added
actorUserIdto co-host data.
🧩 Compatibility
Environment
Environment
Improvements
New Releases
🚀 New Features
For You Feed
Added a personalized For You feed. New APIs let you fetch the recommended feed and read its network-level setting, and the feed reports a “caught up” state once the user has seen all available recommendations.Notification Settings
Added APIs to read and update user notification settings.Chat Settings API
Added a chat settings API for configuring channel and messaging behavior.Channel Search Live Collection
Added a live collection for searching channels, so search results stay in sync as data changes.Enhanced User Blocking
A new API to list all users blocking the current user, a public auto-subscription enum, and a dedicated error code emitted when the maximum number of blocked users is reached.Shareable Link Configuration
Updated thegetShareableLinkConfiguration schema.🧩 Compatibility
Environment
Environment
New Releases
🚀 New Features
Visitor Daily Usage Limit
Added detection for the visitor daily read quota (100 req/day, error code400323 — ServerError.VISITOR_USAGE_LIMIT_EXCEEDED). The SDK detects this error in the Axios response interceptor and emits an visitorUsageLimitReached event. Subscribe via onVisitorUsageLimitReached(callback).🧩 Compatibility
Environment
Environment
New Releases
Improvements
Improvements
New Releases
🚀 New Features
Get All Blocked Users
IntroducegetAllBlockedUsers() on UserRepository — returns the full list of blocked users (up to 100) as a non-paginated, one-shot Promise<Amity.User[]> with a 5-minute TTL cache.Excluding Roles in Community Member Queries
AddexcludingRoles parameter to getMembers() and searchMembers() query params. Members holding any of the specified roles are excluded from the live collection result.🧩 Compatibility
Environment
Environment
New Releases
🚀 New Features
Live Thumbnail and Resolution in AmityRoom
AddliveThumbnailUrl, liveResolution, and recordedResolution fields to AmityRoom to expose server-generated thumbnail and stream resolution data.Link Detection in Comments
Add link detection support to comment create/update APIs, enabling automatic link parsing in comment text.Root Comment and Latest Comment ID in Query
AddrootId and latestCommentId fields to the comment query API for improved comment threading and navigation.Page Size for Get Comments
AddpageSize parameter to getComments API for more granular control over comment pagination.🐞 Bug Fixes
- Fixed posts going missing after paging REFRESH.
🧩 Compatibility
Environment
Environment
New Releases
🚀 New Features
Product Tagging in Posts
Introduce product tagging support in posts — tag products in post text via@ trigger and per-media. Includes product search and create/update post with product tags.Livestream Product Tagging
Introduce product management in livestream(Room) post — tag, pin, and remove products across broadcast phases.🧩 Compatibility
Environment
Environment
New Releases
New Releases
New Releases
New Releases
New Releases
New Releases
New Releases
🚀 New Features
Child stream
- Support child stream creation where a child stream can be linked to a parent stream.
Poll
- Added
unvotePoll()function, enables user to update poll answer.
Preview members
- Added
getPreviewMembers()onAmityChannel, enables access upto 4 members of converation and community channel.
🧩 Compatibility
Environment
Environment