Skip to main content
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 no fileId and nothing to upload.
  • Create: pass { type: 'gif', url, width?, height? } in attachments on PostRepository.createPost or createMixedMediaPost. The url must be https, end in .gif, and be at most 2,000 characters. width and height are optional, from 1 to 4096. The server rejects null sizes, other keys, and product tags on a GIF.
  • Post structure: a post that holds only GIFs has structureType gif (PostStructureType.GIF). GIFs mixed with other media make the post mixed. A post holds 1 to 10 attachments.
  • Read: each GIF child post has dataType gif and data of { url, width?, height? }.
  • Edit: PostRepository.editPost takes the full list of attachments to keep. A GIF is matched by its url, so send each kept GIF back as read from childrenPosts. An attachment you leave out is deleted, and [] removes them all.
  • Query: PostRepository.getPosts and the custom-ranking global feed accept gif in dataTypes.
  • New types: Amity.GifAttachment, Amity.PostAttachment, and Amity.ContentDataGif.

GIF Attachments on Comments

Add a GIF to a comment, with or without text.
  • Create: pass { type: 'gif', url, width?, height? } in attachments on CommentRepository.createComment. The comment text stays in data.
  • Update: CommentRepository.updateComment now accepts attachments. A new list replaces the current one, [] removes the GIF and keeps the text, and leaving attachments out keeps it as is.
  • Query: CommentRepository.getComments accepts gif in dataTypes.values.

✨ Improvements

  • Improved performance when opening conversation and community channels with many members.
  • attachmentProductTags is now optional on PostRepository.createMixedMediaPost.

🧩 Compatibility

New Releases

🚀 New Features

Realtime Global Ban Detection

Added the AmityAutoSubscription.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

New Releases

🚀 New Features

Child Endangerment Report Reason

Added ContentFlagReasonEnum.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, with Others last. 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 as child_endangerment, for building localization keys. Don’t send the key to the server; flag with the enum value.
  • AmityContentFlagReasonType is now available as an alias of ContentFlagReasonEnum, matching the name used on Android and iOS.

🧩 Compatibility

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, or AVATAR.
  • UserRepository.flagUserBehavior(userId, { reason, comment? }) reports behavior with a ContentFlagReasonEnum category.
  • comment is trimmed, left out when blank, and rejected if longer than 300 characters.
  • UserRepository.unflagUser(userId, { reportType? }) can withdraw one report type with UserReportTypeFilterEnum, or the legacy typeless report with UNTYPED. Without reportType, it withdraws all of your reports on the user, as before.
  • Passing options to UserRepository.flagUser is deprecated in favor of the two methods above. flagUser(userId) without options is still supported.

Flag State on the User Object

  • user.isFlaggedByMe tells you whether the current user has reported this user, usually without a network request. Observe the user with UserRepository.getUser to keep a “reported” badge current.
  • user.getUserFlagsByMe() returns the exact answer, with your reports listed by type, reason, and comment.
  • UserRepository.isUserFlaggedByMe is deprecated in favor of these two.

✨ Improvements

  • Added the server error codes GLOBAL_MUTE (400313), UNSAFE_CONTENT (400314), and VISITOR_REPORT_DENIED (488999) to Amity.ServerError.

🧩 Compatibility

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, or enforce), 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 as live or chat is available. It accounts for the enforcement mode and prerequisite modules. When a module is unavailable, reason is notGranted or prerequisiteUnavailable.
  • Handle rejections: a call to a module your network isn’t entitled to throws AmityModuleNotEntitledError (server code 400325). Its modules property lists the missing modules.
The settings are advisory; the server is what enforces them. While a network’s mode is off, every module resolves as available.

