The Groups API provides comprehensive functionality for group management, including member operations, role management, wall posts, and configuration.
Importing endpoints
Import the endpoints you need from the groups module:
import { getGroupsGroupid, getGroupsGroupidMembers, postGroupsGroupidUsers } from 'rozod/endpoints/groupsv1';
import { fetchApi } from 'rozod';
Fetch basic information about a group.
const group = await fetchApi(getGroupsGroupid, {
groupId: 1234567,
});
if (!isAnyErrorResponse(group)) {
console.log(`${group.name} - ${group.description}`);
console.log(`Owner: ${group.owner.username}`);
console.log(`Members: ${group.memberCount}`);
if (group.shout) {
console.log(`Shout: ${group.shout.body}`);
}
}
Get group members
Retrieve members of a group with pagination.
import { getGroupsGroupidUsersWithRole } from 'rozod/endpoints/groupsv1';
const members = await fetchApi(getGroupsGroupidUsersWithRole, {
groupId: 1234567,
roleSetId: 12345678, // Optional: filter by role
limit: 100,
});
if (!isAnyErrorResponse(members)) {
members.data.forEach((member) => {
console.log(`${member.user.displayName} - ${member.role.name}`);
});
}
Use fetchApiPages to automatically fetch all members across multiple pages.
Get group roles
Fetch all roles in a group.
import { getGroupsGroupidRoles } from 'rozod/endpoints/groupsv1';
const roles = await fetchApi(getGroupsGroupidRoles, {
groupId: 1234567,
});
if (!isAnyErrorResponse(roles)) {
roles.roles.forEach((role) => {
console.log(`${role.name} (Rank ${role.rank})`);
console.log(`Members: ${role.memberCount}`);
});
}
Manage group membership
Join a group
import { postGroupsGroupidUsers } from 'rozod/endpoints/groupsv1';
const result = await fetchApi(postGroupsGroupidUsers, {
groupId: 1234567,
body: {
sessionId: 'optional-session-id',
redemptionToken: 'optional-token',
captchaId: '',
captchaToken: '',
captchaProvider: '',
challengeId: '',
},
});
if (!isAnyErrorResponse(result)) {
console.log('Successfully joined group');
}
Leave a group
import { deleteGroupsGroupidUsers } from 'rozod/endpoints/groupsv1';
const result = await fetchApi(deleteGroupsGroupidUsers, {
groupId: 1234567,
});
if (!isAnyErrorResponse(result)) {
console.log('Left group successfully');
}
Join requests
Get join requests
import { getGroupsGroupidJoinRequests } from 'rozod/endpoints/groupsv1';
const requests = await fetchApi(getGroupsGroupidJoinRequests, {
groupId: 1234567,
limit: 50,
});
if (!isAnyErrorResponse(requests)) {
requests.data.forEach((request) => {
console.log(`${request.requester.displayName} requested to join`);
});
}
Accept join request
import { postGroupsGroupidJoinRequestsUsersUserid } from 'rozod/endpoints/groupsv1';
const result = await fetchApi(postGroupsGroupidJoinRequestsUsersUserid, {
groupId: 1234567,
userId: 987654321,
});
if (!isAnyErrorResponse(result)) {
console.log('Join request accepted');
}
Decline join request
import { deleteGroupsGroupidJoinRequestsUsersUserid } from 'rozod/endpoints/groupsv1';
const result = await fetchApi(deleteGroupsGroupidJoinRequestsUsersUserid, {
groupId: 1234567,
userId: 987654321,
});
if (!isAnyErrorResponse(result)) {
console.log('Join request declined');
}
Managing join requests requires appropriate group permissions.
Group wall
Get wall posts
import { getGroupsGroupidWall } from 'rozod/endpoints/groupsv1';
const wall = await fetchApi(getGroupsGroupidWall, {
groupId: 1234567,
limit: 25,
sortOrder: 'Desc',
});
if (!isAnyErrorResponse(wall)) {
wall.data.forEach((post) => {
console.log(`${post.poster.displayName}: ${post.body}`);
console.log(`Posted: ${post.created}`);
});
}
Post to wall
import { postGroupsGroupidWall } from 'rozod/endpoints/groupsv1';
const result = await fetchApi(postGroupsGroupidWall, {
groupId: 1234567,
body: {
body: 'Hello from the API!',
captchaId: '',
captchaToken: '',
captchaProvider: '',
challengeId: '',
},
});
if (!isAnyErrorResponse(result)) {
console.log('Posted to wall successfully');
}
Delete wall post
import { deleteGroupsGroupidWallPostsPostid } from 'rozod/endpoints/groupsv1';
const result = await fetchApi(deleteGroupsGroupidWallPostsPostid, {
groupId: 1234567,
postId: 123456789,
});
if (!isAnyErrorResponse(result)) {
console.log('Wall post deleted');
}
Group settings
Get group settings
import { getGroupsGroupidSettings } from 'rozod/endpoints/groupsv1';
const settings = await fetchApi(getGroupsGroupidSettings, {
groupId: 1234567,
});
if (!isAnyErrorResponse(settings)) {
console.log(`Approval required: ${settings.isApprovalRequired}`);
console.log(`Public funds: ${settings.areGroupFundsVisible}`);
}
Update group settings
import { patchGroupsGroupidSettings } from 'rozod/endpoints/groupsv1';
const result = await fetchApi(patchGroupsGroupidSettings, {
groupId: 1234567,
body: {
isApprovalRequired: true,
areEnemiesAllowed: false,
areGroupFundsVisible: true,
areGroupGamesVisible: true,
verificationLevel: 0,
accountTenureRequirement: 0,
slowmode: 0,
isMemberListVisibleToPublic: true,
},
});
if (!isAnyErrorResponse(result)) {
console.log('Settings updated');
}
Search groups
Search for groups by keyword.
import { getGroupsSearch } from 'rozod/endpoints/groupsv1';
const results = await fetchApi(getGroupsSearch, {
keyword: 'development',
limit: 25,
});
if (!isAnyErrorResponse(results)) {
results.data.forEach((group) => {
console.log(`${group.name} - ${group.memberCount} members`);
console.log(`Verified: ${group.hasVerifiedBadge}`);
});
}
Audit logs
View group action history (requires permissions).
import { getGroupsGroupidAuditLog } from 'rozod/endpoints/groupsv1';
const logs = await fetchApi(getGroupsGroupidAuditLog, {
groupId: 1234567,
actionType: 'ChangeRank', // Optional filter
limit: 50,
});
if (!isAnyErrorResponse(logs)) {
logs.data.forEach((log) => {
console.log(`${log.actor.user.displayName} performed ${log.actionType}`);
console.log(`Time: ${log.created}`);
});
}
Ban management
Get banned users
import { getGroupsGroupidBans } from 'rozod/endpoints/groupsv1';
const bans = await fetchApi(getGroupsGroupidBans, {
groupId: 1234567,
limit: 50,
});
if (!isAnyErrorResponse(bans)) {
bans.data.forEach((ban) => {
console.log(`Banned: ${ban.user.displayName}`);
console.log(`By: ${ban.actingUser.user.displayName}`);
});
}
Ban a user
import { postGroupsGroupidBansUserid } from 'rozod/endpoints/groupsv1';
const result = await fetchApi(postGroupsGroupidBansUserid, {
groupId: 1234567,
userId: 987654321,
});
if (!isAnyErrorResponse(result)) {
console.log('User banned from group');
}
Unban a user
import { deleteGroupsGroupidBansUserid } from 'rozod/endpoints/groupsv1';
const result = await fetchApi(deleteGroupsGroupidBansUserid, {
groupId: 1234567,
userId: 987654321,
});
if (!isAnyErrorResponse(result)) {
console.log('User unbanned');
}
Available endpoints
All endpoints are exported from rozod/endpoints/groupsv1:
getGroupsGroupid - Get group info
getGroupsGroupidRoles - Get roles
getGroupsGroupidMembers - Get members (deprecated, use getGroupsGroupidUsersWithRole)
getGroupsGroupidJoinRequests - Get join requests
getGroupsGroupidWall - Get wall posts
postGroupsGroupidWall - Post to wall
getGroupsGroupidSettings - Get settings
patchGroupsGroupidSettings - Update settings
getGroupsGroupidAuditLog - Get audit logs
getGroupsGroupidBans - Get banned users
getGroupsSearch - Search groups
- And more…
For the complete list, refer to the TypeScript types in your IDE.