Groups API
The Groups API provides endpoints for managing groups and organizations through Zitadel integration.
Overview
Groups in BotServer represent organizations in Zitadel. They provide multi-tenant support and user grouping capabilities.
Endpoints
Create Group
POST /groups/create
Creates a new group/organization.
Request:
{
"name": "Engineering Team",
"description": "Software engineering department",
"domain": "engineering.example.com"
}
Response:
{
"id": "org-123",
"name": "Engineering Team",
"created_at": "2024-01-20T10:00:00Z"
}
Update Group
PUT /groups/:id/update
Updates group information.
Request:
{
"name": "Updated Name",
"description": "Updated description"
}
Response:
{
"id": "org-123",
"name": "Updated Name",
"updated_at": "2024-01-20T11:00:00Z"
}
Delete Group
DELETE /groups/:id/delete
Deletes a group/organization.
Response:
{
"success": true,
"message": "Group deleted successfully"
}
List Groups
GET /groups/list
Lists all groups accessible to the user.
Query Parameters:
limit- Maximum number of results (default: 20)offset- Pagination offset
Response:
{
"groups": [
{
"id": "org-123",
"name": "Engineering Team",
"member_count": 25,
"created_at": "2024-01-20T10:00:00Z"
}
],
"total": 1
}
Get Group Members
GET /groups/:id/members
Retrieves members of a specific group.
Response:
{
"members": [
{
"user_id": "user-456",
"username": "john_doe",
"email": "john@example.com",
"role": "member",
"joined_at": "2024-01-15T09:00:00Z"
}
],
"total": 1
}
Add Group Member
POST /groups/:id/members/add
Adds a user to a group.
Request:
{
"user_id": "user-789",
"role": "member"
}
Response:
{
"success": true,
"message": "Member added successfully"
}
Remove Group Member
DELETE /groups/:id/members/remove
Removes a user from a group.
Request:
{
"user_id": "user-789"
}
Response:
{
"success": true,
"message": "Member removed successfully"
}
Implementation Details
Zitadel Integration
All group operations are proxied to Zitadel:
- Groups map to Zitadel organizations
- Members are managed through Zitadel’s org API
- Permissions inherited from Zitadel roles
Data Model
Groups are not stored in BotServer’s database. All data comes from Zitadel:
- Group metadata from Zitadel orgs
- Membership from Zitadel org members
- Permissions from Zitadel policies
Error Responses
All endpoints may return standard error responses:
{
"error": "Group not found",
"code": "GROUP_NOT_FOUND",
"status": 404
}
Common error codes:
GROUP_NOT_FOUND- Group doesn’t existUNAUTHORIZED- User lacks permissionMEMBER_EXISTS- User already in groupMEMBER_NOT_FOUND- User not in groupZITADEL_ERROR- Upstream service error
Permissions
Group operations require appropriate Zitadel permissions:
- Create: Organization admin
- Update: Organization owner or admin
- Delete: Organization owner
- List: Authenticated user
- View Members: Group member
- Add/Remove Members: Group admin
Rate Limiting
Group endpoints are rate-limited:
- 100 requests per minute for read operations
- 20 requests per minute for write operations
Best Practices
- Cache Group Data: Groups change infrequently
- Batch Operations: Use bulk endpoints when available
- Handle Zitadel Errors: Gracefully handle upstream failures
- Validate Permissions: Check user has required role
- Audit Changes: Log all group modifications