# Zluri Developers Documentation ## Guides - [Best Practices](https://developers.zluri.com/docs/best-practices.md) - [Data Entities](https://developers.zluri.com/docs/data-entities.md) - [Getting Started with SDK](https://developers.zluri.com/docs/getting-started-with-sdk.md) - [Recurring Sync Flow](https://developers.zluri.com/docs/every-time-sync-flow.md) - [One-time Setup Flow](https://developers.zluri.com/docs/one-time-setup.md) - [Post Sync Flow](https://developers.zluri.com/docs/post-sync.md) - [Custom Integrations: SDK](https://developers.zluri.com/docs/custom-integrations.md) - [Prerequisites](https://developers.zluri.com/docs/prerequisites.md) - [Support & FAQs](https://developers.zluri.com/docs/support-faqs.md) - [Troubleshooting](https://developers.zluri.com/docs/troubleshooting.md) - [Understanding Notification Emails](https://developers.zluri.com/docs/understanding-notification-emails.md) - [Use Cases](https://developers.zluri.com/docs/use-cases.md) - [Build with Zluri](https://developers.zluri.com/docs/build-with-zluri.md) - [Filters](https://developers.zluri.com/docs/filters.md) - [Use Cases](https://developers.zluri.com/docs/use-cases-1.md) ## API Reference - [Data Entities](https://developers.zluri.com/reference/data-entities.md) - [Create Integration Instance](https://developers.zluri.com/reference/createsdkinstance.md): Creates a new SDK integration instance for connecting a custom application to Zluri. Each custom integration represents a unique configuration that enables you to sync users, roles, activities, and other app-specific data into Zluri. ### Prerequisites - The application must be registered in Zluri - Notification email addresses must belong to existing Zluri users - The Custom Integration names must be unique within your organization ### Post-Creation Steps 1. Use the returned instance_id for all subsequent operations 2. You must initialize a sync to begin importing data. 3. You can monitor sync results via notification emails. - [Finish Sync](https://developers.zluri.com/reference/finishsyncv2.md): Marks a sync session as complete and triggers Zluri's data processing pipeline. This endpoint validates that all expected data has been uploaded successfully before processing begins. ### Pre-Completion Checklist - All data batches must be successfully uploaded - No schema validation errors should exist - Any failed page uploads must be retried ### Post-Completion Process - Data validation and deduplication happen for the data uploaded - Uploaded data is mapped to Zluri’s core data model - As required, notifications are sent to the configured email recipients - Data becomes visible in the Zluri dashboard ### Error Handling If validation fails, the response will include: - Detailed error report - Links to raw uploaded data - Schema and processing validation errors - [Get Entity Data Schemas](https://developers.zluri.com/reference/getentityschemas.md): Retrieves the list of entity data schemas supported by the Zluri SDK. Each schema defines the expected structure and required fields for a particular type of data (e.g., users, groups, activities). ### Available Entities - **users**: Employee and user account information - **user_activity**: Application usage and login events - **groups**: Organizational groups and teams - **group_users**: Group membership mappings - **transactions**: Financial transactions and purchases - **contracts**: Software contracts and agreements ### Schema Features - Schemas include field types, validation rules, and allowed values - Use these schemas to validate your data structure before uploading - Schema ensures compatibility with Zluri's internal data engine, ensuring data integrity and consistency - [Start Data Sync](https://developers.zluri.com/reference/initinstancesync.md): Initiates a new data synchronization process for the specified integration instance. This creates a sync session that allows you to upload data in batches. Only one active sync is allowed per instance at any time. ### Prerequisites 1. The integration instance must already be created and active. 2. No other sync session should be active for the instance. 3. Use a valid instance_id in the URL path. ### Sync Workflow 1. Start sync using this endpoint to receive a sync_id. 2. Upload data in batches using the sync_id with the upload data endpoint. 3. Finish sync to trigger data processing ### Important Notes - If an active sync already exists, you must complete or abort it before starting a new one. - Use the returned sync_id for all data upload operations - Monitor sync progress through the instance's notification emails - [Upload Incremental Data](https://developers.zluri.com/reference/uploadincrementaldata.md): Uploads time-series or event-based data that accumulates over time. Unlike snapshot data, incremental data is appended to existing records rather than replacing them. This is best suited for logs, transactions, and historical activity streams. ### Incremental Data Characteristics - **Appended** to existing data; previous data is retained - Usually includes **timestamps** - Ideal for capturing **activity logs**, **transaction records**, and **event timelines** ### Supported Incremental Entities - `user_activity`: Login or activity events from apps - `transactions`: SaaS payments and subscription spend - `contracts`: Vendor contract metadata - [Upload Snapshot Data](https://developers.zluri.com/reference/uploadsnapshotdata.md): Uploads a batch of snapshot data for the specified entity type during an active sync session. Snapshot data represents the complete current state of an entity (users, groups etc.) and replaces any previously stored records in Zluri. ### Data Upload Guidelines - Maximum 1000 records per request - Data must adhere to the entity's JSON schema - Use page numbers to upload large datasets in multiple batches - Failed uploads can be retried with the same page number ### Supported Snapshot Entities - `users` : Employee or user profile details - `groups` : Organisational or functional groups - `group_users`: Mapping of users to their groups - [Getting Started with SDK](https://developers.zluri.com/reference/getting-started-with-sdk.md) - [Custom Integration: SDKs](https://developers.zluri.com/reference/custom-integration-sdks.md) - [Get Sync Details](https://developers.zluri.com/reference/getsyncdetails.md): Retrieves comprehensive details about a specific synchronization session, including upload history, validation results, and downloadable links to raw data and error reports. This endpoint is essential for troubleshooting sync issues and verifying data uploads. ### Response Information - Complete upload history with page-level details - Validation status for each uploaded batch - Signed URLs for downloading raw data (valid for limited time) - Error reports for debugging failed uploads ### Pagination Large syncs may have hundreds of pages. Use offset and limit parameters to navigate through the results efficiently. - [Abort Active Synchronization](https://developers.zluri.com/reference/killsync.md): Forcefully terminates an active synchronization session. Use this endpoint when you need to abandon a sync due to errors, incorrect data, or to start a fresh sync. This action is irreversible. ### When to Use - Data quality issues discovered mid-sync - Need to restart with corrected data - Configuration changes require a fresh start ### Limitations - Only syncs with status **started** can be aborted - Completed or failed syncs **cannot** be terminated - Any uploaded data is **permanently discarded** - [List Integration Instances](https://developers.zluri.com/reference/listsdkinstances.md): Retrieves a paginated list of all SDK integration instances in your organization. Use this endpoint to monitor the status of your custom integrations, identify instances that need attention, and manage your integration ecosystem. ### Filtering Options - Filter by status to quickly identify failed or inactive instances. Allowed values are connected, not-connected or error. - Use pagination parameters to handle large datasets seamlessly. - Results include configuration details and current status for each integration - [Get Integration Syncs](https://developers.zluri.com/reference/listsyncsfororginstance.md): Retrieves the synchronisation history for a specific SDK integration instance. This endpoint helps you track past and ongoing sync operations, identify failures, and monitor the overall data import timeline for your custom applications. ### Response Details - Returns both active and completed syncs - Includes sync status and timing information - Useful for troubleshooting and verifying sync operations - [Update Integration Instance](https://developers.zluri.com/reference/updateorginstance.md): Updates the configuration of an existing SDK integration instance. Currently supports updating notification email addresses, which determine who receives alerts about sync failures, data validation issues, and other important events related to the integration, as well as updating the status of the instance (connected, not-connected) to reflect its current connection state. ### Constraints - Only notification emails and status of the instance can be updated - Email addresses must belong to active Zluri users - Maximum 3 notification emails per instance - [Prerequisites](https://developers.zluri.com/reference/prerequisites.md) - [Use Cases](https://developers.zluri.com/reference/use-case.md) - [Authentication](https://developers.zluri.com/reference/authentication-1.md) - [Introduction](https://developers.zluri.com/reference/introduction.md) - [Pagination](https://developers.zluri.com/reference/pagination.md) - [Rate Limits](https://developers.zluri.com/reference/rate-limits.md) - [Add New Application](https://developers.zluri.com/reference/addapplication.md): This endpoint allows you to add a new application to your organization. **Fields Table:** | Field | Required | Type | Description / Allowed Values | |---------------------------|----------|---------|---------------------------------------------------------------| | `app_name` | Yes | string | Application name (must be unique) | | `app_type` | No | string | One of: `application`, `website`, `device`, `browser`, `other` (default: `application`) | | `app_status` | No | string | One of: `active`, `inactive` (default: `active`) | | `app_owner_id` | No | string | Application owner ID (must be a valid user ID) | | `app_technical_owner_id` | No | string | Technical owner ID (must be a valid user ID) | | `app_financial_owner_id` | No | string | Financial owner ID (must be a valid user ID) | | `app_tags` | No | array | Array of application tags | | `app_custom_fields` | No | array | Array of custom field objects (see below) | **Custom Fields Format:** - Each object in `app_custom_fields`: - `field_id`: Unique identifier of the custom field - `field_value`: Value to set for the custom field **Notes:** - Only `app_name` is required. - If `app_status` or `app_type` is not provided, default values of `active` and `application` will be applied respectively. - All validations will be applied during application creation - Custom field IDs must be valid and accessible to your organization - [Add User to Application](https://developers.zluri.com/reference/addapplicationuser.md): This endpoint allows you to add a user to a specific application in your organization. **Fields Table:** | Field | Required | Type | Description / Allowed Values | |--------------|----------|--------|--------------------------------------------| | `user_email` | Yes | string | User's email address (must be a valid user in the organization) | **Use Cases:** - Add existing users to applications for access management - Assign users to applications for license tracking - Establish user-application relationships for monitoring - Grant application access to specific users **Notes:** - The user must already exist in your organization - The application must be a valid application in your organization - If the user is already associated with the application, the operation will fail with an error - The user will be added with default settings and can be configured later using the update endpoint - [Get Application Details](https://developers.zluri.com/reference/getapplicationdetail.md): This endpoint returns detailed information for a specific application. - [Get Application User Details](https://developers.zluri.com/reference/getapplicationuser.md): This endpoint returns detailed information about a user associated with a specific application, including user details, application roles, license assignments, cost and usage metrics, optimization status, and integration source information. - [List Applications](https://developers.zluri.com/reference/listapplications.md): This endpoint fetches application data based on filters like name, status, type, state, and usage metrics. Supports pagination and sorting. **Supported Filters:** | Field | Type | Description / Allowed Values | |--------------------------------------|---------|---------------------------------------------------------------------------------------------| | `app_name` | string | Application name | | `app_id` | string | Application ID | | `app_authorization_status` | enum | `restricted`, `needs review`, `centrally managed`, `team managed`, `individually managed`, `unmanaged` | | `app_status` | enum | `active`, `inactive` | | `app_type` | enum | `application`, `website`, `device`, `browser`, `other` | | `app_owner_id` | string | Application owner ID | | `app_owner_email` | string | Application owner email | | `app_technical_owner_id` | string | Technical owner ID | | `app_technical_owner_email` | string | Technical owner email | | `app_financial_owner_id` | string | Financial owner ID | | `app_financial_owner_email` | string | Financial owner email | | `app_category` | string | App category name | | `app_sub_category`| string | App sub category ID | | `app_archive` | boolean | Is Archived | | `app_is_custom` | boolean | Is Custom | | `app_chargeback` | string | Chargeback | | `app_discovered` | range | Discovered On (date range) | | `app_last_used` | range | Last Used (date range) | | `app_usage` | number | Application usage | | `app_threat_level` | number | Maximum risk score | | `source_array` | object | Sources | | `primary_source_array` | object | Primary Source | | `sso_source_array` | object | SSO Source | | `agent_source_array` | object | Agent Source | | `app_logo_present` | boolean | Whether app logo is present | **Date Range Filter Format:** For filtering by date/time fields, use the `field_order` parameter to specify comparison operators: **Date Range Filter (Between two dates):** ```json { "field_id": "app_discovered", "field_values": ["2025-11-12", "2025-11-13"], "field_order": ["gte", "lte"] } ``` **Single Date Comparison:** ```json { "field_id": "app_last_used", "field_values": ["2025-11-12"], "field_order": ["gte"] } ``` **Available Field Order Operators:** - `gte` - Greater than or equal to - `lte` - Less than or equal to - `eq` - Equal to - `ne` - Not equal to - `lt` - Less than - `gt` - Greater than **Custom Fields Filter Format:** ```json { "field_id": "custom_fields", "field_values": { "custom_field_id": "679b613f315ee0a11cb67bd1", "custom_field_values": ["India"] } } ``` Use these as `field_id` values inside the `filter_by` array in the request body to filter results. For custom fields, the `field_id` will always be `custom_fields`, while the `field_values` object must contain `custom_field_id` (the ID of the custom field) and `custom_field_values` (an array of values to filter by). - [List Application Users](https://developers.zluri.com/reference/listapplicationusers.md): This endpoint retrieves a list of users associated with a specific application. Supports advanced filtering, pagination, sorting, and search. **Supported Filter Fields:** | Field | Type | Description / Allowed Values | |--------------------------------|----------|-----------------------------------------------------| | `user_app_status` | string | User Application Status | | `licenses` | string | License ID | | `user_app_role` | string | Role | | `user_status` | string | User Status | | `user_archive` | boolean | User Archive | | `user_app_archive` | enum | User App Archive (`true`, `false`) | | `user_app_last_used` | string | Last Used (date/time) | | `source_array` | object | Source | | `user_app_discovered` | string | Discovery Date (date/time) | | `user_account_type` | string | User Account Type | | `dept_id` | string | Department | | `user_designation` | string | Designation | | `user_reporting_manager`| string | Reporting Manager | | `license_mapped` | boolean | License mapping status (`true` for licensed users, `false` for unlicensed users) | | `custom_fields` | object | Custom Fields (see format below) | **License Mapped Filter:** To filter users based on license assignment status: ```json { "field_id": "license_mapped", "field_values": [true] } ``` - `[true]` - Shows only users who have licenses assigned - `[false]` - Shows only users who do not have licenses assigned - If not applied - Shows all users (both licensed and unlicensed) **Source Array Filter Format:** For filtering by source information (integrations, agents, etc.), use the following format: **Manual Source Filter:** ```json { "field_id": "source_array", "field_values": [ { "key": "keyword", "value": ["manual"], "value_type": "string" } ], "is_only": false } ``` **Integration Source Filter:** ```json { "field_id": "source_array", "negative": false, "field_values": [ { "key": "org_integration_id", "value_type": "objectId", "value": ["681047a5b5c755b83e0ff982"] } ], "is_only": false } ``` **Available Source Keys:** - `keyword` - Source keyword (e.g., "manual", "okta", "slack") - `org_integration_id` - Organization integration ID - `global_agent_id` - Global agent ID **Date Range Filter Format:** For filtering by date/time fields, use the `field_order` parameter to specify comparison operators: **Date Range Filter (Between two dates):** ```json { "field_id": "user_app_last_used", "field_values": ["2025-11-12", "2025-11-13"], "field_order": ["gte", "lte"] } ``` **Single Date Comparison:** ```json { "field_id": "user_app_discovered", "field_values": ["2025-11-12"], "field_order": ["gte"] } ``` **Available Field Order Operators:** - `gte` - Greater than or equal to - `lte` - Less than or equal to - `eq` - Equal to - `ne` - Not equal to - `lt` - Less than - `gt` - Greater than **Custom Fields Filter Format:** For filtering by custom fields, use: ```json { "field_id": "custom_fields", "field_values": { "custom_field_id": "679b613f315ee0a11cb67bd1", "custom_field_values": ["India"] } } ``` - [Update Application Details](https://developers.zluri.com/reference/updateapplication.md): This endpoint allows you to update specific details of an application within your organization. The following fields can be updated: | Field | Type | Description / Allowed Values | |------------------------|----------|---------------------------------------------| | `app_name` | string | Application Name | | `app_status` | string | Application Status (active, inactive) | | `app_type` | string | Application Type (application, website, device, browser, other) | | `app_tags` | array | Application Tags | | `app_owner_id` | string | Application Owner | | `app_technical_owner_id` | string | IT Owner | | `app_financial_owner_id` | string | Finance Owner | | `app_budget` | number | Application Budget | | `archive` | boolean | Archive Status | | `app_custom_fields` | array | Custom Fields (see format below) | **Custom Fields Format:** For updating custom fields, provide an array of objects with: - `field_id`: The unique identifier of the custom field - `field_value`: The value to set for the custom field - `custom_field_name` (optional): The name of the custom field **Important Notes:** - Only the fields provided in the request body will be updated - Existing values for fields not included in the request will remain unchanged - All field validations will be applied during the update process - Invalid field values or IDs will result in an error response - [Update Application User](https://developers.zluri.com/reference/updateapplicationuser-1.md): This endpoint allows you to update specific fields of a user's association with an application. You can modify the user's role within the application, optimization inclusion settings, archive status, license assignments, and application user status. **Supported Fields Table:** | Field | Type | Description / Allowed Values | |--------------------------------|----------|---------------------------------------------------------------------------------------------| | `user_app_role` | string | The role of the user within the application | | `optimization_inclusion` | enum | Optimization inclusion (`include for all optimizations`, `exclude for all optimizations`, `exclude for undeprovisioned`, `exclude for unused`) | | `user_app_archive` | boolean | Whether the user's association with this application is archived | | `assign_licenses` | array | Array of license IDs to assign to the user for this application (must be valid ObjectIds) | | `user_app_status` | enum | Application user status (`active`, `inactive`) | **Key Features:** - **Partial Updates**: Only include the fields you want to update in the request body - **Role Management**: Update the user's role within the specific application - **Optimization Control**: Exclude users from specific optimization types (undeprovisioned, unused, all, none) - **Archive Management**: Update the user's archive status for the application - **License Assignment**: Assign specific licenses to the user for this application - **Status Management**: Update the user's status for this application **Important Notes:** - All fields in the request body are optional - only include fields you want to update - The `optimization_inclusion` field controls whether the user is excluded from optimization processes for this specific application - The `assign_licenses` field accepts an array of license IDs to assign to the user for this application (must be valid ObjectIds) - The `user_app_status` field accepts `active` or `inactive` as string values - Both `appId` and `userId` must be valid ObjectIds - All validations will be applied during the update process - [Retrieve Audit Logs](https://developers.zluri.com/reference/getauditlogs.md): Fetches audit logs for your organization within a specified date range. This endpoint provides detailed activity records including user actions, system events, automation rule executions, and configuration changes. The response is paginated to handle large volumes of audit data efficiently. ### Use Cases - Compliance reporting and security audits - Investigating user activities and access patterns - Monitoring automation rule executions - Tracking configuration changes ### Date Range Limitations - Maximum range: 7 days per request - Default range: Last 7 days if not specified - If the range exceeds 7 days, the system automatically adjusts to return logs from 7 days before the end_date - [List Contracts](https://developers.zluri.com/reference/listcontracts.md): This endpoint fetches contract data based on filters like name, dates, status, and other contract attributes. Supports pagination and sorting. **Supported Filters:** | Field | Type | Description / Allowed Values | |--------------------------|----------|----------------------------------------------------------------| | `contract_id` | string | Contract ID | | `contract_name` | string | Contract name | | `contract_status` | enum | Contract status | | `contract_start_date` | date | Contract start date (ISO 8601 format, use with field_order) | | `contract_end_date` | date | Contract end date (ISO 8601 format, use with field_order) | | `contract_renew_by` | date | Contract renewal date (ISO 8601 format, use with field_order) | | `contract_cancel_by` | date | Contract cancellation date (ISO 8601 format, use with field_order) | | `archive` | boolean | Archive status (true/false) | **Date Range Filtering:** For date fields, use `field_order` with operators: - `gte` - Greater than or equal to - `lte` - Less than or equal to - `eq` - Equal to - `ne` - Not equal to - `lt` - Less than - `gt` - Greater than **Example Date Filter:** ```json { "field_id": "contract_start_date", "field_order": ["gte"], "field_values": ["2023-10-01"] } ``` **Custom Fields Filter Format:** ```json { "field_id": "custom_fields", "field_values": { "custom_field_id": "679b613f315ee0a11cb67bd1", "custom_field_values": ["India"] } } ``` Use these as `field_id` values inside the `filter_by` array in the request body to filter results. For custom fields, the `field_id` will always be `custom_fields`, while the `field_values` object must contain `custom_field_id` (the ID of the custom field) and `custom_field_values` (an array of values to filter by). - [Get Optimization Summary](https://developers.zluri.com/reference/getopimizationsummary.md): This endpoint retrieves the optimization summary for your organization, including realized and potential savings for applications. - [Get Organization Custom Fields](https://developers.zluri.com/reference/getorgcustomfields-1.md): This endpoint retrieves all custom field definitions configured for the organization. The response includes custom fields for different entities: - `users` → Custom fields defined for user entities - `applications` → Custom fields defined for application entities - `vendors` → Custom fields defined for vendor entities - `contracts` → Custom fields defined for contract entities - `departments` → Custom fields defined for department entities - `request_licenses` → Custom fields defined for license request entities - `transactions` → Custom fields defined for transaction entities Each custom field includes: - `field_id` → Unique identifier for the field - `field_name` → Display name of the field - `field_type` → Type of field (text, date, bool, select, reference) - `field_options` → Available options (only for select type fields) - [Get Organization Details](https://developers.zluri.com/reference/getorgdetails-1.md): This endpoint retrieves organization details including name, financial year start/end, currency, and owner information for the specified organization. - [Get Organization Overview](https://developers.zluri.com/reference/getorgoverview-1.md): This endpoint retrieves an overview of organization metrics including active users, applications, average usage, and renewals for the specified month and year. - [List Admins](https://developers.zluri.com/reference/listadmins.md): This endpoint fetches admin data based on filters like user_name, user_email, user_status, user_role, user_last_login. Supports pagination and sorting. **Supported Filters Table:** | Field | Type | Description / Allowed Values | |------------------|--------------|---------------------------------------------------------------| | `user_name` | string | User Name | | `user_email` | string | User Email | | `user_status` | enum | User Status (`active`, `inactive`, `suspended`, `unknown`) | | `user_role` | string | Role Name | | `user_last_login`| date_range | Last Login (date range, ISO 8601 format) | **Date Range Filter Format:** For filtering by date/time fields, use the `field_order` parameter to specify comparison operators: **Date Range Filter (Between two dates):** ```json { "field_id": "user_last_login", "field_values": ["2025-11-12", "2025-11-13"], "field_order": ["gte", "lte"] } ``` **Single Date Comparison:** ```json { "field_id": "user_last_login", "field_values": ["2025-11-12"], "field_order": ["gte"] } ``` **Available Field Order Operators:** - `gte` - Greater than or equal to - `lte` - Less than or equal to - `eq` - Equal to - `ne` - Not equal to - `lt` - Less than - `gt` - Greater than Use these as `field_id` values inside the `filter_by` array in the request body to filter results. - [Add or Update Admin Role](https://developers.zluri.com/reference/updateuserrole.md): This endpoint allows you to add a new admin or update the role of an existing admin user by providing the user's email and the new `role_id`. **Supported Fields Table:** | Field | Type | Description / Allowed Values | |-----------|--------|--------------------------------------------| | `email` | string | The email address of the admin user | | `role_id` | string | The unique identifier of the role to assign | **Notes:** - If the user does not exist as an admin, they will be added as a new admin. - If the user already exists, their role will be updated. - [Add New User](https://developers.zluri.com/reference/adduser.md): This endpoint allows you to add a new user to your organization. **Fields Table:** | Field | Required | Type | Description / Allowed Values | |------------------------|----------|---------|---------------------------------------------------------------------------------------------| | `user_name` | Yes | string | User's full name | | `user_email` | Yes | string | User's primary email address (must be unique) | | `user_designation` | No | string | User's job title/designation | | `user_status` | No | enum | User status (`active`, `inactive`, `suspended`) | | `user_department_id` | No | string | Department ID where the user belongs | | `account_type` | No | enum | Type of user account (`employee`, `external`, `service`, `group`) | | `reporting_manager_email` | No | string | Email address of the user's reporting manager | | `user_personal_email` | No | string | User's personal email address | | `user_custom_fields` | No | array | Array of custom field values (see example below) | | `onboardingData` | No | object | Onboarding assignment details (see example below) | **Custom Fields Format Example:** ```json [ { "field_id": "679b613f315ee0a11cb67bd0", "field_value": "New York" } ] ``` **Onboarding Data Format Example:** ```json { "assigned_to": "679b5a0a315ee0a11cb4e79b", "date": "2025-08-26", "time": "12:00 AM", "timezone_id": "64184b3bec8af4b1d7caa05f" } ``` **Notes:** - Email addresses must be unique within the organization. - Department ID must exist in the organization. - Reporting manager email must be a valid user email in the organization. - Custom field IDs must be valid and accessible to your organization. - All validations will be applied during user creation. - [Get User Associations](https://developers.zluri.com/reference/getuserassociation.md): This endpoint returns all associations for a specific user, including applications and contracts where the user is an owner, IT owner, finance owner, negotiation owner, reporting manager, or vendor owner. **Request Body Table:** | Field | Required | Type | Description | |--------------|----------|--------|----------------------------| | `user_email` | Yes | string | The email of the user to retrieve associations for. | - [Get User Details](https://developers.zluri.com/reference/getuserdetail.md): This endpoint returns detailed information for a specific user, including user profile, reporting structure, department, usage, cost, business unit, integration sources, and application usage statistics. - [Get User IDs by Emails](https://developers.zluri.com/reference/getuseridsbyemails.md): This endpoint retrieves user IDs and details for users based on their email addresses or alternate email addresses. It accepts a list of email addresses and returns the corresponding user information including user ID, organization ID, user name, primary email, and alternate emails. **Request Body Table:** | Field | Required | Type | Description | |----------|----------|----------|------------------------------------------------| | `emails` | Yes | string[] | Array of email addresses to look up user IDs for | **Use Cases:** - Bulk user ID lookup for integration purposes - Mapping email addresses to Zluri user IDs - User verification and validation workflows - Data synchronization between systems **Response Fields:** - `user_id` → User ID - `org_id` → Organization ID - `user_name` → User Name - `user_email` → Primary Email Address - `alternate_emails` → Array of Alternate Email Addresses - [List All Applications Used by a User](https://developers.zluri.com/reference/listuserapplications.md): This API returns a list of applications used by a specific user in your organization. The response includes both system and custom fields for each application, allowing rich filtering and visibility. **Supported Filters Table:** | Field | Type | Description / Allowed Values | |-------------------------|---------|---------------------------------------------------------------------------------------------| | `user_app_status` | string | User Application Status (`active`, `inactive`, etc.) | | `user_app_last_used` | string | Last Used (date/time, ISO 8601 format) | | `app_archive` | boolean | App Archive (true/false) | | `user_app_archive` | boolean | User App Archive (true/false) | | `app_type` | string | App Type (`application`, `website`, `device`, `browser`, `other`) | | `source_array` | object | Source | | `user_app_discovered` | string | Discovery Date (date/time, ISO 8601 format) | | `app_authorization_status` | string | Authorisation Status (`restricted`, `needs review`, `centrally managed`, etc.) | | `user_archive` | boolean | User Archive (true/false) | | `custom_fields` | object | Custom Fields (see example below) | **Source Array Filter Format:** For filtering by source information (integrations, agents, etc.), use the following format: **Manual Source Filter:** ```json { "field_id": "source_array", "field_values": [ { "key": "keyword", "value": ["manual"], "value_type": "string" } ] } ``` **Integration Source Filter:** ```json { "field_id": "source_array", "negative": false, "field_values": [ { "key": "org_integration_id", "value_type": "objectId", "value": ["681047a5b5c755b83e0ff982"] } ] } ``` **Available Source Keys:** - `keyword` - Source keyword (e.g., "manual", "okta", "slack") - `org_integration_id` - Organization integration ID - `global_agent_id` - Global agent ID **Date Range Filter Format:** For filtering by date/time fields, use the `field_order` parameter to specify comparison operators: **Date Range Filter (Between two dates):** ```json { "field_id": "user_app_last_used", "field_values": ["2025-11-12", "2025-11-13"], "field_order": ["gte", "lte"] } ``` **Single Date Comparison:** ```json { "field_id": "user_app_discovered", "field_values": ["2025-11-12"], "field_order": ["gte"] } ``` **Available Field Order Operators:** - `gte` - Greater than or equal to - `lte` - Less than or equal to - `eq` - Equal to - `ne` - Not equal to - `lt` - Less than - `gt` - Greater than **Example Custom Field Filter:** ```json { "field_id": "custom_fields", "field_values": { "custom_field_id": "679b613f315ee0a11cb67bd1", "custom_field_values": ["India"] } } ``` **Filtering, Sorting, Pagination, and Search:** - Use the `filter_by` array in the request body to filter by system or custom fields. - For custom fields, use `field_id: custom_fields` and provide `custom_field_id` and `custom_field_values`. - Use the `sort_by` array to sort by any field (e.g., `app_name`, `user_app_last_used`). - Use `page` and `page_size` for pagination. - Use `search_query` for comma-separated search terms to filter app names. - [List Users](https://developers.zluri.com/reference/listusers.md): This endpoint fetches user data based on filters like name, status, archive state, usage metrics, reporting manager, and cost center. Supports pagination and sorting. **Supported Filters Table:** | Field | Type | Description / Allowed Values | |-------------------------|---------|---------------------------------------------------------------------------------------------| | `user_id` | string | User ID | | `user_name` | string | User Name | | `user_email` | string | User Email | | `user_status` | enum | User Status (`active`, `inactive`, `suspended`, `unknown`) | | `user_account_type` | enum | Account Type (`group`, `employee`, `service`, `external`) | | `user_department_id` | string | Department ID | | `user_designation` | string | Job Title | | `user_owner_id` | string | Owner | | `user_alternate_emails` | string | Alternate Emails | | `source_array` | object | Sources | | `primary_source` | object | Primary Source | | `user_joining_date` | range | Joining Date (range) | | `user_created_at` | range | Created On (range) | | `user_archive` | boolean | Archive Status | | `user_usage` | range | Usage (Score) (range) | | `optimization_inclusion`| enum | Optimization Inclusion (`Excluded for all Optimizations`, `Excluded for Unused`, `Excluded for Undeprovisioned`, `Included for all Optimizations`) | | `user_reporting_manager_id` | string | Reporting Manager ID (the id of the reporting manager) | | `user_cost_center_id` | string | Cost Center ID | | `custom_fields` | object | Custom Fields (see example below) | **Source Array Filter Format:** For filtering by source information (integrations, agents, etc.), use the following format: **Manual Source Filter:** ```json { "field_id": "source_array", "field_values": [ { "key": "keyword", "value": ["manual"], "value_type": "string" } ] } ``` **Integration Source Filter:** ```json { "field_id": "source_array", "negative": false, "field_values": [ { "key": "org_integration_id", "value_type": "objectId", "value": ["681047a5b5c755b83e0ff982"] } ] } ``` **Available Source Keys:** - `keyword` - Source keyword (e.g., "manual", "okta", "slack") - `org_integration_id` - Organization integration ID - `global_agent_id` - Global agent ID **Date Range Filter Format:** For filtering by date/time fields, use the `field_order` parameter to specify comparison operators: **Date Range Filter (Between two dates):** ```json { "field_id": "user_joining_date", "field_values": ["2025-11-12", "2025-11-13"], "field_order": ["gte", "lte"] } ``` **Single Date Comparison:** ```json { "field_id": "user_created_at", "field_values": ["2025-11-12"], "field_order": ["gte"] } ``` **Available Field Order Operators:** - `gte` - Greater than or equal to - `lte` - Less than or equal to - `eq` - Equal to - `ne` - Not equal to - `lt` - Less than - `gt` - Greater than **Example Custom Field Filter:** ```json { "field_id": "custom_fields", "field_values": { "custom_field_id": "679b613f315ee0a11cb67bd1", "custom_field_values": ["India"] } } ``` Use these as `field_id` values inside the `filter_by` array in the request body to filter results. - [Update User](https://developers.zluri.com/reference/updateuser.md): This endpoint allows you to update specific fields of a User. You can modify user information including name, email, status, account type, designation, department, archive status, personal email, reporting manager, primary source integration details, optimization inclusion settings, and custom fields. **Supported Fields Table:** | Field | Type | Description / Allowed Values | |--------------------------------|---------|---------------------------------------------------------------------------------------------| | `user_name` | string | User's display name | | `user_email` | string | User's primary email address (must be a valid email) | | `user_personal_email` | string | Personal email address (must be a valid email) | | `user_department_id` | string | Department ID (must be a valid ObjectId) | | `user_status` | enum | User status (`active`, `inactive`, `suspended`, `unknown`) | | `reporting_manager_id` | string | Reporting manager user ID (must be a valid ObjectId) | | `user_designation` | string | Job title/designation | | `user_account_type` | enum | Account type (`group`, `service`, `employee`, `external`) | | `user_archive` | boolean | Archive status | | `optimization_inclusion` | enum | Optimization inclusion (`include for all optimizations`, `exclude for all optimizations`, `exclude for undeprovisioned`, `exclude for unused`) | | `primary_source` | object | Primary source integration details (see below) | | `primary_source.keyword` | string | Integration keyword (required if primary_source is provided) | | `primary_source.org_integration_id` | string | Organization integration ID (must be a valid ObjectId) | | `primary_source.integration_id` | string | Integration ID (must be a valid ObjectId) | | `user_custom_fields` | array | Array of custom field objects (`field_id`, `field_value`) | **Notes:** - All fields are optional; only include fields you want to update. - Email fields must be valid emails. - IDs must be valid ObjectIds. - `user_status` supports: `active`, `inactive`, `suspended`, `unknown`. - `user_account_type` supports: `group`, `service`, `employee`, `external`. - `optimization_inclusion` supports: `include for all optimizations`, `exclude for all optimizations`, `exclude for undeprovisioned`, `exclude for unused`. - `primary_source` fields are required together if provided. - [Get Workflow run log details](https://developers.zluri.com/reference/getworkflowrunlog.md): This endpoint fetches workflow run log details like workflow status, action details and total completed actions etc given runlog id - [Execute Workflow with Variables](https://developers.zluri.com/reference/runworkflowv2.md): Workflow execution endpoint that supports passing custom variables to workflows. This enables dynamic workflow behavior based on runtime parameters, making workflows more flexible and reusable across different scenarios. ### Key Features - Pass custom variables to influence workflow behavior - Support for multiple user executions with different variable values - Request tracking via requestId for audit purposes ## Recipes - [Create a Custom Integration & Upload Snapshot Data](https://developers.zluri.com/recipes/create-a-custom-integration-upload-snapshot-data.md)