Skip to main content

User Management API

The User Management API provides comprehensive functionality for managing users, organizations, user groups, and teams within your application. This service handles organizational structure, user profiles, permissions, and team collaboration features.

Base URL

All endpoints are prefixed with /api/v1

Authentication

Most endpoints require authentication via Bearer token:
Scoped Tokens: Internal endpoints use scoped token authentication for service-to-service communication:
  • USER_LOOKUP - For internal user lookups and email existence checks
  • FETCH_CONFIG - For configuration updates
Admin Requirements: Many endpoints require admin privileges, enforced through userAdminCheck middleware that validates user group membership.

Architecture Overview

The User Management Service is built on Node.js with MongoDB for data persistence. It uses Inversify for dependency injection and integrates with several external services:
  • Authentication Service - Validates user credentials and authentication methods
  • Mail Service - Sends invitations and notifications via SMTP
  • Configuration Manager - Manages application settings and SMTP configuration
  • Event Service - Publishes entity lifecycle events via Kafka
  • AI Connector Backend - Handles teams and graph-based user operations
  • Prometheus Service - Records metrics and activities

Data Models

Organizations

Top-level entities containing users and configuration:
  • Organization metadata and settings
  • Account types (individual/business)
  • Onboarding status tracking
  • Logo management with automatic compression

Users

Individual accounts within organizations:
  • Profile information and contact details
  • Authentication status and login history
  • Organization membership and roles
  • Display picture management with automatic compression

User Groups

Role-based access control within organizations:
  • Predefined types: admin, standard, everyone, custom
  • User membership management
  • Permission inheritance
  • System-managed groups cannot be deleted

Teams

Collaborative workspaces managed through connector backend:
  • Team metadata and descriptions
  • User membership with permissions
  • External system integration via AI connector service

API Endpoints

The Organization Management API handles organization-level settings, branding, and configuration.
Checks if any organization exists in the system.
Endpoint: GET /api/v1/org/existsAuthentication: None requiredMiddleware Chain:
  • attachContainerMiddleware - Provides Inversify container access
Description: Used during initial setup to determine if the system has been initialized with an organization.
Creates a new organization with an admin user and sets up the entire system.
Endpoint: POST /api/v1/orgAuthentication: None required (initial setup only)Middleware Chain:
  • attachContainerMiddleware
  • ValidationMiddleware.validate(OrgCreationValidationSchema)
Request Body Parameters:Validation Rules:
  • Business accounts must provide registeredName
  • Password must contain: uppercase, lowercase, number, special character
  • Email domain becomes organization domain
  • Only one organization can exist per system
Retrieves the authenticated user’s organization details.
Endpoint: GET /api/v1/orgHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • attachContainerMiddleware
  • authMiddleware.authenticate
  • metricsMiddleware
Access Control: Any authenticated user within the organization
Updates organization details.
Endpoint: PATCH /api/v1/orgHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • attachContainerMiddleware
  • authMiddleware.authenticate
  • metricsMiddleware
  • userAdminCheck - Admin access required
Request Body Parameters:
Soft-deletes the organization.
Endpoint: DELETE /api/v1/orgHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • attachContainerMiddleware
  • authMiddleware.authenticate
  • metricsMiddleware
  • userAdminCheck - Admin access required
Uploads and automatically compresses an organization logo.
Endpoint: PUT /api/v1/org/logoHeaders:
  • Authorization: Bearer YOUR_TOKEN
  • Content-Type: multipart/form-data
Middleware Chain:
  • attachContainerMiddleware
  • authMiddleware.authenticate
  • FileProcessorFactory.createBufferUploadProcessor() with:
    • Field name: ‘file’
    • Allowed types: PNG, JPEG, JPG, WebP, GIF
    • Max files: 1
    • Max size: 1MB
    • Processing type: BUFFER
    • Strict upload: true
  • metricsMiddleware
  • userAdminCheck - Admin access required
Form Data:
  • file: Image file
File Processing:
  • Automatically compressed using Sharp library
  • Converted to JPEG format
  • Quality reduced until under 100KB (minimum quality: 10%)
  • Stored as base64 string in database
Removes the organization’s logo.
Endpoint: DELETE /api/v1/org/logoHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • attachContainerMiddleware
  • authMiddleware.authenticate
  • metricsMiddleware
  • userAdminCheck - Admin access required
Retrieves the organization’s logo.
Endpoint: GET /api/v1/org/logoHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • attachContainerMiddleware
  • authMiddleware.authenticate
  • metricsMiddleware
