Skip to content

RoomService

Chatto exposes this service below /api/connect.

Shared message and enum definitions are documented in Shared Types And Enums.

Manages room-scoped operations for the current user.

RoomService owns operations whose authorization and state are primarily scoped to one room, including lifecycle, membership, moderation, room timeline reads, room read state, attachments, and live typing. Resource-specific services should still be preferred when an operation is not naturally room-scoped or when the resource needs an independent CRUD/batch surface.

Creates a new channel room in a room group. The caller must be allowed to create rooms in the target group.

POST /api/connect/chatto.api.v1.RoomService/CreateRoom

Request to create a channel room.

FieldTypeDescription
namestringRequired. Name of the new channel room.
descriptionstringOptional room description.
group_idstringRequired. Room group that should contain the new channel.
universalboolWhether the new channel should grant effective membership to eligible server members.

Result of creating a room.

FieldTypeDescription
roomRoomCreated room.

Updates a room’s editable metadata. The caller must be allowed to manage rooms. Direct-message rooms cannot be universal.

POST /api/connect/chatto.api.v1.RoomService/UpdateRoom

Request to update a room’s editable metadata.

FieldTypeDescription
room_idstringRequired. Room to update.
nameoptional stringNew room name, when changing it.
descriptionoptional stringNew room description, when changing it. Empty clears the description.
universaloptional boolNew universal membership state, when changing it. Direct-message rooms cannot be universal.

Result of updating a room.

FieldTypeDescription
roomRoomUpdated room.

Archives a room so it is hidden from active room lists. The caller must be allowed to manage rooms.

POST /api/connect/chatto.api.v1.RoomService/ArchiveRoom

Request to archive a room.

FieldTypeDescription
room_idstringRequired. Room to archive.

Result of archiving a room.

FieldTypeDescription
roomRoomArchived room.

Restores an archived room to active room lists. The caller must be allowed to manage rooms.

POST /api/connect/chatto.api.v1.RoomService/UnarchiveRoom

Request to unarchive a room.

FieldTypeDescription
room_idstringRequired. Room to unarchive.

Result of unarchiving a room.

FieldTypeDescription
roomRoomUnarchived room.

Joins the room as the current user when room permissions allow it.

POST /api/connect/chatto.api.v1.RoomService/JoinRoom

Request to join a room as the current user.

FieldTypeDescription
room_idstringRequired. Room to join.

Result of joining a room.

FieldTypeDescription
roomRoomJoined room.

Joins every unarchived room in a group that the current user can join. Already-joined and non-joinable rooms are skipped.

POST /api/connect/chatto.api.v1.RoomService/JoinRoomGroup

Request to join all joinable rooms in one room group.

FieldTypeDescription
group_idstringRequired. Room group whose rooms should be joined.

Result of joining all joinable rooms in one room group.

FieldTypeDescription
joined_room_idsrepeated stringRoom IDs that transitioned from not joined to joined.

Starts or fetches a direct-message room for the current user and the requested participant set. The caller must be allowed to start DMs.

POST /api/connect/chatto.api.v1.RoomService/StartDM

Request to start or fetch a direct-message room.

FieldTypeDescription
participant_idsrepeated stringOther participants to include in the direct-message room. The current user is always included by the server. An empty list creates or fetches the caller’s self-DM.

Result of starting or fetching a direct-message room.

FieldTypeDescription
roomRoomDirect-message room for the participant set.

Leaves the room as the current user. Direct-message and universal rooms cannot be left.

POST /api/connect/chatto.api.v1.RoomService/LeaveRoom

Request to leave a room as the current user.

FieldTypeDescription
room_idstringRequired. Room to leave.

Result of leaving a room.

FieldTypeDescription
leftboolTrue when the current user is no longer an explicit member after the call.

Lists explicit members of a room. The caller must be a member of the room.

POST /api/connect/chatto.api.v1.RoomService/ListMembers

Request for members of one room.

FieldTypeDescription
room_idstringRequired. Room whose explicit members should be listed.
searchstringOptional case-insensitive search against login and display name.
pagePageRequestPage request. Defaults to 20 results when absent or limit is zero.

Room member page.

FieldTypeDescription
membersrepeated DirectoryMemberMembers in the requested page.
pagePageInfoPage metadata.

Gets one explicit member of a room. The caller must be a member of the room. Returns NOT_FOUND when the target is unknown or not a room member.

POST /api/connect/chatto.api.v1.RoomService/GetMember

Request one member of one room by stable user ID.

FieldTypeDescription
room_idstringRequired room ID.
user_idstringRequired target user ID.

Room member response.

FieldTypeDescription
memberDirectoryMemberRequested room member.

Gets explicit room member rows for multiple users. The caller must be a member of the room.

POST /api/connect/chatto.api.v1.RoomService/BatchGetMembers

Request room member rows for a set of stable user IDs.

FieldTypeDescription
room_idstringRequired room ID.
user_idsrepeated stringRequired target user IDs. Unknown IDs and users that are not members of the room are omitted from the response.

Batch room member response.

FieldTypeDescription
membersrepeated DirectoryMemberFound members. The server preserves first-seen request order and de-duplicates repeated IDs.

Adds a user as an explicit member of a channel room. The caller must be allowed to manage the room. Direct-message and universal rooms cannot be managed this way.

POST /api/connect/chatto.api.v1.RoomService/AddMember

Request to add a user to a channel room.

FieldTypeDescription
room_idstringRequired. Channel room to add the user to.
user_idstringRequired. User to add as an explicit room member.

Result of adding a user to a room.

