API Reference
Chat
- GET
/chat-roomsList chat roomsList the chat rooms the authenticated user belongs to, including unread counts and the latest message. - GET
/chat-rooms/:idChat room detailRetrieve a chat room and its members. Only room members can access it. - POST
/chat-roomsCreate chat roomCreate a chat room. With two members (including yourself) it becomes a DIRECT room, otherwise a GROUP room. For DIRECT rooms an existing room is returned if one already exists. initialMessage is optional; passing it also creates the first message. A system message recording the creation is always added to a newly created room, whether or not initialMessage is given (not when an existing DIRECT room is returned). - PUT
/chat-rooms/:idRename chat roomRename a group chat. Only joined members can rename it. Direct messages (whose display name is derived from the participants) and event/community chats (which use their own name) cannot be renamed. Sending an empty string clears the name. - GET
/chat-rooms/:id/membersList chat room membersList a chat room's members with pagination. Includes members in the JOINED and INVITED states. Only rooms the authenticated user belongs to can be read. - POST
/chat-rooms/:id/membersInvite chat room membersInvite users to a chat room. Invitees enter the INVITED state and can join or decline. Only members in the JOINED state can invite. - DELETE
/chat-rooms/:id/members/:memberIdRemove a chat room memberRemove a member from a chat room. Only members in the JOINED state can remove others, and you cannot remove yourself (use leave instead). Not available for event or community chats. - GET
/chat-rooms/:id/mention-candidatesList mention candidatesList the people who can be @mentioned. Only users returned here are accepted in the mentions field when sending a message (the server applies the same check). For community chats the set is the approved community members, which differs from the members endpoint (ChatRoomMember rows). Event chats do not support mentions and always return an empty array. There is no pagination: results are capped by limit, so narrow them with q. - PUT
/chat-rooms/:id/joinJoin a chat roomAccept an invitation and join the chat room (INVITED → JOINED). - PUT
/chat-rooms/:id/declineDecline a chat room invitationDecline an invitation to a chat room. The membership record is deleted, so the room no longer appears in your list; you can join again if you are re-invited. - PUT
/chat-rooms/:id/leaveLeave a chat roomLeave a chat room (JOINED → LEFT). The membership record is retained with the LEFT status. - GET
/chat-rooms/:roomId/messagesList messagesList the room's messages using cursor-based pagination. Only room members can access it. - POST
/chat-rooms/:roomId/messagesSend a messagePost a message to a chat room. Send `content` as JSON for a text message, or a `file` as multipart/form-data for an image message. Only room members can post. - DELETE
/chat-rooms/:roomId/messages/:messageIdDelete a messageSoft-delete a message you sent. Deleted messages are excluded from listings, unread counts and the image list. Deleting an already deleted message succeeds. - GET
/chat-rooms/:roomId/messages/:messageId/reactionsList who reactedList the reactions on a message together with the users who added them. The message list only includes userIds, so use this endpoint when you need to show who reacted. - POST
/chat-rooms/:roomId/messages/:messageId/reactionsAdd a reactionAdd an emoji reaction to a message. One user can add several different emojis. Sending the same emoji twice does not add a duplicate (idempotent). Only emojis from a fixed allow list are accepted. - DELETE
/chat-rooms/:roomId/messages/:messageId/reactionsRemove a reactionRemove your own reaction. Succeeds even if you had not reacted (idempotent). The emoji is passed as a query parameter. - GET
/chat-rooms/:roomId/imagesList room imagesList images uploaded to the chat room, newest first. Images from deleted messages are excluded. - PUT
/chat-rooms/:roomId/notificationsToggle room notificationsTurn notifications (push, in-app and email) on or off for this chat room. Unread counts are unaffected — the badge still increases, you just are not notified. The current value is available as notificationsEnabled on your member entry in the room detail response. - GET
/chat-rooms/:roomId/filesList filesList the chat room's file library. Folders and files are returned in a single items array sorted by name regardless of type, together with breadcrumbs. Omit folderId for the root. There is no pagination: the whole contents of the folder are returned. - POST
/chat-rooms/:roomId/filesRegister an uploaded fileRegister a file that was PUT to S3. The server verifies the real size and rejects anything over 10MB. If a file with the same name exists in the folder, it is numbered as "report (2).pdf". Set postToChat to true to also post it to the chat. - PUT
/chat-rooms/:roomId/files/:fileIdRename or move a fileRename a file and/or move it to another folder. If the destination already has a file with that name, the name is numbered. - DELETE
/chat-rooms/:roomId/files/:fileIdDelete a fileSoft-delete a file you uploaded. Deleting an already deleted file succeeds. - POST
/chat-rooms/:roomId/files/upload-urlCreate an upload URLFiles are uploaded straight to S3, not through the API. PUT the file to the returned uploadUrl with exactly the requiredHeaders. Do not add an Authorization header (it breaks the signature). Register the upload afterwards with POST /chat-rooms/:roomId/files. The limit is 10MB. - GET
/chat-rooms/:roomId/files/:fileId/urlCreate a download URLFiles are private, so fetch a short-lived URL each time. disposition=inline is honoured only for allowed types such as PDF; anything else is forced to attachment. The URL carries the file name, so opening it as a link downloads the file. - GET
/chat-rooms/:roomId/foldersList foldersList every folder in the room as a flat array without pagination. Use it to build a tree for destination pickers. - POST
/chat-rooms/:roomId/foldersCreate a folderCreate a folder. Folders can nest up to 10 levels. Two folders in the same parent cannot share a name (unlike files, folders are not numbered). - PUT
/chat-rooms/:roomId/folders/:folderIdRename or move a folderRename a folder and/or move it. A folder cannot be moved into itself or one of its descendants, and a move that would exceed 10 levels is rejected. - DELETE
/chat-rooms/:roomId/folders/:folderIdDelete a folderSoft-delete a folder together with its files and subfolders. Only the creator can delete it, and the request is rejected if it contains files uploaded by others. The returned counts can be used in a confirmation dialog. - PUT
/chat-rooms/:roomId/readMark messages as readMark the room's messages as read, resetting the unread count to zero.