Retrieves the organization’s onboarding status.
Endpoint: GET /api/v1/org/onboarding-statusHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • attachContainerMiddleware
  • authMiddleware.authenticate
Updates the organization’s onboarding status.
Endpoint: PUT /api/v1/org/onboarding-statusHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • attachContainerMiddleware
  • authMiddleware.authenticate
  • userAdminCheck - Admin access required
  • ValidationMiddleware.validate(OnboardingStatusUpdateValidationSchema)
Request Body Parameters:
Health check endpoint for the organization service.
Endpoint: GET /api/v1/org/healthAuthentication: None requiredMiddleware Chain:
  • attachContainerMiddleware
The User Management API provides comprehensive user management functionality including profile management, invitations, and access control.
Retrieves all active users in the authenticated user’s organization.
Endpoint: GET /api/v1/usersHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • metricsMiddleware
Access Control: Any authenticated user
Retrieves all users with their group memberships using MongoDB aggregation.
Endpoint: GET /api/v1/users/fetch/with-groupsHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
Description: Uses MongoDB aggregation pipeline to join users with their group memberships efficiently.
Retrieves a specific user by their ID.
Endpoint: GET /api/v1/users/:idHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • ValidationMiddleware.validate(UserIdValidationSchema)
  • metricsMiddleware
  • userExists - Validates user exists and is not deleted
Path Parameters:
  • id: User ID (24-character MongoDB ObjectId matching /^[a-fA-F0-9]{24}$/)
Retrieves multiple users by their IDs.
Endpoint: POST /api/v1/users/by-idsHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • ValidationMiddleware.validate(MultipleUserValidationSchema)
  • metricsMiddleware
Request Body Parameters:Validation:
  • Each userIds element must match /^[a-fA-F0-9]{24}$/
  • Array must contain at least one userId
Checks if users exist with the given email address. Internal service endpoint.
Endpoint: GET /api/v1/users/email/existsHeaders:
  • Authorization: Bearer SCOPED_TOKEN (USER_LOOKUP scope required)
Middleware Chain:
  • metricsMiddleware
  • authMiddleware.scopedTokenValidator(TokenScopes.USER_LOOKUP)
  • ValidationMiddleware.validate(emailIdValidationSchema)
Request Body Parameters:Note: This is a GET request that expects a request body, which is unusual but documented as implemented.
Internal service endpoint for user retrieval with scoped authentication.
Endpoint: GET /api/v1/users/internal/:idHeaders:
  • Authorization: Bearer SCOPED_TOKEN (USER_LOOKUP scope required)
Middleware Chain:
  • authMiddleware.scopedTokenValidator(TokenScopes.USER_LOOKUP)
  • ValidationMiddleware.validate(UserIdValidationSchema)
  • metricsMiddleware
Path Parameters:
  • id: User ID (24-character MongoDB ObjectId)
Description: Used for service-to-service user lookups without full authentication. Directly queries database in route handler.
Creates a new user in the organization.
Endpoint: POST /api/v1/usersHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • metricsMiddleware
  • ValidationMiddleware.validate(createUserValidationSchema)
  • userAdminCheck - Admin access required
Request Body Parameters:Validation Rules:
  • Mobile must match /^\+?[0-9]{10,15}$/ if provided
  • Email must be valid email format
Updates a user’s full name only.
Endpoint: PATCH /api/v1/users/:id/fullnameHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • metricsMiddleware
  • ValidationMiddleware.validate(updateUserFullNameValidationSchema)
  • userAdminOrSelfCheck - Admin or self access required
  • userExists - Validates user exists
Path Parameters:
  • id: User ID (24-character MongoDB ObjectId)
Request Body Parameters:
Updates a user’s first name only.
Endpoint: PATCH /api/v1/users/:id/firstNameHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • metricsMiddleware
  • ValidationMiddleware.validate(updateUserFirstNameValidationSchema)
  • userAdminOrSelfCheck - Admin or self access required
  • userExists - Validates user exists
Path Parameters:
  • id: User ID (24-character MongoDB ObjectId)
Request Body Parameters:
Updates a user’s last name only.
Endpoint: PATCH /api/v1/users/:id/lastNameHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • metricsMiddleware
  • ValidationMiddleware.validate(updateUserLastNameValidationSchema)
  • userAdminOrSelfCheck - Admin or self access required
  • userExists - Validates user exists
Path Parameters:
  • id: User ID (24-character MongoDB ObjectId)