FieldTypeDescription
memberDirectoryMemberAdded room member.

Removes a user from a channel room’s explicit members. The caller must be allowed to manage the room. Direct-message and universal rooms cannot be managed this way.

POST /api/connect/chatto.api.v1.RoomService/RemoveMember

Request to remove a user from a channel room.

FieldTypeDescription
room_idstringRequired. Channel room to remove the user from.
user_idstringRequired. User to remove from the room’s explicit members.

Result of removing a user from a room.

FieldTypeDescription
removedboolTrue when an explicit room membership was removed by this call.

Lists active channel room bans. The caller must be allowed to moderate room membership bans.

POST /api/connect/chatto.api.v1.RoomService/ListBans

Request to list active room bans.

FieldTypeDescription
room_idstringOptional channel room filter. Empty lists active bans across all rooms.
pagePageRequestPage request. Defaults are applied when absent or limit is zero.

Active room bans visible to the current moderator.

FieldTypeDescription
bansrepeated RoomBanActive bans, newest first.
pagePageInfoPage metadata.

Lists current message-owned room attachments. Authentication and room membership are required. Returns PERMISSION_DENIED when the room is inaccessible to the caller.

POST /api/connect/chatto.api.v1.RoomService/ListRoomAttachments

Request for room-scoped attachment list pages.

FieldTypeDescription
room_idstringRequired room ID.
thumbnailImageTransformOptionsThumbnail URL options. Defaults are applied when absent.
pagePageRequestPage request. Defaults are applied when absent or limit is zero.

Room-scoped attachment list response.

FieldTypeDescription
attachmentsrepeated RoomAttachmentListItemCurrent attachments in newest message order.
pagePageInfoPage metadata.

Refreshes the current user’s live-only typing indicator for a room or thread. Room membership is required; message posting permission is not.

POST /api/connect/chatto.api.v1.RoomService/UpdateTypingIndicator

Request to refresh the current user’s live-only typing indicator.

FieldTypeDescription
room_idstringRequired. Room where the current user is typing.
thread_root_event_idstringEvent ID of the thread root when typing inside a thread.

Result of refreshing a typing indicator.

FieldTypeDescription
updatedboolTrue when the typing indicator was accepted for publish.

Returns one page of room timeline events, including related user data needed to render the page.

POST /api/connect/chatto.api.v1.RoomService/GetRoomEvents

Request for a page of room timeline events.

Omit the cursor to load the initial page. Set before to a previously returned start_cursor to page toward older events, or after to a previously returned end_cursor to page toward newer events.

FieldTypeDescription
room_idstringRequired. Room whose timeline should be loaded.
limitint32Maximum number of events to return. The server may clamp very large limits.
cursor.beforestringReturn events older than this opaque cursor.
cursor.afterstringReturn events newer than this opaque cursor.

Response containing one room timeline page.

FieldTypeDescription
pageRoomTimelinePageLoaded timeline page.

Returns a room timeline window centered around a specific event. Use this to open a permalink, search result, or notification target in context. Returns NOT_FOUND when the anchor event is missing or not visible in the room timeline and PERMISSION_DENIED when the room is inaccessible.

POST /api/connect/chatto.api.v1.RoomService/GetRoomEventsAround

Request for room timeline events around a specific event.

Use this when a client needs to jump to a known event and render enough context around it.

FieldTypeDescription
room_idstringRequired. Room whose timeline should be loaded.
event_idstringRequired. Anchor event ID that should appear in the returned page.
limitint32Maximum number of events to return around the anchor.

Response containing a room timeline window around a specific event.

FieldTypeDescription
pageRoomTimelinePageLoaded timeline page.
target_indexint32Zero-based index of the anchor event within page.events.

Marks a room timeline as read through the supplied event. If no event is supplied, the server marks through the room’s latest root event. Clients usually call this after the user has viewed the latest visible event in the room.

POST /api/connect/chatto.api.v1.RoomService/MarkRoomAsRead

Request to mark a room timeline as read.

FieldTypeDescription
room_idstringRequired. Room whose timeline should be marked read.
up_to_event_idstringHighest room event ID the current user has read. When set, the event must exist as a root event in the room timeline. Leave empty to mark through the room’s current latest root event.

Result of marking a room timeline as read.

Clients can use the previous timestamp to decide whether unread badges or local notification state need to be reconciled.

FieldTypeDescription
last_read_atgoogle.protobuf.TimestampNew room read timestamp stored for the current user.
previous_last_read_atgoogle.protobuf.TimestampPrevious room read timestamp, when one existed.

Bans a member from a channel room. Direct-message rooms cannot be moderated this way, and the target must currently be a room member.

POST /api/connect/chatto.api.v1.RoomService/BanMember

Request to ban a member from a channel room.

FieldTypeDescription
room_idstringRequired. Channel room to ban the user from.
user_idstringRequired. User to ban from the room.
reasonstringRequired moderator-entered reason stored for audit.
expires_atgoogle.protobuf.TimestampOptional future time when the ban expires.

Result of banning a room member.

FieldTypeDescription
bannedboolTrue when the ban operation completed.

Removes an active channel room ban. Calling this when no active ban exists is allowed and still returns success.

POST /api/connect/chatto.api.v1.RoomService/UnbanMember

Request to remove a channel room ban.

FieldTypeDescription
room_idstringRequired. Channel room to unban the user from.
user_idstringRequired. User to unban.
reasonstringRequired moderator-entered reason stored for audit.

Result of removing a room ban.

FieldTypeDescription
unbannedboolTrue when the unban operation completed.