Services and methods
This page lists every service method of the Node.js SDK, with TypeScript parameter and return types, the REST API and the automatic retry category. Paths omit /{org_name}/{app_name}. For what parameters and response fields mean, follow each row's REST docs link; for general rules, see Calling the API.
T.X in signatures is a type exported by the main package, imported with import type { X } from '@deeprespond/im-server-sdk'. options is CallOptions, and iterators take IterOptions; optional parameters are marked ?. Methods return a Promise, and iterator methods return an AsyncIterable used with for await. WithRaw means the result also gives the raw response as result[RAW].
The "API name" is used in errors' op, in stats, in hooks and in FakeOpenAPI, and stays snake_case, while methods are camelCase. Iterator methods call the list API page by page, and methods ending in All split into batches by the API's limit. For retry categories, see Retries and idempotency; waiting and resending after rate limits follows Rate limits.
Users client.users
| Method and signature | REST API | API name | Auto retry | Docs |
|---|---|---|---|---|
listMuted(params?: T.ListMutedParams, options?: CallOptions): Promise<Page<T.UserMute>> | GET /mutes | users.list_muted | Query | List muted users |
iterMuted(params?: Omit<T.ListMutedParams, 'cursor'>, options?: IterOptions): AsyncIterable<T.UserMute> | Calls GET /mutes page by page | users.list_muted | Query | List muted users |
create(username: string, params?: T.CreateUserParams, options?: CallOptions): Promise<WithRaw<T.User>> | POST /users | users.create | Unique create | Create a user |
list(params?: T.ListUsersParams, options?: CallOptions): Promise<Page<T.User>> | GET /users | users.list | Query | List users |
iter(params?: Omit<T.ListUsersParams, 'cursor'>, options?: IterOptions): AsyncIterable<T.User> | Calls GET /users page by page | users.list | Query | List users |
batchCreate(users: readonly T.CreateUserInput[], options?: CallOptions): Promise<WithRaw<T.BatchCreateUsersResult>> | POST /users/batch | users.batch_create | Unique create | Create users in batches |
batchCreateAll( users: Iterable<T.CreateUserInput> | AsyncIterable<T.CreateUserInput>, options?: CallOptions): Promise<WithRaw<T.BatchCreateUsersResult>> | Calls POST /users/batch in batches | users.batch_create | Unique create | Create users in batches |
lookup(usernames: readonly string[], options?: CallOptions): Promise<WithRaw<T.User[]>> | POST /users/lookup | users.lookup | Query | Look up users by username |
get(username: string, options?: CallOptions): Promise<WithRaw<T.User>> | GET /users/{username} | users.get | Query | Get a user |
update(username: string, params?: T.UpdateUserParams, options?: CallOptions): Promise<WithRaw<T.User>> | PATCH /users/{username} | users.update | Idempotent | Update a user's profile |
delete(username: string, options?: CallOptions): Promise<void> | DELETE /users/{username} | users.delete | Idempotent | Delete a user |
disable(username: string, params?: T.DisableUserParams, options?: CallOptions): Promise<WithRaw<T.User>> | POST /users/{username}/disable | users.disable | Idempotent | Ban a user |
enable(username: string, options?: CallOptions): Promise<WithRaw<T.User>> | POST /users/{username}/enable | users.enable | Idempotent | Unban a user |
issueLoginTicket(username: string, params?: T.IssueLoginTicketParams, options?: CallOptions): Promise<WithRaw<T.LoginTicket>> | POST /users/{username}/login-tickets | users.issue_login_ticket | Idempotent | Issue a sign-in ticket |
listMutes(username: string, options?: CallOptions): Promise<WithRaw<T.UserMute[]>> | GET /users/{username}/mutes | users.mutes | Query | Get a user's mutes |
mute( username: string, scope: 'chat' | 'group' | 'room' | (string & {}), params?: T.MuteParams, options?: CallOptions): Promise<WithRaw<T.UserMute>> | PUT /users/{username}/mutes/{scope} | users.mute | Idempotent | Mute a user |
unmute(username: string, scope: 'chat' | 'group' | 'room' | (string & {}), options?: CallOptions): Promise<void> | DELETE /users/{username}/mutes/{scope} | users.unmute | Idempotent | Unmute a user |
setPassword(username: string, password: string, options?: CallOptions): Promise<void> | PUT /users/{username}/password | users.set_password | No retry | Set a password |
listSessions(username: string, options?: CallOptions): Promise<WithRaw<T.Session[]>> | GET /users/{username}/sessions | users.sessions | Query | List devices |
kickAll(username: string, options?: CallOptions): Promise<void> | DELETE /users/{username}/sessions | users.kick_all | No retry | Sign out all devices |
kick(username: string, sessionId: string, options?: CallOptions): Promise<void> | DELETE /users/{username}/sessions/{session_id} | users.kick | Idempotent | Sign out one device |
Friends client.friends
| Method and signature | REST API | API name | Auto retry | Docs |
|---|---|---|---|---|
listRequests(username: string, params: T.ListFriendRequestsParams, options?: CallOptions): Promise<Page<T.FriendRequest>> | GET /users/{username}/friend-requests | friends.requests | Query | Query friend requests |
iterRequests( username: string, params: Omit<T.ListFriendRequestsParams, 'cursor'>, options?: IterOptions): AsyncIterable<T.FriendRequest> | Calls GET /users/{username}/friend-requests page by page | friends.requests | Query | Query friend requests |
getSettings(username: string, options?: CallOptions): Promise<WithRaw<T.FriendSettings>> | GET /users/{username}/friend-settings | friends.settings | Query | Get the friend add mode |
setSettings( username: string, friendAddMode: 'need_confirm' | 'allow_any' | 'deny_any' | (string & {}) | null, options?: CallOptions): Promise<WithRaw<T.FriendSettings>> | PUT /users/{username}/friend-settings | friends.set_settings | Idempotent | Set the friend add mode |
list(username: string, params?: T.ListFriendsParams, options?: CallOptions): Promise<VersionedPage<T.Friend>> | GET /users/{username}/friends | friends.list | Query | List friends |
iter(username: string, params?: Omit<T.ListFriendsParams, 'cursor' | 'known_version'>, options?: IterOptions): AsyncIterable<T.Friend> | Calls GET /users/{username}/friends page by page | friends.list | Query | List friends |
deleteAll(username: string, options?: CallOptions): Promise<number> | DELETE /users/{username}/friends | friends.delete_all | Idempotent | Remove all friends |
batchAdd(username: string, friends: readonly T.AddFriendItem[], options?: CallOptions): Promise<WithRaw<T.BatchAddFriendsResult>> | POST /users/{username}/friends/batch | friends.batch_add | Idempotent | Add friends in batches |
batchAddAll( username: string, friends: Iterable<T.AddFriendItem> | AsyncIterable<T.AddFriendItem>, options?: CallOptions): Promise<WithRaw<T.BatchAddFriendsResult>> | Calls POST /users/{username}/friends/batch in batches | friends.batch_add | Idempotent | Add friends in batches |
batchDelete(username: string, usernames: readonly string[], options?: CallOptions): Promise<WithRaw<T.BatchDeleteFriendsResult>> | POST /users/{username}/friends/batch-delete | friends.batch_delete | Idempotent | Remove friends in batches |
check(username: string, usernames: readonly string[], options?: CallOptions): Promise<WithRaw<T.FriendCheck[]>> | POST /users/{username}/friends/check | friends.check | Query | Check relationships |
get(username: string, friend: string, options?: CallOptions): Promise<WithRaw<T.Friend>> | GET /users/{username}/friends/{friend} | friends.get | Query | Get a friend |
add(username: string, friend: string, params?: T.AddFriendParams, options?: CallOptions): Promise<WithRaw<T.FriendChange>> | PUT /users/{username}/friends/{friend} | friends.add | Idempotent | Add a friend |
update(username: string, friend: string, params?: T.UpdateFriendParams, options?: CallOptions): Promise<WithRaw<T.FriendChange>> | PATCH /users/{username}/friends/{friend} | friends.update | Idempotent | Update a friend's remark and custom attributes |
delete(username: string, friend: string, options?: CallOptions): Promise<WithRaw<T.FriendChange>> | DELETE /users/{username}/friends/{friend} | friends.delete | Idempotent | Remove a friend |
Blocklist client.blacklist
| Method and signature | REST API | API name | Auto retry | Docs |
|---|---|---|---|---|
list(username: string, params?: T.ListBlacklistParams, options?: CallOptions): Promise<VersionedPage<T.BlacklistEntry>> | GET /users/{username}/blacklist | blacklist.list | Query | Get the block list |
iter( username: string, params?: Omit<T.ListBlacklistParams, 'cursor' | 'known_version'>, options?: IterOptions): AsyncIterable<T.BlacklistEntry> | Calls GET /users/{username}/blacklist page by page | blacklist.list | Query | Get the block list |
batchAdd(username: string, usernames: readonly string[], options?: CallOptions): Promise<WithRaw<T.BatchBlacklistResult>> | POST /users/{username}/blacklist/batch | blacklist.batch_add | Idempotent | Block in batches |
batchRemove(username: string, usernames: readonly string[], options?: CallOptions): Promise<WithRaw<T.BatchBlacklistResult>> | POST /users/{username}/blacklist/batch-delete | blacklist.batch_remove | Idempotent | Unblock in batches |
add(username: string, target: string, options?: CallOptions): Promise<WithRaw<T.BlacklistChange>> | PUT /users/{username}/blacklist/{target} | blacklist.add | Idempotent | Block a user |
remove(username: string, target: string, options?: CallOptions): Promise<WithRaw<T.BlacklistChange>> | DELETE /users/{username}/blacklist/{target} | blacklist.remove | Idempotent | Unblock a user |
Groups client.groups
| Method and signature | REST API | API name | Auto retry | Docs |
|---|---|---|---|---|
create(owner: string, params?: T.CreateGroupParams, options?: CallOptions): Promise<WithRaw<T.CreateGroupResult>> | POST /groups | groups.create | No retry | Create a group |
list(params?: T.ListGroupsParams, options?: CallOptions): Promise<Page<T.Group>> | GET /groups | groups.list | Query | List groups |
iter(params?: Omit<T.ListGroupsParams, 'cursor'>, options?: IterOptions): AsyncIterable<T.Group> | Calls GET /groups page by page | groups.list | Query | List groups |
get(groupId: string, options?: CallOptions): Promise<WithRaw<T.Group>> | GET /groups/{group_id} | groups.get | Query | Get a group |
update(groupId: string, params?: T.UpdateGroupParams, options?: CallOptions): Promise<WithRaw<T.GroupChange>> | PATCH /groups/{group_id} | groups.update | Idempotent | Update a group's profile and settings |
delete(groupId: string, params?: T.GroupsDeleteParams, options?: CallOptions): Promise<void> | DELETE /groups/{group_id} | groups.delete | Idempotent | Dissolve a group |
listBlacklist(groupId: string, params?: T.ListOptions, options?: CallOptions): Promise<Page<T.GroupBlacklistEntry>> | GET /groups/{group_id}/blacklist | groups.blacklist | Query | List the group block list |
iterBlacklist(groupId: string, params?: Omit<T.ListOptions, 'cursor'>, options?: IterOptions): AsyncIterable<T.GroupBlacklistEntry> | Calls GET /groups/{group_id}/blacklist page by page | groups.blacklist | Query | List the group block list |
addToBlacklist( groupId: string, username: string, params?: T.GroupsAddToBlacklistParams, options?: CallOptions): Promise<WithRaw<T.GroupBlacklistChange>> | PUT /groups/{group_id}/blacklist/{username} | groups.add_to_blacklist | Idempotent | Add a user to the group block list |
removeFromBlacklist(groupId: string, username: string, options?: CallOptions): Promise<WithRaw<T.GroupBlacklistChange>> | DELETE /groups/{group_id}/blacklist/{username} | groups.remove_from_blacklist | Idempotent | Remove a user from the group block list |
disable(groupId: string, params?: T.GroupsDisableParams, options?: CallOptions): Promise<WithRaw<T.GroupChange>> | POST /groups/{group_id}/disable | groups.disable | Idempotent | Ban a group |
enable(groupId: string, options?: CallOptions): Promise<WithRaw<T.GroupChange>> | POST /groups/{group_id}/enable | groups.enable | Idempotent | Unban a group |
listMembers(groupId: string, params?: T.ListMembersParams, options?: CallOptions): Promise<VersionedPage<T.GroupMember>> | GET /groups/{group_id}/members | groups.members | Query | List group members |
iterMembers( groupId: string, params?: Omit<T.ListMembersParams, 'cursor' | 'known_version'>, options?: IterOptions): AsyncIterable<T.GroupMember> | Calls GET /groups/{group_id}/members page by page | groups.members | Query | List group members |
addMembers(groupId: string, usernames: readonly string[], options?: CallOptions): Promise<WithRaw<T.GroupMembersResult>> | POST /groups/{group_id}/members/batch | groups.add_members | Idempotent | Add group members |
removeMembers(groupId: string, usernames: readonly string[], options?: CallOptions): Promise<WithRaw<T.GroupMembersResult>> | POST /groups/{group_id}/members/batch-delete | groups.remove_members | Idempotent | Remove group members |
getMember(groupId: string, username: string, options?: CallOptions): Promise<WithRaw<T.GroupMember>> | GET /groups/{group_id}/members/{username} | groups.member | Query | Get a member |
updateMember( groupId: string, username: string, params?: T.UpdateMemberParams, options?: CallOptions): Promise<WithRaw<T.GroupMemberChange>> | PATCH /groups/{group_id}/members/{username} | groups.update_member | Idempotent | Update a member |
muteMember( groupId: string, username: string, params?: T.GroupsMuteMemberParams, options?: CallOptions): Promise<WithRaw<T.GroupMemberChange>> | PUT /groups/{group_id}/members/{username}/mute | groups.mute_member | Idempotent | Mute a member |
unmuteMember(groupId: string, username: string, options?: CallOptions): Promise<WithRaw<T.GroupMemberChange>> | DELETE /groups/{group_id}/members/{username}/mute | groups.unmute_member | Idempotent | Unmute a member |
setRole( groupId: string, username: string, role: 'admin' | 'member' | (string & {}), options?: CallOptions): Promise<WithRaw<T.GroupMemberChange>> | PUT /groups/{group_id}/members/{username}/role | groups.set_role | Idempotent | Set a member's role |
setMuteAll(groupId: string, on: boolean, options?: CallOptions): Promise<WithRaw<T.GroupChange>> | PUT /groups/{group_id}/mute-all(on=true)DELETE /groups/{group_id}/mute-all(on=false) | groups.mute_allgroups.unmute_all | Idempotent | Turn on mute-all Turn off mute-all |
transferOwner(groupId: string, username: string, options?: CallOptions): Promise<WithRaw<T.GroupChange>> | PUT /groups/{group_id}/owner | groups.transfer_owner | Idempotent | Transfer ownership |
listRequests(groupId: string, params?: T.ListGroupRequestsParams, options?: CallOptions): Promise<Page<T.GroupRequest>> | GET /groups/{group_id}/requests | groups.requests | Query | Query join requests and invitations |
iterRequests(groupId: string, params?: Omit<T.ListGroupRequestsParams, 'cursor'>, options?: IterOptions): AsyncIterable<T.GroupRequest> | Calls GET /groups/{group_id}/requests page by page | groups.requests | Query | Query join requests and invitations |
getInviteSettings(username: string, options?: CallOptions): Promise<WithRaw<T.GroupInviteSettings>> | GET /users/{username}/group-settings | groups.invite_settings | Query | Get a user's group settings |
setInviteSettings( username: string, inviteMode: 'allow_any' | 'need_confirm' | (string & {}) | null, options?: CallOptions): Promise<WithRaw<T.GroupInviteSettings>> | PUT /users/{username}/group-settings | groups.set_invite_settings | Idempotent | Change a user's group settings |
listOfUser(username: string, params?: T.ListOptions, options?: CallOptions): Promise<Page<T.UserGroup>> | GET /users/{username}/groups | groups.of_user | Query | List a user's groups |
iterOfUser(username: string, params?: Omit<T.ListOptions, 'cursor'>, options?: IterOptions): AsyncIterable<T.UserGroup> | Calls GET /users/{username}/groups page by page | groups.of_user | Query | List a user's groups |
Messages client.messages
| Method and signature | REST API | API name | Auto retry | Docs |
|---|---|---|---|---|
send(params: T.SendMessageParams, options?: CallOptions): Promise<WithRaw<T.SendResult>> | POST /messages | messages.send | Idempotency key; no retry when online_only: true | Send a message |
export(params?: T.ExportParams, options?: CallOptions): Promise<ExportPage<T.Message>> | GET /messages | messages.export | Query | Export the app's messages |
iterExport(params?: T.ExportParams, options?: IterOptions): AsyncIterable<T.Message> | Calls GET /messages page by page | messages.export | Query | Export the app's messages |
batchSend(toUsers: readonly string[], params: T.BatchSendParams, options?: CallOptions): Promise<WithRaw<T.BatchSendResult>> | POST /messages/batch | messages.batch_send | Idempotency key | Send in batches |
batchSendAll( toUsers: Iterable<string> | AsyncIterable<string>, params: T.BatchSendParams, options?: CallOptions): Promise<WithRaw<T.BatchSendResult>> | Calls POST /messages/batch in batches | messages.batch_send | Idempotency key | Send in batches |
batchRecall( messageIds: readonly string[], params?: T.MessagesBatchRecallParams, options?: CallOptions): Promise<WithRaw<T.BatchRecallResult>> | POST /messages/batch-recall | messages.batch_recall | Idempotent | Recall in batches |
get(messageId: string, options?: CallOptions): Promise<WithRaw<T.Message>> | GET /messages/{message_id} | messages.get | Query | Query a single message |
edit(messageId: string, params?: T.EditMessageParams, options?: CallOptions): Promise<WithRaw<T.MessageChange>> | PATCH /messages/{message_id} | messages.edit | Idempotent | Edit a message |
pin(messageId: string, params?: T.MessagesPinParams, options?: CallOptions): Promise<WithRaw<T.MessageChange>> | PUT /messages/{message_id}/pin | messages.pin | Idempotent | Pin a message |
unpin(messageId: string, params?: T.MessagesUnpinParams, options?: CallOptions): Promise<WithRaw<T.MessageChange>> | DELETE /messages/{message_id}/pin | messages.unpin | Idempotent | Unpin a message |
recall(messageId: string, params?: T.MessagesRecallParams, options?: CallOptions): Promise<WithRaw<T.MessageChange>> | POST /messages/{message_id}/recall | messages.recall | Idempotent | Recall a message |
listSentBy(username: string, params?: T.SentByParams, options?: CallOptions): Promise<Page<T.Message>> | GET /users/{username}/sent-messages | messages.sent_by | Query | Query a user's sent messages |
iterSentBy(username: string, params?: Omit<T.SentByParams, 'cursor'>, options?: IterOptions): AsyncIterable<T.Message> | Calls GET /users/{username}/sent-messages page by page | messages.sent_by | Query | Query a user's sent messages |
Conversations client.conversations
| Method and signature | REST API | API name | Auto retry | Docs |
|---|---|---|---|---|
get(conversationId: string, options?: CallOptions): Promise<WithRaw<T.ConversationInfo>> | GET /conversations/{conversation_id} | conversations.get | Query | Get conversation info |
listMessages(conversationId: string, params?: T.SeqParams, options?: CallOptions): Promise<SeqPage<T.Message>> | GET /conversations/{conversation_id}/messages | conversations.messages | Query | Fetch a conversation's history |
iterMessages(conversationId: string, params?: T.SeqParams, options?: IterOptions): AsyncIterable<T.Message> | Calls GET /conversations/{conversation_id}/messages page by page | conversations.messages | Query | Fetch a conversation's history |
listPins(conversationId: string, params?: T.ConversationsListPinsParams, options?: CallOptions): Promise<Page<T.Message>> | GET /conversations/{conversation_id}/pins | conversations.pins | Query | List pinned messages in a conversation |
iterPins(conversationId: string, options?: IterOptions): AsyncIterable<T.Message> | Calls GET /conversations/{conversation_id}/pins page by page | conversations.pins | Query | List pinned messages in a conversation |
getSingle(username: string, peer: string, options?: CallOptions): Promise<WithRaw<T.ConversationInfo>> | GET /single-conversations/{username}/{peer} | conversations.single | Query | Get the one-to-one conversation between two users |
listOfUser(username: string, params?: T.ListOptions, options?: CallOptions): Promise<Page<T.ConversationState>> | GET /users/{username}/conversations | conversations.of_user | Query | List a user's conversations |
iterOfUser(username: string, params?: Omit<T.ListOptions, 'cursor'>, options?: IterOptions): AsyncIterable<T.ConversationState> | Calls GET /users/{username}/conversations page by page | conversations.of_user | Query | List a user's conversations |
markAllRead(username: string, options?: CallOptions): Promise<WithRaw<T.MarkAllReadResult>> | POST /users/{username}/conversations/read-all | conversations.mark_all_read | Idempotent | Mark everything as read |
getStateOfUser(username: string, conversationId: string, options?: CallOptions): Promise<WithRaw<T.ConversationState>> | GET /users/{username}/conversations/{conversation_id} | conversations.state_of_user | Query | Get one of a user's conversations |
delete( username: string, conversationId: string, params?: T.ConversationsDeleteParams, options?: CallOptions): Promise<WithRaw<T.ConversationStateChange>> | DELETE /users/{username}/conversations/{conversation_id} | conversations.delete | Idempotent | Delete a conversation |
clear(username: string, conversationId: string, options?: CallOptions): Promise<WithRaw<T.ConversationStateChange>> | POST /users/{username}/conversations/{conversation_id}/clear | conversations.clear | Idempotent | Clear chat history |
deleteMessages( username: string, conversationId: string, seqs: readonly number[], options?: CallOptions): Promise<WithRaw<T.DeleteMessagesResult>> | POST /users/{username}/conversations/{conversation_id}/messages/delete | conversations.delete_messages | Idempotent | Delete messages |
markRead( username: string, conversationId: string, params?: T.ConversationsMarkReadParams, options?: CallOptions): Promise<WithRaw<T.ConversationStateChange>> | POST /users/{username}/conversations/{conversation_id}/read | conversations.mark_read | Idempotent | Mark a conversation as read |
unreadCount(username: string, options?: CallOptions): Promise<WithRaw<T.UnreadCount>> | GET /users/{username}/unread-count | conversations.unread_count | Query | Get a user's total unread count |
Files client.media
| Method and signature | REST API | API name | Auto retry | Docs |
|---|---|---|---|---|
upload(source: UploadSource, params: UploadParams, options?: CallOptions): Promise<MediaFile> | POST /media/uploads, uploading the content, POST /media/uploads/{file_id}/complete | media.create_upload and others | See Uploading and downloading files | Upload files |
resumeUpload(fileId: string, source: UploadSource, params?: ResumeParams, options?: CallOptions): Promise<MediaFile> | GET /media/uploads/{file_id}/parts, uploading missing parts, POST /media/uploads/{file_id}/complete | media.uploaded_parts and others | Idempotent | Upload files |
download(url: string, dest: DownloadTarget, options?: CallOptions): Promise<number> | POST /media/download-urls, then reading from the download address | media.download_urls | Query | Get download addresses |
getDownloadUrls(urls: readonly string[], options?: CallOptions): Promise<WithRaw<T.DownloadURLItem[]>> | POST /media/download-urls | media.download_urls | Query | Get download addresses |
getFile(fileId: string, options?: CallOptions): Promise<WithRaw<T.MediaFile>> | GET /media/files/{file_id} | media.file | Query | Get a file |
deleteFile(fileId: string, options?: CallOptions): Promise<void> | DELETE /media/files/{file_id} | media.delete_file | Idempotent | Delete a file |
listGroupFiles(groupId: string, params?: T.ListOptions, options?: CallOptions): Promise<T.GroupFilesPage> | GET /media/groups/{group_id}/files | media.group_files | Query | List group files |
iterGroupFiles(groupId: string, params?: Omit<T.ListOptions, 'cursor'>, options?: IterOptions): AsyncIterable<T.MediaFile> | Calls GET /media/groups/{group_id}/files page by page | media.group_files | Query | List group files |
createUpload(params: T.CreateUploadParams, options?: CallOptions): Promise<WithRaw<T.UploadSession>> | POST /media/uploads | media.create_upload | No retry | Create an upload |
cancelUpload(fileId: string, options?: CallOptions): Promise<void> | DELETE /media/uploads/{file_id} | media.cancel_upload | Idempotent | Cancel an upload |
completeUpload(fileId: string, options?: CallOptions): Promise<WithRaw<T.MediaFile>> | POST /media/uploads/{file_id}/complete | media.complete_upload | Idempotent | Complete the upload |
getPartUrls(fileId: string, partNumbers: readonly number[], options?: CallOptions): Promise<WithRaw<T.PartURL[]>> | POST /media/uploads/{file_id}/parts | media.part_urls | Query | Get part upload addresses |
listUploadedParts(fileId: string, options?: CallOptions): Promise<WithRaw<T.UploadedPart[]>> | GET /media/uploads/{file_id}/parts | media.uploaded_parts | Query | List uploaded parts |
usage(options?: CallOptions): Promise<WithRaw<T.MediaUsage>> | GET /media/usage | media.usage | Query | Get storage usage |
Push settings client.push
| Method and signature | REST API | API name | Auto retry | Docs |
|---|---|---|---|---|
listDevices(username: string, options?: CallOptions): Promise<WithRaw<T.PushDevice[]>> | GET /users/{username}/push-devices | push.devices | Query | List push devices |
unbindDevice(username: string, sessionId: string, options?: CallOptions): Promise<void> | DELETE /users/{username}/push-devices/{session_id} | push.unbind_device | Idempotent | Unbind a push device |
getSettings(username: string, options?: CallOptions): Promise<WithRaw<T.PushSettings>> | GET /users/{username}/push-settings | push.settings | Query | Get push settings |
updateSettings(username: string, params?: T.UpdatePushSettingsParams, options?: CallOptions): Promise<WithRaw<T.PushSettingsChange>> | PATCH /users/{username}/push-settings | push.update_settings | Idempotent | Update push settings |
listMutes(username: string, params?: T.ListPushMutesParams, options?: CallOptions): Promise<VersionedPage<T.ConversationMute>> | GET /users/{username}/push-settings/conversations | push.mutes | Query | List conversation Do Not Disturb |
iterMutes( username: string, params?: Omit<T.ListPushMutesParams, 'cursor' | 'known_version'>, options?: IterOptions): AsyncIterable<T.ConversationMute> | Calls GET /users/{username}/push-settings/conversations page by page | push.mutes | Query | List conversation Do Not Disturb |
muteGroup( username: string, groupId: string, mode: 'none' | 'mention_only' | (string & {}), params?: T.MuteConversationParams, options?: CallOptions): Promise<WithRaw<T.ConversationMuteChange>> | PUT /users/{username}/push-settings/conversations/group/{group_id} | push.mute_group | Idempotent | Set conversation Do Not Disturb |
unmuteGroup(username: string, groupId: string, options?: CallOptions): Promise<WithRaw<T.ConversationUnmuteChange>> | DELETE /users/{username}/push-settings/conversations/group/{group_id} | push.unmute_group | Idempotent | Remove conversation Do Not Disturb |
muteSingle( username: string, peer: string, mode: 'none' | (string & {}), params?: T.MuteConversationParams, options?: CallOptions): Promise<WithRaw<T.ConversationMuteChange>> | PUT /users/{username}/push-settings/conversations/single/{peer} | push.mute_single | Idempotent | Set conversation Do Not Disturb |
unmuteSingle(username: string, peer: string, options?: CallOptions): Promise<WithRaw<T.ConversationUnmuteChange>> | DELETE /users/{username}/push-settings/conversations/single/{peer} | push.unmute_single | Idempotent | Remove conversation Do Not Disturb |
Chat rooms client.chatrooms
| Method and signature | REST API | API name | Auto retry | Docs |
|---|---|---|---|---|
create(name: string, params?: T.CreateChatroomParams, options?: CallOptions): Promise<WithRaw<T.Chatroom>> | POST /chatrooms | chatrooms.create | No retry | Create a chat room |
list(params?: T.ListChatroomsParams, options?: CallOptions): Promise<Page<T.Chatroom>> | GET /chatrooms | chatrooms.list | Query | List chat rooms |
iter(params?: Omit<T.ListChatroomsParams, 'cursor'>, options?: IterOptions): AsyncIterable<T.Chatroom> | Calls GET /chatrooms page by page | chatrooms.list | Query | List chat rooms |
onlineCounts(roomIds: readonly string[], options?: CallOptions): Promise<WithRaw<T.RoomOnlineCount[]>> | POST /chatrooms/online-counts | chatrooms.online_counts | Query | Get online counts in batches |
get(roomId: string, options?: CallOptions): Promise<WithRaw<T.Chatroom>> | GET /chatrooms/{room_id} | chatrooms.get | Query | Get a chat room |
update(roomId: string, params?: T.UpdateChatroomParams, options?: CallOptions): Promise<WithRaw<T.ChatroomChange>> | PATCH /chatrooms/{room_id} | chatrooms.update | Idempotent | Update a chat room's profile |
delete(roomId: string, options?: CallOptions): Promise<void> | DELETE /chatrooms/{room_id} | chatrooms.delete | Idempotent | Dissolve a chat room |
setAdmin(roomId: string, username: string, options?: CallOptions): Promise<WithRaw<T.RoomAdminChange>> | PUT /chatrooms/{room_id}/admins/{username} | chatrooms.set_admin | Idempotent | Set an admin |
removeAdmin(roomId: string, username: string, options?: CallOptions): Promise<WithRaw<T.RoomAdminChange>> | DELETE /chatrooms/{room_id}/admins/{username} | chatrooms.remove_admin | Idempotent | Remove an admin |
listAllowlist(roomId: string, params?: T.ListOptions, options?: CallOptions): Promise<Page<T.RoomAllowlistEntry>> | GET /chatrooms/{room_id}/allowlist | chatrooms.allowlist | Query | List the allowlist |
iterAllowlist(roomId: string, params?: Omit<T.ListOptions, 'cursor'>, options?: IterOptions): AsyncIterable<T.RoomAllowlistEntry> | Calls GET /chatrooms/{room_id}/allowlist page by page | chatrooms.allowlist | Query | List the allowlist |
addToAllowlist(roomId: string, usernames: readonly string[], options?: CallOptions): Promise<WithRaw<T.RoomBatchResult>> | POST /chatrooms/{room_id}/allowlist | chatrooms.add_to_allowlist | Idempotent | Add to the allowlist |
removeFromAllowlist(roomId: string, usernames: readonly string[], options?: CallOptions): Promise<WithRaw<T.RoomBatchResult>> | POST /chatrooms/{room_id}/allowlist/batch-delete | chatrooms.remove_from_allowlist | Idempotent | Remove from the allowlist |
getAttributes(roomId: string, params?: T.ChatroomsGetAttributesParams, options?: CallOptions): Promise<WithRaw<T.RoomAttributes>> | GET /chatrooms/{room_id}/attributes | chatrooms.attributes | Query | Get chat room attributes |
setAttributes( roomId: string, attributes: Readonly<Record<string, string>>, options?: CallOptions): Promise<WithRaw<T.RoomAttributesChange>> | PUT /chatrooms/{room_id}/attributes | chatrooms.set_attributes | Idempotent | Set chat room attributes |
removeAttributes(roomId: string, keys: readonly string[], options?: CallOptions): Promise<WithRaw<T.RoomAttributesChange>> | POST /chatrooms/{room_id}/attributes/batch-delete | chatrooms.remove_attributes | Idempotent | Delete chat room attributes |
listBans(roomId: string, params?: T.ListOptions, options?: CallOptions): Promise<Page<T.RoomBan>> | GET /chatrooms/{room_id}/bans | chatrooms.bans | Query | List bans |
iterBans(roomId: string, params?: Omit<T.ListOptions, 'cursor'>, options?: IterOptions): AsyncIterable<T.RoomBan> | Calls GET /chatrooms/{room_id}/bans page by page | chatrooms.bans | Query | List bans |
ban( roomId: string, usernames: readonly string[], params?: T.RoomPenaltyParams, options?: CallOptions): Promise<WithRaw<T.RoomBatchResult>> | POST /chatrooms/{room_id}/bans | chatrooms.ban | Idempotent | Ban users |
unban(roomId: string, usernames: readonly string[], options?: CallOptions): Promise<WithRaw<T.RoomBatchResult>> | POST /chatrooms/{room_id}/bans/batch-delete | chatrooms.unban | Idempotent | Unban users |
disable(roomId: string, params?: T.ChatroomsDisableParams, options?: CallOptions): Promise<WithRaw<T.ChatroomChange>> | POST /chatrooms/{room_id}/disable | chatrooms.disable | Idempotent | Ban a chat room |
enable(roomId: string, options?: CallOptions): Promise<WithRaw<T.ChatroomChange>> | POST /chatrooms/{room_id}/enable | chatrooms.enable | Idempotent | Unban a chat room |
listMembers(roomId: string, params?: T.ListOptions, options?: CallOptions): Promise<Page<T.RoomMember>> | GET /chatrooms/{room_id}/members | chatrooms.members | Query | List chat room members |
iterMembers(roomId: string, params?: Omit<T.ListOptions, 'cursor'>, options?: IterOptions): AsyncIterable<T.RoomMember> | Calls GET /chatrooms/{room_id}/members page by page | chatrooms.members | Query | List chat room members |
kick(roomId: string, usernames: readonly string[], options?: CallOptions): Promise<WithRaw<T.RoomBatchResult>> | POST /chatrooms/{room_id}/members/batch-delete | chatrooms.kick | Idempotent | Remove chat room members |
getMember(roomId: string, username: string, options?: CallOptions): Promise<WithRaw<T.RoomMemberState>> | GET /chatrooms/{room_id}/members/{username} | chatrooms.member | Query | Check whether a user is in the room |
send(roomId: string, params: T.SendRoomMessageParams, options?: CallOptions): Promise<WithRaw<T.RoomSendResult>> | POST /chatrooms/{room_id}/messages | chatrooms.send | Idempotency key; no retry when priority: 'low' | Send a chat room message |
listRecentMessages( roomId: string, params?: T.ChatroomsListRecentMessagesParams, options?: CallOptions): Promise<WithRaw<T.RoomMessage[]>> | GET /chatrooms/{room_id}/messages | chatrooms.recent_messages | Query | Query recent messages |
recall(roomId: string, messageId: string, params?: T.ChatroomsRecallParams, options?: CallOptions): Promise<WithRaw<T.RoomRecallResult>> | POST /chatrooms/{room_id}/messages/{message_id}/recall | chatrooms.recall | Idempotent | Recall a chat room message |
setMuteAll(roomId: string, on: boolean, options?: CallOptions): Promise<WithRaw<T.ChatroomChange>> | PUT /chatrooms/{room_id}/mute-all(on=true)DELETE /chatrooms/{room_id}/mute-all(on=false) | chatrooms.mute_allchatrooms.unmute_all | Idempotent | Turn on mute-all Turn off mute-all |
listMutes(roomId: string, params?: T.ListOptions, options?: CallOptions): Promise<Page<T.RoomMute>> | GET /chatrooms/{room_id}/mutes | chatrooms.mutes | Query | List mutes |
iterMutes(roomId: string, params?: Omit<T.ListOptions, 'cursor'>, options?: IterOptions): AsyncIterable<T.RoomMute> | Calls GET /chatrooms/{room_id}/mutes page by page | chatrooms.mutes | Query | List mutes |
mute( roomId: string, usernames: readonly string[], params?: T.RoomPenaltyParams, options?: CallOptions): Promise<WithRaw<T.RoomBatchResult>> | POST /chatrooms/{room_id}/mutes | chatrooms.mute | Idempotent | Mute users |
unmute(roomId: string, usernames: readonly string[], options?: CallOptions): Promise<WithRaw<T.RoomBatchResult>> | POST /chatrooms/{room_id}/mutes/batch-delete | chatrooms.unmute | Idempotent | Unmute users |
transferOwner(roomId: string, username: string | null, options?: CallOptions): Promise<WithRaw<T.ChatroomChange>> | PUT /chatrooms/{room_id}/owner | chatrooms.transfer_owner | Idempotent | Transfer ownership |
Content moderation client.moderation
| Method and signature | REST API | API name | Auto retry | Docs |
|---|---|---|---|---|
processPending(handle: PendingHandler, params?: ProcessPendingParams, options?: CallOptions): Promise<number> | GET /moderation/items, GET /moderation/items/{item_id}/content, POST /moderation/items/{item_id}/decide | moderation.items and others | Decisions carry version, so retrying is safe | Review items and violations |
getConfig(options?: CallOptions): Promise<WithRaw<T.ModerationConfig>> | GET /moderation/config | moderation.config | Query | Get moderation config |
updateConfig(params?: T.UpdateModerationConfigParams, options?: CallOptions): Promise<WithRaw<T.ModerationConfig>> | PATCH /moderation/config | moderation.update_config | Idempotent | Update moderation config |
listItems(params?: T.ListItemsParams, options?: CallOptions): Promise<Page<T.ModerationItem>> | GET /moderation/items | moderation.items | Query | List review items |
iterItems(params?: Omit<T.ListItemsParams, 'cursor'>, options?: IterOptions): AsyncIterable<T.ModerationItem> | Calls GET /moderation/items page by page | moderation.items | Query | List review items |
batchDecide(itemIds: readonly string[], params: T.BatchDecideParams, options?: CallOptions): Promise<WithRaw<T.BatchDecideResult>> | POST /moderation/items/batch-decide | moderation.batch_decide | Idempotent | Batch decide |
getItem(itemId: string, options?: CallOptions): Promise<WithRaw<T.ModerationItem>> | GET /moderation/items/{item_id} | moderation.item | Query | Get a review item |
getItemContent(itemId: string, options?: CallOptions): Promise<WithRaw<T.ItemContent>> | GET /moderation/items/{item_id}/content | moderation.item_content | Query | Read an item's content |
decide(itemId: string, params: T.DecideParams, options?: CallOptions): Promise<WithRaw<T.ModerationItem>> | POST /moderation/items/{item_id}/decide | moderation.decide | Idempotent; no retry with actions but no version | Decide |
escalate(itemId: string, params?: T.ModerationEscalateParams, options?: CallOptions): Promise<WithRaw<T.ModerationItem>> | POST /moderation/items/{item_id}/escalate | moderation.escalate | No retry | Escalate to the platform |
listPlatformActions(params?: T.ListOptions, options?: CallOptions): Promise<Page<T.PlatformAction>> | GET /moderation/platform-actions | moderation.platform_actions | Query | List platform actions |
iterPlatformActions(params?: Omit<T.ListOptions, 'cursor'>, options?: IterOptions): AsyncIterable<T.PlatformAction> | Calls GET /moderation/platform-actions page by page | moderation.platform_actions | Query | List platform actions |
report(params: T.ReportParams, options?: CallOptions): Promise<WithRaw<T.ReportResult>> | POST /moderation/reports | moderation.report | Idempotent | Report on a user's behalf |
stats(params: T.ModerationStatsParams, options?: CallOptions): Promise<WithRaw<T.ModerationStats>> | GET /moderation/stats | moderation.stats | Query | Get statistics |
checkText( scene: | 'message' | 'chatroom_message' | 'user_profile' | 'group_profile' | 'group_member' | 'group_request' | 'friend_request' | 'chatroom_profile' | 'chatroom_attribute' | 'media_upload' | (string & {}), params?: T.CheckTextParams, options?: CallOptions): Promise<WithRaw<T.TextCheckResult>> | POST /moderation/text-check | moderation.check_text | Query | Check text |
listViolations(username: string, params?: T.ListOptions, options?: CallOptions): Promise<T.ViolationsPage> | GET /moderation/users/{username}/violations | moderation.violations | Query | Get a user's violations |
iterViolations(username: string, params?: Omit<T.ListOptions, 'cursor'>, options?: IterOptions): AsyncIterable<T.Violation> | Calls GET /moderation/users/{username}/violations page by page | moderation.violations | Query | Get a user's violations |
clearViolations(username: string, params?: T.ModerationClearViolationsParams, options?: CallOptions): Promise<number> | DELETE /moderation/users/{username}/violations | moderation.clear_violations | Idempotent | Clear a user's violations |
listWordLists(options?: CallOptions): Promise<WithRaw<T.WordList[]>> | GET /moderation/word-lists | moderation.word_lists | Query | List word lists |
createWordList(name: string, params?: T.CreateWordListParams, options?: CallOptions): Promise<WithRaw<T.WordList>> | POST /moderation/word-lists | moderation.create_word_list | No retry | Create a word list |
getWordList(listId: string, options?: CallOptions): Promise<WithRaw<T.WordList>> | GET /moderation/word-lists/{list_id} | moderation.word_list | Query | Get a word list |
updateWordList(listId: string, params?: T.UpdateWordListParams, options?: CallOptions): Promise<WithRaw<T.WordList>> | PATCH /moderation/word-lists/{list_id} | moderation.update_word_list | Idempotent | Update a word list |
deleteWordList(listId: string, options?: CallOptions): Promise<void> | DELETE /moderation/word-lists/{list_id} | moderation.delete_word_list | Idempotent | Delete a word list |
listWords(listId: string, params?: T.ListWordsParams, options?: CallOptions): Promise<Page<T.Word>> | GET /moderation/word-lists/{list_id}/words | moderation.words | Query | List words |
iterWords(listId: string, params?: Omit<T.ListWordsParams, 'cursor'>, options?: IterOptions): AsyncIterable<T.Word> | Calls GET /moderation/word-lists/{list_id}/words page by page | moderation.words | Query | List words |
addWords(listId: string, words: readonly string[], options?: CallOptions): Promise<WithRaw<T.AddWordsResult>> | POST /moderation/word-lists/{list_id}/words/batch | moderation.add_words | Idempotent | Add words |
removeWords(listId: string, words: readonly string[], options?: CallOptions): Promise<number> | POST /moderation/word-lists/{list_id}/words/batch-delete | moderation.remove_words | Idempotent | Delete words |
Calls client.calls
| Method and signature | REST API | API name | Auto retry | Docs |
|---|---|---|---|---|
list(params?: T.ListCallsParams, options?: CallOptions): Promise<Page<T.Call>> | GET /calls | calls.list | Query | List calls |
iter(params?: Omit<T.ListCallsParams, 'cursor'>, options?: IterOptions): AsyncIterable<T.Call> | Calls GET /calls page by page | calls.list | Query | List calls |
get(callId: string, options?: CallOptions): Promise<WithRaw<T.Call>> | GET /calls/{call_id} | calls.get | Query | Get call details |
end(callId: string, params?: T.CallsEndParams, options?: CallOptions): Promise<WithRaw<T.CallChange>> | POST /calls/{call_id}/end | calls.end | Idempotent | End a call |
removeMember( callId: string, username: string, params?: T.CallsRemoveMemberParams, options?: CallOptions): Promise<WithRaw<T.CallChange>> | POST /calls/{call_id}/members/{username}/remove | calls.remove_member | Idempotent | Remove a member from a call |
stats(from: string, to: string, options?: CallOptions): Promise<WithRaw<T.CallDayStats[]>> | GET /rtc/stats | calls.stats | Query | Get call statistics |
getActiveCall(username: string, options?: CallOptions): Promise<WithRaw<T.ActiveCalls>> | GET /users/{username}/calls/active | calls.active_of | Query | Get a user's ongoing calls |
Presence client.presence
| Method and signature | REST API | API name | Auto retry | Docs |
|---|---|---|---|---|
query(usernames: readonly string[], options?: CallOptions): Promise<WithRaw<T.Presence[]>> | POST /presence/query | presence.query | Query | Query presence in batches |
get(username: string, options?: CallOptions): Promise<WithRaw<T.Presence>> | GET /users/{username}/presence | presence.get | Query | Get a user's presence |
Parameters of the file helpers
In client.media.upload(source, params, options?), source is an UploadSource and params an UploadParams, returning a MediaFile. resumeUpload(fileId, source, params?, options?) takes ResumeParams and resumes a still-valid upload session. In download(url, dest, options?), the destination is a DownloadTarget, and it returns the number of bytes written. For parameters and source limits, see Uploading and downloading files. The stats API names for upload and download are media.upload and media.download.
Moderation helper
client.moderation.processPending(handle, params?, options?): Promise<number> reads pending moderation items one by one, calls the PendingHandler and submits decisions, returning how many were submitted. params is { scene?, limit?, stopOnError? }; the handler receives (item, content, { signal }) and returns a Decision, null or undefined, or a Promise of one. Decision has decision, actions?, count_violation? and note?; see Moderation review. The stats API name is moderation.process_pending.
Client management methods
| Method or property | Description |
|---|---|
withOptions(options) | Creates a view with different options that shares state |
updateCredentials(clientId, clientSecret) | Updates the app credentials |
token(options?): Promise<string> | Gets the currently valid token; options can pass signal. Never log the return value |
appId | null before the first token fetch, then the app ID |
stats(): Stats | Gets per-API stats for requests, failures, retries and rate-limit waits |
close(): Promise<void> | Closes the client; a view's close doesn't close the original client |
For client config, see Installation and creating the client. For the callback handler and framework adapters, see Receiving callbacks.
Standalone RTC channels: client.channels
This service only manages channels; it doesn't join audio and video for users. For parameters and responses, see the channel REST API. APIs in the table omit the app prefix.
| Method and signature | REST API | API name | Auto retry |
|---|---|---|---|
stats(params: T.RTCChannelStatsParams, options?: CallOptions): Promise<WithRaw<T.RTCChannelStatsResult>> | GET /rtc/channel-stats | channels.stats | Query |
usageAdjustments(params?: T.RTCChannelUsageAdjustmentsParams, options?: CallOptions): Promise<WithRaw<T.RTCChannelAdjustmentPage>> | GET /rtc/channel-usage-adjustments | channels.usage_adjustments | Query |
list(params?: T.RTCChannelListParams, options?: CallOptions): Promise<WithRaw<T.RTCChannelPage>> | GET /rtc/channels | channels.list | Query |
get(channelId: string, options?: CallOptions): Promise<WithRaw<T.RTCChannelResult>> | GET /rtc/channels/{channel_id} | channels.get | Query |
create(channelId: string, params: T.RTCChannelCreateParams, options?: CallOptions): Promise<WithRaw<T.RTCChannelCreateResult>> | PUT /rtc/channels/{channel_id} | channels.create | Fixed idempotency key |
update(channelId: string, params: T.RTCChannelUpdateParams, options?: CallOptions): Promise<WithRaw<T.RTCChannelResult>> | PATCH /rtc/channels/{channel_id} | channels.update | Idempotent |
bans(channelId: string, params?: T.RTCChannelBansParams, options?: CallOptions): Promise<WithRaw<T.RTCChannelBanPage>> | GET /rtc/channels/{channel_id}/bans | channels.bans | Query |
getBan(channelId: string, username: string, options?: CallOptions): Promise<WithRaw<T.RTCChannelBanResult>> | GET /rtc/channels/{channel_id}/bans/{username} | channels.get_ban | Query |
ban(channelId: string, username: string, params: T.RTCChannelBanParams, options?: CallOptions): Promise<WithRaw<T.RTCChannelBanCreateResult>> | PUT /rtc/channels/{channel_id}/bans/{username} | channels.ban | Idempotent |
unban(channelId: string, username: string, params: T.RTCChannelUnbanParams, options?: CallOptions): Promise<WithRaw<T.RTCChannelBanResult>> | DELETE /rtc/channels/{channel_id}/bans/{username} | channels.unban | Idempotent |
close(channelId: string, params: T.RTCChannelCloseParams, options?: CallOptions): Promise<WithRaw<T.RTCChannelCloseResult>> | POST /rtc/channels/{channel_id}/close | channels.close | Idempotent |
removeMember(channelId: string, username: string, params: T.RTCChannelRemoveMemberParams, options?: CallOptions): Promise<WithRaw<T.RTCChannelRemoveResult>> | POST /rtc/channels/{channel_id}/members/{username}/remove | channels.remove_member | Fixed idempotency key |
sessions(channelId: string, params?: T.RTCChannelSessionsParams, options?: CallOptions): Promise<WithRaw<T.RTCChannelSessionPage>> | GET /rtc/channels/{channel_id}/sessions | channels.sessions | Query |
issueTickets(channelId: string, params: T.RTCChannelIssueTicketsParams, options?: CallOptions): Promise<WithRaw<T.RTCChannelTicketsResult>> | POST /rtc/channels/{channel_id}/tickets | channels.issue_tickets | No retry |
revokeTickets(channelId: string, params: T.RTCChannelRevokeTicketsParams, options?: CallOptions): Promise<WithRaw<T.RTCChannelRevokeResult>> | POST /rtc/channels/{channel_id}/tickets/revoke | channels.revoke_tickets | Fixed idempotency key |
Results are dedicated types for channels, sessions, tickets, bans, stats and usage adjustments, keeping the raw data. In the create result, created means the server returned 201 (created); in close and remove results, pending means it returned 202 (in progress). These aren't fields in the response body. next_cursor on the last page, ban when there's no ban, and expiry times that can be cleared all keep null.
Channel list methods return one page; page through with next_cursor yourself. There's no iter method like the one for calls (calls). expires_at distinguishes three states: not sent, null (clear) and a value. Issuing tickets isn't retried automatically; removing members and revoking tickets use a fixed operation_id.
Game rooms: im.game
Create rooms, issue join tickets, start, close, remove players and query. For usage see Calling the API.
| Method and signature | REST API | Operation | Retried | Docs |
|---|---|---|---|---|
listRegions(options?: CallOptions): Promise<WithRaw<T.GameRegion[]>> | GET /game/regions | game.list_regions | Query | List regions |
createRoom(roomId: string, params?: T.CreateGameRoomParams, options?: CallOptions): Promise<WithRaw<T.GameCreateRoomResult>> | PUT /game/rooms/{room_id} | game.create_room | Idempotent | Create a room |
issueTickets(roomId: string, params: T.IssueGameTicketsParams, options?: CallOptions): Promise<WithRaw<T.GameTicket[]>> | POST /game/rooms/{room_id}/tickets | game.issue_tickets | No retry | Issue join tickets |
startRoom(roomId: string, options?: CallOptions): Promise<WithRaw<T.GameRoom>> | POST /game/rooms/{room_id}/start | game.start_room | Idempotent | Start |
closeRoom(roomId: string, params?: T.CloseGameRoomParams, options?: CallOptions): Promise<WithRaw<T.GameCloseRoomResult>> | POST /game/rooms/{room_id}/close | game.close_room | Idempotent | Close a room |
removeMember(roomId: string, username: string, params?: T.RemoveGameMemberParams, options?: CallOptions): Promise<WithRaw<T.GameRemoveMemberResult>> | POST /game/rooms/{room_id}/members/{username}/remove | game.remove_member | Idempotency key | Remove a player |
getRoom(roomId: string, options?: CallOptions): Promise<WithRaw<T.GameRoom>> | GET /game/rooms/{room_id} | game.get_room | Query | Get a room |
listRooms(params?: T.ListGameRoomsParams, options?: CallOptions): Promise<Page<T.GameRoom>> | GET /game/rooms | game.list_rooms | Query | List rooms |
iterRooms(params?: Omit<T.ListGameRoomsParams, 'cursor'>, options?: IterOptions): AsyncIterable<T.GameRoom> | Pages through GET /game/rooms | game.list_rooms | Query | List rooms |
listMembers(roomId: string, options?: CallOptions): Promise<WithRaw<T.GameMember[]>> | GET /game/rooms/{room_id}/members | game.list_members | Query | List members |
created, accepted and removed in the results come from the status code (true for 201 and 202); they are not fields of the response body. When operation_id is omitted, removeMember generates one and keeps it across retries.
AI conversations: im.ai
Low-level APIs for bot management and streaming replies. Replies usually start with startStream, whose stream object handles batching, continuous writes and retries; see Calling the API. streamStopped stops the stream in this process when ai.stream_stopped arrives (the callback handler calls it for you).
| Method | REST API | API name | Docs |
|---|---|---|---|
createBot | POST /ai/bots | ai.create_bot | Create a bot |
listBots / iterBots | GET /ai/bots | ai.list_bots | List bots |
getBot | GET /ai/bots/{username} | ai.get_bot | Get a bot |
updateBot | PATCH /ai/bots/{username} | ai.update_bot | Update a bot |
disableBot | POST /ai/bots/{username}/disable | ai.disable_bot | Disable and enable |
enableBot | POST /ai/bots/{username}/enable | ai.enable_bot | Disable and enable |
deleteBot | DELETE /ai/bots/{username} | ai.delete_bot | Delete a bot |
createStream | POST /ai/streams | ai.create_stream | Start a reply |
getStream | GET /ai/streams/{stream_id} | ai.get_stream | Get a stream |
writeDeltas | POST /ai/streams/{stream_id}/deltas:batch | ai.write_deltas | Batch write |
finishStream | POST /ai/streams/{stream_id}/finish | ai.finish_stream | Finish a reply |
failStream | POST /ai/streams/{stream_id}/fail | ai.fail_stream | Report a failure |