Request Body Parameters:
Uploads and compresses a profile picture for the authenticated user.
Endpoint: PUT /api/v1/users/dpHeaders:
  • Authorization: Bearer YOUR_TOKEN
  • Content-Type: multipart/form-data
Middleware Chain:
  • authMiddleware.authenticate
  • FileProcessorFactory.createBufferUploadProcessor() (spread as array) with:
    • Field name: ‘file’
    • Allowed types: PNG, JPEG, JPG, WebP, GIF
    • Max files: 1
    • Max size: 1MB
    • Processing type: BUFFER
    • Strict upload: true
  • metricsMiddleware
Form Data:
  • file: Image file
Image Processing:
  • Compressed using Sharp library with dynamic quality adjustment
  • Converted to JPEG format
  • Quality reduced from 100% to minimum 10% until under 100KB
  • Stored as base64 with MIME type
  • Uses upsert operation for user display picture record
Removes the authenticated user’s profile picture.
Endpoint: DELETE /api/v1/users/dpHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • metricsMiddleware
Description: Sets pic and mimeType fields to null but preserves the record.
Retrieves the authenticated user’s profile picture.
Endpoint: GET /api/v1/users/dpHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • metricsMiddleware
Updates a user’s job designation.
Endpoint: PATCH /api/v1/users/:id/designationHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • metricsMiddleware
  • ValidationMiddleware.validate(updateUserDesignationValidationSchema)
  • userAdminOrSelfCheck - Admin or self access required
  • userExists - Validates user exists
Path Parameters:
  • id: User ID (24-character MongoDB ObjectId)
Request Body Parameters:
Updates a user’s email address.
Endpoint: PATCH /api/v1/users/:id/emailHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • metricsMiddleware
  • ValidationMiddleware.validate(updateUserEmailValidationSchema)
  • userAdminOrSelfCheck - Admin or self access required
  • userExists - Validates user exists
Path Parameters:
  • id: User ID (24-character MongoDB ObjectId)
Request Body Parameters:
Updates comprehensive user information.
Endpoint: PUT /api/v1/users/:idHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • metricsMiddleware
  • ValidationMiddleware.validate(updateUserValidationSchema)
  • userAdminOrSelfCheck - Admin or self access required
  • userExists - Validates user exists
Path Parameters:
  • id: User ID (24-character MongoDB ObjectId)
Request Body Parameters:Restricted Fields: orgId, _id, slug are excluded from updates.
Soft-deletes a user from the organization with comprehensive cleanup.
Endpoint: DELETE /api/v1/users/:idHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • metricsMiddleware
  • ValidationMiddleware.validate(UserIdValidationSchema)
  • userAdminCheck - Admin access required
  • userExists - Validates user exists
Path Parameters:
  • id: User ID (24-character MongoDB ObjectId)
Restrictions:
  • Cannot delete admin users (checked via group membership)
  • User must exist and not already be deleted
Verifies if the authenticated user has admin access.
Endpoint: GET /api/v1/users/:id/adminCheckHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • metricsMiddleware
  • ValidationMiddleware.validate(UserIdValidationSchema)
  • userAdminCheck - Admin access required (the actual check)
Path Parameters:
  • id: User ID (24-character MongoDB ObjectId)
Description: This endpoint serves as an admin access verification. The middleware validates admin status.
Invites multiple users to the organization with comprehensive email handling.
Endpoint: POST /api/v1/users/bulk/inviteHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • metricsMiddleware
  • smtpConfigCheck(config.cmBackend) - SMTP configuration required
  • userAdminCheck - Admin access required
  • accountTypeCheck - Business accounts only
Request Body Parameters:Complex Behavior:
  • Creates new accounts for emails not in system
  • Restores deleted accounts if they exist with same email and orgId
  • Validates all emails before processing any
  • Adds all users (new and restored) to specified groups and “everyone” group
  • Sends different email templates for new vs restored users
  • Handles both password and non-password authentication methods
Resends an invitation to a specific user who hasn’t logged in yet.
Endpoint: POST /api/v1/users/:id/resend-inviteHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • metricsMiddleware
  • ValidationMiddleware.validate(UserIdValidationSchema)
  • smtpConfigCheck(config.cmBackend) - SMTP configuration required
  • userAdminCheck - Admin access required
  • accountTypeCheck - Business accounts only
Path Parameters:
  • id: User ID (24-character MongoDB ObjectId)
Restrictions:
  • User must not have logged in yet (hasLoggedIn: false)
  • User must exist and not be deleted
  • Adapts email content based on authentication method (password vs non-password)
