Skip to main content
Quick Reference for AI Agents & Developers
// Create a public group
const group = new CometChat.Group("guid", "Group Name", CometChat.GROUP_TYPE.PUBLIC);
const createdGroup = await CometChat.createGroup(group);

// Create a password-protected group
const group = new CometChat.Group("guid", "Name", CometChat.GROUP_TYPE.PASSWORD, "password");
await CometChat.createGroup(group);

// Create a private group (invite-only)
const group = new CometChat.Group("guid", "Name", CometChat.GROUP_TYPE.PRIVATE);
await CometChat.createGroup(group);

// Create group with initial members
const members = [
  new CometChat.GroupMember("user1", CometChat.GROUP_MEMBER_SCOPE.ADMIN),
  new CometChat.GroupMember("user2", CometChat.GROUP_MEMBER_SCOPE.PARTICIPANT)
];
await CometChat.createGroupWithMembers(group, members, []);

// Group types: PUBLIC | PASSWORD | PRIVATE
// Member scopes: ADMIN | MODERATOR | PARTICIPANT
Create groups to enable multi-user conversations. Groups can be public (anyone can join), password-protected, or private (invite-only).
Availability: SDK, API, UI Kits

Group Types

TypeDescription
PUBLICAnyone can join without approval
PASSWORDRequires password to join
PRIVATEInvite-only, not visible in group list

Create a Group

const GUID = "group-123";
const groupName = "Team Chat";
const groupType = CometChat.GROUP_TYPE.PUBLIC;

const group = new CometChat.Group(GUID, groupName, groupType);

CometChat.createGroup(group).then(
  (group) => console.log("Group created:", group),
  (error) => console.log("Failed:", error)
);
GUID Requirements: Alphanumeric characters, underscores, and hyphens only. No spaces, punctuation, or special characters.

Create with Full Properties

const GUID = "group-123";
const groupName = "Engineering Team";
const groupType = CometChat.GROUP_TYPE.PUBLIC;
const password = "";
const icon = "https://example.com/group-icon.png";
const description = "Engineering team discussions";

const group = new CometChat.Group(
  GUID,
  groupName,
  groupType,
  password,
  icon,
  description
);

// Set additional properties
group.setMetadata({ department: "Engineering", project: "Alpha" });
group.setTags(["engineering", "development"]);

CometChat.createGroup(group).then(
  (group) => console.log("Group created:", group),
  (error) => console.log("Failed:", error)
);

Create Group with Members

Create a group and add members in a single operation:
const GUID = "group-123";
const groupName = "Project Team";
const groupType = CometChat.GROUP_TYPE.PUBLIC;

const group = new CometChat.Group(GUID, groupName, groupType);

// Members to add
const members = [
  new CometChat.GroupMember("user1", CometChat.GROUP_MEMBER_SCOPE.ADMIN),
  new CometChat.GroupMember("user2", CometChat.GROUP_MEMBER_SCOPE.MODERATOR),
  new CometChat.GroupMember("user3", CometChat.GROUP_MEMBER_SCOPE.PARTICIPANT)
];

// Users to ban
const banMembers = ["user4", "user5"];

CometChat.createGroupWithMembers(group, members, banMembers).then(
  (response) => {
    console.log("Group:", response.group);
    console.log("Member results:", response.members);
    // { user1: "success", user2: "success", user3: "success" }
  },
  (error) => console.log("Failed:", error)
);

Member Scopes

ScopeDescription
ADMINFull control over group settings and members
MODERATORCan manage members but not group settings
PARTICIPANTRegular member, can send/receive messages

Group Properties Reference

PropertyEditableDescription
guidCreate onlyUnique identifier
nameYesDisplay name
typeNoPUBLIC, PASSWORD, or PRIVATE
passwordNoPassword for PASSWORD type groups
iconYesURL to group icon
descriptionYesGroup description
ownerYesUID of group owner
metadataYesCustom JSON data
createdAtNoCreation timestamp
updatedAtNoLast update timestamp
hasJoinedNoIf logged-in user is a member
joinedAtNoWhen user joined
scopeYesUser’s scope in group
membersCountNoNumber of members
tagsYesTags for categorization

Real-Time Group Events

Listen for group creation events:
const listenerID = "GROUP_LISTENER";

CometChat.addGroupListener(
  listenerID,
  new CometChat.GroupListener({
    onGroupMemberJoined: (message, joinedUser, joinedGroup) => {
      console.log("User joined:", joinedUser.getName());
    },
    onGroupMemberLeft: (message, leftUser, leftGroup) => {
      console.log("User left:", leftUser.getName());
    }
  })
);

// Remove listener when done
CometChat.removeGroupListener(listenerID);

Best Practices

  • Use meaningful GUIDs that relate to your app’s data model
  • Consider prefixing GUIDs by type (e.g., “team-123”, “project-456”)
  • Keep GUIDs consistent with your backend identifiers
  • Use PUBLIC for open communities
  • Use PASSWORD for semi-private groups
  • Use PRIVATE for invite-only groups (support teams, executive chats)
  • Add the creator as ADMIN automatically
  • Consider adding relevant users during creation to avoid multiple API calls

Next Steps