Members: Bulk Deactivate
Members: Bulk Deactivate
This script deactivates and deletes all users found, using a single parameter that can be configured in the script as a wildcard.
Refer to the Sigma REST API Recipes QuickStart for step-by-step instructions.
Example script
Node
// This script identifies users in Sigma matching a specified name pattern, retrieves their status, and deactivates (soft-deletes) them.// Load environment variables from a specific .env file for configurationrequire('dotenv').config({ path: 'sigma-api-recipes/.env' });// Import the function to obtain a bearer token from the authenticate-bearer moduleconst getBearerToken = require('../get-access-token');// Import Axios for making HTTP requestsconst axios = require('axios');// Load use-case specific variables from environment variablesconst baseURL = process.env.baseURL; // Base URL for the Sigma APIconst userNamePattern = new RegExp(process.env.USER_NAME_PATTERN, 'i'); // Regex pattern for user names (case-insensitive)const deactivateOnly = process.env.DEACTIVATE_ONLY === 'true'; // Boolean flag for deactivate-only mode// Function to fetch the isInactive status of a user by memberIdasync function fetchIsInactiveStatus(memberId, accessToken) {const url = `${baseURL}/members/${memberId}`; // API endpoint to get member detailsconsole.log(`Fetching isInactive status for memberId: ${memberId} at URL: ${url}`);try {const response = await axios.get(url, {headers: {Authorization: `Bearer ${accessToken}`,},});return response.data.isInactive || false; // Return isInactive status or false if not set} catch (error) {console.error(`Error fetching isInactive status for memberId: ${memberId}`, error.response ? error.response.data : error);return false; // Default to false if an error occurs}}// Function to list all members and filter by name using the regex patternasync function listUsers(accessToken) {const url = `${baseURL}/members?includeInactive=true`; // Include inactive users in the listconsole.log(`Listing users from: ${url}`);try {const response = await axios.get(url, {headers: {Authorization: `Bearer ${accessToken}`,},});// Filter users by name (firstName + lastName) using regex patternconst filteredUsers = response.data.entries.filter(user =>userNamePattern.test(`${user.firstName} ${user.lastName}`));// Fetch isInactive status for each filtered userconst usersWithStatus = [];for (const user of filteredUsers) {const isInactive = await fetchIsInactiveStatus(user.memberId, accessToken);if (!isInactive) {usersWithStatus.push({ ...user, isInactive });}}console.log('Filtered Users with isInactive Status:', usersWithStatus);return usersWithStatus;} catch (error) {console.error(`Error fetching users: ${error}`);return [];}}// Function to "soft-delete" (deactivate) a memberasync function deleteUser(user, accessToken) {try {const url = `${baseURL}/members/${user.memberId}`;const response = await axios.delete(url, {headers: {Authorization: `Bearer ${accessToken}`,Accept: 'application/json',},});console.log(`Deactivated (deleted) user: ${user.firstName} ${user.lastName} (ID: ${user.memberId})`);console.log('Response:', response.data);} catch (error) {console.error(`Error deactivating (deleting) user ${user.firstName} ${user.lastName}:`, error.response ? error.response.data : error);}}// Main function to manage the overall workflowasync function main() {const accessToken = await getBearerToken();if (!accessToken) {console.error('Failed to obtain Bearer token.');return;}const users = await listUsers(accessToken);if (users.length > 0) {console.log(`Found ${users.length} active user(s) matching the pattern.`);for (const user of users) {await deleteUser(user, accessToken); // Deactivate the userif (!deactivateOnly) {console.warn('Delete functionality is disabled in the current implementation.');}}} else {console.log('No active users matched the specified pattern.');}}// Execute the main functionmain();
Response Example
{"success":true}
Endpoints used
- Get authentication token:
GET BearerTokenfunction - List all users:
GET /v2/members - Deactivate a user:
PATCH /v2/members/{memberId}