Health check endpoint for the users service.
Endpoint: GET /api/v1/users/healthAuthentication: None required
Internal endpoint for updating application configuration with service rebinding.
Endpoint: POST /api/v1/users/updateAppConfigHeaders:
  • Authorization: Bearer SCOPED_TOKEN (FETCH_CONFIG scope required)
Middleware Chain:
  • authMiddleware.scopedTokenValidator(TokenScopes.FETCH_CONFIG)
Description:
  • Reloads application configuration
  • Rebinds Inversify container services with updated config
  • Recreates MailService, AuthService, and controllers with new configuration
Retrieves users list through connector backend service with pagination.
Endpoint: GET /api/v1/users/graph/listHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • metricsMiddleware
Query Parameters:
  • page: Page number for pagination
  • limit: Number of users per page
  • search: Search term for filtering users
Description: Proxies request to AI connector backend service for graph-based user operations.Proxy Behavior: Request forwarded to ${config.connectorBackend}/api/v1/entity/user/list
Retrieves teams that the authenticated user belongs to via connector backend.
Endpoint: GET /api/v1/users/teams/listHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • metricsMiddleware
Query Parameters:
  • page: Page number for pagination
  • limit: Number of teams per page
  • search: Search term for filtering teams
Description: Proxies request to AI connector backend for team membership data.Proxy Behavior: Request forwarded to ${config.connectorBackend}/api/v1/entity/user/teamsNote: This is different from the teams endpoint /user/teams. This endpoint is managed by the UserController and has different query parameter handling.
The User Groups API manages role-based access control within organizations through group membership.
Creates a new user group in the organization.
Endpoint: POST /api/v1/userGroupsHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • ValidationMiddleware.validate(groupValidationSchema)
  • userAdminCheck - Admin access required
Request Body Parameters:Restrictions:
  • Cannot create ‘admin’ type groups (throws BadRequestError)
  • Group names must be unique within organization
  • Available types from groupTypes: [‘admin’, ‘standard’, ‘everyone’, ‘custom’]
  • ‘admin’ and ‘everyone’ are system-managed
Retrieves all user groups in the organization.
Endpoint: GET /api/v1/userGroupsHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • userAdminCheck - Admin access required
Description: Returns all non-deleted groups for the organization using lean query for performance.
Retrieves a specific user group by its ID.
Endpoint: GET /api/v1/userGroups/:groupIdHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • ValidationMiddleware.validate(UserGroupIdValidationSchema)
Path Parameters:
  • groupId: Group ID (24-character MongoDB ObjectId matching /^[0-9a-fA-F]{24}$/)
Description: Uses lean query for performance optimization.
Updates a user group’s name.
Endpoint: PUT /api/v1/userGroups/:groupIdHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • userAdminCheck - Admin access required
  • ValidationMiddleware.validate(UserGroupIdValidationSchema)
Path Parameters:
  • groupId: Group ID (24-character MongoDB ObjectId)
Request Body Parameters:Restrictions:
  • Cannot update ‘admin’ or ‘everyone’ groups (throws ForbiddenError)
  • Only custom and standard groups can be modified
Soft-deletes a user group.
Endpoint: DELETE /api/v1/userGroups/:groupIdHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • userAdminCheck - Admin access required
  • ValidationMiddleware.validate(UserGroupIdValidationSchema)
Path Parameters:
  • groupId: Group ID (24-character MongoDB ObjectId)
Restrictions:
  • Only ‘custom’ groups can be deleted (throws ForbiddenError for others)
  • System groups (admin, everyone, standard) are protected
Adds multiple users to multiple groups using atomic operations.
Endpoint: POST /api/v1/userGroups/add-usersHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • userAdminCheck - Admin access required
Request Body Parameters:Operation Details:
  • Uses $addToSet with $each to add users to multiple groups
  • Atomic operation - either all additions succeed or none
  • Prevents duplicate memberships automatically
  • Only operates on non-deleted groups
Removes multiple users from multiple groups using atomic operations.
Endpoint: POST /api/v1/userGroups/remove-usersHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • userAdminCheck - Admin access required
Request Body Parameters:Operation Details:
  • Uses $pullAll to remove users from multiple groups
  • Atomic operation across all specified groups
  • Gracefully handles users not in groups
Retrieves all user IDs in a specific group.
Endpoint: GET /api/v1/userGroups/:groupId/usersHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • ValidationMiddleware.validate(UserGroupIdValidationSchema)
Path Parameters:
  • groupId: Group ID (24-character MongoDB ObjectId)