🧩 Compatibility

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 needApprovalOnCommentCreation when you create or update the community.
  • Approval status: comment.approvalStatus is pending, approved, or rejected.
  • 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.getCommentReviewQueue returns the community’s pending comments. Narrow it to one post or a date range.
  • Approve or decline: CommentRepository.approveComment and declineComment. Declining deletes the comment. The optional reason (at most 250 characters) is kept for the moderation record only.
  • Permission: reviewers need ReviewCommunityCommentPermission.
  • Editing while pending: Client.getSocialSettings() returns isAllowEditCommentWhenReviewingEnabled, 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.approved event. Subscribe with CommentRepository.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. limit must be between 1 and 100.
  • Analytics: topic.analytics provides markAsViewed(), markPostAsViewed(postId), and markPostClick(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.pinMessage and unpinMessage.
  • Read the pin: channel.pinnedMessage holds the current pinned message, or null when nothing is pinned.
  • Permission: PinMessagePermission. Channel moderators, and livestream hosts and co-hosts, have it by default.
  • Realtime: ChannelRepository.getChannel emits on every pin and unpin, driven by the channel.messagePinned and channel.messageUnpinned events. ChannelRepository.onChannelMessagePinned and onChannelMessageUnpinned are 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. Pass true to include them. post.localCommentCount is now deprecated and equals getLocalCommentCount(true).

🐞 Bug Fixes

  • Fixed a member’s channel role change (channel.roleAdded / channel.roleRemoved) not updating ChannelRepository.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.avatar always resolving to undefined even though the type declared it.

🧩 Compatibility

Improvements

🐞 Bug Fixes

  • Fixed a crash from an unhandled MQTT CONNACK timeout error arriving on a connection that had already been discarded.

🧩 Compatibility

New ReleasesImprovements

🚀 New Features

v4 Sessions

Migrated loginWithAccessToken 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

Improvements

✨ Improvements

  • Maintenance release published as part of the 28 August coordinated release. No new functional changes since 7.25.0.

🧩 Compatibility

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 excludeOwnEvents query parameter to event queries.
  • Fixed the message preview not updating in real time on edit.
  • Added actorUserId to co-host data.

🧩 Compatibility

Improvements

🐞 Bug Fixes

  • Fixed the liveChatEnabled field type on the room (live) object.
  • Fixed the community avatar not resolving for stories.

🧩 Compatibility

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.Updated the getShareableLinkConfiguration schema.

🧩 Compatibility

New Releases

🚀 New Features

Visitor Daily Usage Limit

Added detection for the visitor daily read quota (100 req/day, error code 400323 — 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

New Releases

🚀 New Features

Optimistic Comment Creation

  • Added optimistic comment creation support — comments now appear instantly in the UI before server confirmation, improving perceived performance.

🧩 Compatibility

Improvements

✨ Improvements

  • Improved MQTT connection retry mechanism for better real-time messaging stability.

🧩 Compatibility

Improvements

🐞 Bug Fixes

  • Fixed incorrect unread count increment for live channels, which caused getTotalUnreadCount to return inaccurate results.
  • Fixed incorrect local commentsCount increment.

🧩 Compatibility

New Releases

🚀 New Features

Get All Blocked Users

Introduce getAllBlockedUsers() 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

Add excludingRoles parameter to getMembers() and searchMembers() query params. Members holding any of the specified roles are excluded from the live collection result.

🧩 Compatibility

New Releases

🚀 New Features

Live Thumbnail and Resolution in AmityRoom

Add liveThumbnailUrl, liveResolution, and recordedResolution fields to AmityRoom to expose server-generated thumbnail and stream resolution data.Add link detection support to comment create/update APIs, enabling automatic link parsing in comment text.

Root Comment and Latest Comment ID in Query

Add rootId and latestCommentId fields to the comment query API for improved comment threading and navigation.

Page Size for Get Comments

Add pageSize parameter to getComments API for more granular control over comment pagination.

🐞 Bug Fixes

  • Fixed posts going missing after paging REFRESH.

🧩 Compatibility

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

New Releases

🚀 New Features

Introduced a new searchBy param in searchUsersByDisplayName API providing additional search options.

🧩 Compatibility

New Releases

🚀 New Features

Authentication

Introduce an ability to login with a pre-fetched accessToken.

Comment Count

Introduce a local calculated comment count based on incoming real-time events.

Community Post Query by Tags

Introduce an ability to community posts with matching tags.

🧩 Compatibility

New Releases

🚀 New Features

Livestream Analytics

Introduce AmityRoomAnalytics for the purpose of tracking watch minute

Session Termination Reason

Introduce reason when client goes into termianted state

🧩 Compatibility

New Releases

🚀 New Features

Livestream Post With Room

Introduce Room service, an upgrade and a replacement forstream

Event Scheduling

Introduce Event service, enabling event scheduling

🧩 Compatibility

New Releases

🚀 New Features

Mixed Attachments Post

  • Support mixed structure post where a post can contains multiple datatypes such as image, video, file, and audio.

Audio Content Support

  • Support audio file upload.
  • Introduce audio dataType for post.

🧩 Compatibility

New Releases

🚀 New Features

Public Access

  • Added loginAsVisitor() function, enables user to interact as a visitor.
  • Added loginAsBot() function, enables SEO bot to crawl through public data.

🧩 Compatibility

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() on AmityChannel, enables access upto 4 members of converation and community channel.

🧩 Compatibility