Skip to main content
A ConversationMember records one user’s participation in a conversation. A user has exactly one membership row per conversation. The row persists even after a user leaves — isActive tracks whether they are currently a participant.

Properties

PropertyTypeDescription
idstringUnique membership identifier (UUID).
projectIdstringThe project this membership belongs to.
conversationIdstringID of the conversation.
userIdstringID of the member user.
userUser | undefinedThe member’s user profile. Included when listing members.
role"admin" | "member" | nullMember role within the conversation. null for direct and space conversations — space conversations derive roles from SpaceMember. Only group conversations use this field.
lastReadAtDate | nullTimestamp of the user’s last read event. Used to compute unreadCount on ConversationPreview. null if the user has never read the conversation.
mutedUntilDate | nullReserved for future mute functionality. Not used in v7.
isActivebooleanWhether the user is currently an active participant. false if they left voluntarily or were removed.
leftAtDate | nullTimestamp when the user left the conversation. null if still active.
createdAtDateTimestamp when the membership was created (i.e. when the user joined).
updatedAtDateTimestamp of the last update to this record.

Roles

Roles only apply to group conversations.
RoleDescription
"admin"Can add/remove members, update the conversation, and delete the conversation.
"member"Can send messages and leave the conversation.
nullUsed for direct and space conversation members (role is derived from context).
For space conversations, posting permissions are controlled by the conversation’s postingPermission field and the user’s SpaceMember role — not by ConversationMember.role.