Retrieves all groups that a specific user belongs to.
Endpoint: GET /api/v1/userGroups/users/:userIdHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
Path Parameters:
  • userId: User ID (MongoDB ObjectId)
Description: Uses $in query to find groups containing the user, selecting only name and type fields.
Retrieves aggregated statistics about all groups in the organization.
Endpoint: GET /api/v1/userGroups/stats/listHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
Description: Uses MongoDB aggregation pipeline to calculate statistics grouped by group name.
Health check endpoint for the user groups service.
Endpoint: GET /api/v1/userGroups/healthAuthentication: None required
The Teams API manages collaborative workspaces through the connector backend service. All team operations are proxied to the AI connector backend.
Creates a new team via the connector backend service.
Endpoint: POST /api/v1/teamsHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • metricsMiddleware
  • ValidationMiddleware.validate(createTeamValidationSchema)
Request Body Parameters:Proxy Behavior: Request forwarded to ${config.connectorBackend}/api/v1/entity/team
Retrieves all teams with pagination via connector backend.
Endpoint: GET /api/v1/teamsHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • metricsMiddleware
  • ValidationMiddleware.validate(listTeamsValidationSchema)
Query Parameters:
  • page: Page number (number, min 1, default 1, preprocessed from string)
  • limit: Items per page (number, min 1, max 100, default 10, preprocessed from string)
  • search: Search term for team names/descriptions (string, optional)
Proxy Behavior: Query parameters passed to ${config.connectorBackend}/api/v1/entity/team/list
Retrieves a specific team by ID via connector backend.
Endpoint: GET /api/v1/teams/:teamIdHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • metricsMiddleware
  • ValidationMiddleware.validate(getTeamValidationSchema)
Path Parameters:
  • teamId: Team ID (string, min 1 character, required)
Proxy Behavior: Request forwarded to ${config.connectorBackend}/api/v1/entity/team/${teamId}
Updates team information via connector backend.
Endpoint: PUT /api/v1/teams/:teamIdHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • metricsMiddleware
  • ValidationMiddleware.validate(updateTeamValidationSchema)
Path Parameters:
  • teamId: Team ID (string, min 1 character, required)
Request Body Parameters:Proxy Behavior: Request forwarded to ${config.connectorBackend}/api/v1/entity/team/${teamId}
Deletes a team via connector backend.
Endpoint: DELETE /api/v1/teams/:teamIdHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • metricsMiddleware
  • ValidationMiddleware.validate(deleteTeamValidationSchema)
Path Parameters:
  • teamId: Team ID (string, min 1 character, required)
Proxy Behavior: Request forwarded to ${config.connectorBackend}/api/v1/entity/team/${teamId}
Retrieves all users in a specific team via connector backend.
Endpoint: GET /api/v1/teams/:teamId/usersHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • metricsMiddleware
  • ValidationMiddleware.validate(getTeamUsersValidationSchema)
Path Parameters:
  • teamId: Team ID (string, min 1 character, required)
Proxy Behavior: Request forwarded to ${config.connectorBackend}/api/v1/entity/team/${teamId}/users
Adds users to a team via connector backend.
Endpoint: POST /api/v1/teams/:teamId/usersHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • metricsMiddleware
  • ValidationMiddleware.validate(addUsersToTeamValidationSchema)
Path Parameters:
  • teamId: Team ID (string, min 1 character, required)
Request Body Parameters:Proxy Behavior: Request forwarded to ${config.connectorBackend}/api/v1/entity/team/${teamId}/users
Removes users from a team via connector backend.
Endpoint: DELETE /api/v1/teams/:teamId/usersHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • metricsMiddleware
  • ValidationMiddleware.validate(removeUsersFromTeamValidationSchema)
Path Parameters:
  • teamId: Team ID (string, min 1 character, required)
Request Body Parameters:Note: Request body is optional in the validation schema, but userIds are required when the body is provided.Proxy Behavior: Request forwarded to ${config.connectorBackend}/api/v1/entity/team/${teamId}/users
Updates permissions for team members via connector backend.
Endpoint: PUT /api/v1/teams/:teamId/users/permissionsHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • metricsMiddleware
  • ValidationMiddleware.validate(updateTeamUsersPermissionsValidationSchema)
Path Parameters:
  • teamId: Team ID (string, min 1 character, required)
