openapi: 3.1.0 info: title: Retool Management Apps Users API description: The Retool Management API enables administrators to programmatically manage users, groups, permissions, apps, resources, workflows, folders, spaces, and source control integrations within a Retool organization. Authenticated via Bearer token generated in workspace settings. The API also supports SCIM 2.0 for enterprise identity provider provisioning via Okta and Azure AD. version: 1.0.0 contact: name: Retool Support url: https://support.retool.com license: name: Retool Terms of Service url: https://retool.com/terms termsOfService: https://retool.com/terms servers: - url: https://api.retool.com/v1 description: Retool Cloud API security: - bearerAuth: [] tags: - name: Users description: Create, read, update, and delete users within a Retool organization. Manage user roles (admin, standard, end-user) and activation status. paths: /users: get: operationId: listUsers summary: List Users description: Retrieves a paginated list of all users in the Retool organization. Returns user profiles including email, name, admin status, and group memberships. tags: - Users parameters: - $ref: '#/components/parameters/page' - $ref: '#/components/parameters/pageSize' responses: '200': description: Successfully retrieved a list of users. content: application/json: schema: $ref: '#/components/schemas/UserListResponse' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '500': $ref: '#/components/responses/InternalServerError' post: operationId: createUser summary: Create User description: 'Creates a new user in the Retool organization. The email address must be unique. User type determines default access level: default users have standard access while endUser accounts have limited access to embedded applications.' tags: - Users requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateUserRequest' responses: '201': description: Successfully created a new user. content: application/json: schema: $ref: '#/components/schemas/User' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '409': $ref: '#/components/responses/Conflict' '500': $ref: '#/components/responses/InternalServerError' /users/{userId}: get: operationId: getUser summary: Get User description: Retrieves the details of a specific user by their unique identifier. Returns the user's profile, admin status, and group memberships. tags: - Users parameters: - $ref: '#/components/parameters/userId' responses: '200': description: Successfully retrieved the user. content: application/json: schema: $ref: '#/components/schemas/User' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' put: operationId: updateUser summary: Update User description: Updates the details of a specific user. Supports updating the user's name, admin status, and active/disabled state. Uses full PUT semantics so all updatable fields should be provided. tags: - Users parameters: - $ref: '#/components/parameters/userId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateUserRequest' responses: '200': description: Successfully updated the user. content: application/json: schema: $ref: '#/components/schemas/User' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' delete: operationId: deleteUser summary: Delete User description: Permanently removes a user from the Retool organization. This action cannot be undone. The user will lose access to all apps and resources. tags: - Users parameters: - $ref: '#/components/parameters/userId' responses: '204': description: Successfully deleted the user. '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/InternalServerError' components: schemas: UserListResponse: type: object description: Paginated list of users. properties: data: type: array description: Array of user objects. items: $ref: '#/components/schemas/User' total: type: integer description: Total number of users in the organization. page: type: integer description: Current page number. pageSize: type: integer description: Number of records per page. Error: type: object description: An error response. properties: message: type: string description: A human-readable error message. code: type: string description: A machine-readable error code. UpdateUserRequest: type: object description: Request body for updating an existing user. properties: firstName: type: string description: The user's first name. lastName: type: string description: The user's last name. isAdmin: type: boolean description: Whether the user should have administrator privileges. isDisabled: type: boolean description: Whether to disable the user account. GroupRef: type: object description: A reference to a group. properties: id: type: integer description: The numeric group identifier. name: type: string description: The group name. User: type: object description: A Retool user account. properties: id: type: string format: uuid description: The unique identifier for the user. email: type: string format: email description: The user's email address (unique within the organization). firstName: type: string description: The user's first name. lastName: type: string description: The user's last name. isAdmin: type: boolean description: Whether the user has administrator privileges. isDisabled: type: boolean description: Whether the user account is disabled. userType: type: string description: The user type determining default access level. Default users have standard access; endUser accounts have limited access to embedded applications. enum: - default - endUser groups: type: array description: Groups the user is a member of. items: $ref: '#/components/schemas/GroupRef' createdAt: type: string format: date-time description: Timestamp when the user account was created. updatedAt: type: string format: date-time description: Timestamp when the user account was last updated. CreateUserRequest: type: object required: - email description: Request body for creating a new user. properties: email: type: string format: email description: The email address for the new user (must be unique). firstName: type: string description: The user's first name. lastName: type: string description: The user's last name. isAdmin: type: boolean description: Whether the user should have administrator privileges. default: false userType: type: string description: The user type (default or endUser). enum: - default - endUser default: default parameters: userId: name: userId in: path required: true description: The unique UUID identifier of the user. schema: type: string format: uuid page: name: page in: query required: false description: Page number for pagination (1-based). schema: type: integer minimum: 1 default: 1 pageSize: name: pageSize in: query required: false description: Number of records per page. schema: type: integer minimum: 1 maximum: 100 default: 100 responses: Unauthorized: description: Authentication failed. The Bearer token is missing or invalid. content: application/json: schema: $ref: '#/components/schemas/Error' BadRequest: description: The request was malformed or contained invalid parameters. content: application/json: schema: $ref: '#/components/schemas/Error' NotFound: description: The requested resource was not found. content: application/json: schema: $ref: '#/components/schemas/Error' Forbidden: description: Access denied. The token does not have the required permissions. content: application/json: schema: $ref: '#/components/schemas/Error' Conflict: description: A conflict occurred, such as a duplicate email address. content: application/json: schema: $ref: '#/components/schemas/Error' InternalServerError: description: An internal server error occurred. content: application/json: schema: $ref: '#/components/schemas/Error' securitySchemes: bearerAuth: type: http scheme: bearer description: 'Bearer token generated in Retool workspace settings under API Access Tokens. Format: Authorization: Bearer '