Request Body Parameters:Proxy Behavior: Request forwarded to ${config.connectorBackend}/api/v1/entity/team/${teamId}/users/permissions
Retrieves all teams that the authenticated user belongs to via connector backend.
Endpoint: GET /api/v1/teams/user/teamsHeaders:
  • Authorization: Bearer YOUR_TOKEN
Middleware Chain:
  • authMiddleware.authenticate
  • metricsMiddleware
Proxy Behavior: Request forwarded to ${config.connectorBackend}/api/v1/entity/user/teamsError Handling: If connector backend returns non-200 status, returns empty array [] instead of throwing an error.

Schema Definitions

Validation Schemas

Error Handling

All endpoints return structured error responses:
Common Error Codes:
  • VALIDATION_ERROR - Invalid request parameters
  • NOT_FOUND - Resource not found
  • UNAUTHORIZED - Authentication required
  • FORBIDDEN - Insufficient privileges
  • BAD_REQUEST - Invalid operation
  • INTERNAL_ERROR - Server error
HTTP Status Codes:
  • 200 - Success
  • 201 - Created
  • 400 - Bad Request (validation errors)
  • 401 - Unauthorized
  • 403 - Forbidden (insufficient privileges)
  • 404 - Not Found
  • 500 - Internal Server Error

Important Notes

  1. Route Paths: All route paths shown are relative to how the routers are mounted in the main application
  2. MongoDB ObjectIds: All ID fields use 24-character hexadecimal strings matching /^[a-fA-F0-9]{24}$/
  3. Soft Deletes: Users, organizations, and groups use soft deletion (isDeleted: true) rather than physical removal
  4. Admin Restrictions:
    • Admin users cannot be deleted (checked via group membership)
    • Only custom user groups can be deleted (admin, everyone, standard are protected)
  5. SMTP Dependencies: Email features require valid SMTP configuration checked via Configuration Manager service
  6. Account Type Restrictions:
    • Bulk user invitations limited to business accounts
    • Individual accounts have restricted functionality
  7. Automatic Group Memberships:
    • All users automatically added to “everyone” group
    • Admin users added to “admin” group during organization creation
  8. Image Processing:
    • Uploaded images automatically compressed using Sharp library
    • Converted to JPEG format with dynamic quality adjustment
    • Target size: under 100KB after compression
  9. Event Publishing:
    • All entity changes publish events via Kafka for system integration
    • Events include organization and user lifecycle changes
  10. Transaction Support:
    • Uses MongoDB transactions when replica sets available
    • Falls back to individual operations for single-node deployments
  11. Teams Functionality:
    • All teams operations are proxied to AI connector backend
    • Routes forward requests to ${config.connectorBackend}/api/v1/entity/team/*
    • Error handling returns appropriate responses for failed backend calls
    • Response formats depend entirely on connector backend implementation
  12. Unique Constraints:
    • Email addresses must be unique across the system
    • Group names must be unique within organization
    • Slugs auto-generated with counter-based uniqueness
  13. Middleware Processing:
    • FileProcessorFactory methods return arrays that are spread into middleware chains
    • Validation schemas include complete request structure (body, query, params, headers)
  14. Service Integration:
    • Configuration updates dynamically rebind services in dependency injection container
    • Health endpoints available on all router modules
    • Metrics recorded via Prometheus service for monitoring
  15. Access Control:
    • Scoped tokens for service-to-service communication (USER_LOOKUP, FETCH_CONFIG)
    • Role-based access through user group membership
    • Admin-only operations clearly enforced through middleware
  16. Duplicate User Teams Endpoints:
    • /teams/user/teams (managed by TeamsController) - Returns empty array on backend errors
    • /users/teams/list (managed by UserController) - Throws BadRequestError on backend errors
    • Both proxy to connector backend but have different error handling strategies
  17. File Upload Middleware:
    • FileProcessorFactory.createBufferUploadProcessor() returns an object with getMiddleware array
    • Middleware is spread using the spread operator (...middleware.getMiddleware)
    • All uploaded images undergo automatic compression regardless of original format
  18. Validation Preprocessing:
    • Query parameters for pagination are preprocessed from strings to numbers using z.preprocess()
    • Default values are applied during validation for optional pagination parameters
  19. Container Integration:
    • Inversify container provides dependency injection throughout the application
    • Services are dynamically rebound when configuration updates occur
    • Container disposal handles cleanup of connections and resources
  20. Email Behavior Variations:
    • Different email templates sent for new vs restored user invitations
    • Authentication method (password vs non-password) affects email content
    • SMTP configuration validation occurs before any email sending operations