Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Introduction to Lifecycle Management implementation, dashboard, and activity monitoring in Veza
Start here to understand Lifecycle Management fundamentals, monitor your LCM environment, and track workflow execution.
After reviewing the getting started materials:
Configure Integrations: Enable your identity sources and target applications for LCM. See .
Set Up Identities: View and manage identities from your configured sources. See .
Create Access Profiles: Define birthright entitlements for user segments. See .
For an end-to-end walkthrough using Workday, Okta, and Active Directory, see .
Build Policies: Automate JML workflows with conditions and actions. See Policies.
Architecture overview and foundational concepts for deploying Lifecycle Management
Monitor policy status, workflow execution, and identity health at a glance
Track and audit all LCM actions, errors, and events
Configure automation policies, workflow triggers, notifications, and access reviews in Lifecycle Management
Policies define the rules and actions for managing identities throughout their lifecycle. Workflows within policies execute based on specific conditions, automating processes such as onboarding, role changes, and offboarding.
Policies: Top-level configuration for a source of identity that defines which workflows apply
Workflows: Sequences of actions that execute when specific conditions are met
Trigger Conditions: Boolean expressions using SCIM filter syntax (e.g., is_active eq true)
- Define birthright entitlements for provisioning actions
- Format attributes when provisioning accounts
Managing identities and identity override attributes in Veza Lifecycle Management
Identities are the core entities in Lifecycle Management. They represent the people in your organization, sourced from HR systems, identity providers, ITSM platforms, payroll systems, custom OAA applications, or flat files. See Integrations for the full list of supported identity sources.
Source of Identity: The authoritative system (such as Workday or Okta) that provides identity data
Identity Attributes: Properties like first name, last name, email, department, and manager
Override Attributes: Custom attributes that can supplement or override source-provided values
- How source attributes map to Veza
- Computed attributes for advanced logic
Computed properties for advanced workflow triggering and conditional transformations in Lifecycle Management
System attributes are computed properties that Lifecycle Management automatically generates during identity processing. These attributes enable advanced automation scenarios by providing runtime information about identity changes and transformation results.
All system attributes follow the sys_attr__ prefix convention and cannot be manually set or modified.
Introduction to Lifecycle Management with Veza
Veza's Lifecycle Management (LCM) solution empowers organizations to automate and streamline the management of user identities and access rights throughout the employee lifecycle. From onboarding to role changes and offboarding, automated LCM workflows ensure that the right people have the correct access at the right time.
Automated Provisioning and De-provisioning
Actions: Tasks like creating accounts, assigning groups, or sending notifications
Create and configure automation policies for identity sources
Define workflow triggers and provisioning actions
SCIM filter syntax for workflow conditions
Configure email templates and webhooks
Trigger compliance reviews from LCM workflows
View, search, and manage identities from configured sources
Customize identity attributes to override values from the source of identity
A persistent boolean attribute that indicates whether an identity has undergone changes to monitored properties.
Type: Boolean Persistence: Stored with identity record Available in: Workflow triggers, conditions, and transformers
Configuration: Define monitored properties in the policy configuration:
Workflow Trigger Example:
Combined Condition Example:
The attribute is automatically set to true when any property in mover_properties changes during identity update. It is cleared when the identity is unchanged in an extraction cycle, and excluded from change detection to prevent recursive updates.
System attribute names are case-sensitive and must be lowercase in all expressions.
A transient attribute that provides a preview of the transformation result during conditional evaluation.
Type: String Persistence: Transient (exists only during IF statement evaluation) Available in: Conditional transformers only
Usage Example - Conditional Domain Addition:
The above transformer will check if the transformed email already contains "@", preserve existing email addresses, and add domain only when needed.
A transient attribute that provides the character length of the transformation result during conditional evaluation.
Type: Number Persistence: Transient (exists only during IF statement evaluation) Available in: Conditional transformers only
Usage Example - Progressive Username Truncation:
For "Leonevenkataramanathan Foster":
First check (≤30 chars): leonevenkataramanathan.foster (30 chars - passes first condition)
If >30 chars, second check (≤20 chars): leonevenkataramana.foster (25 chars - fails second condition)
If >20 chars, fallback: l.f (3 chars - always succeeds)
Alternatives with NEXT_NUMBER: l.f2, l.f3, l.f4
Preview attributes work with the NEXT_NUMBER transformer for generating unique alternatives:
This evaluates the base value length before applying numbering, ensuring the final result (including numbers) meets constraints.
Only one NEXT_NUMBER transformer is allowed per conditional branch.
The sys_attr__is_mover attribute supports additional trigger properties for fine-grained control:
This workflow triggers only when:
The identity is marked as a mover (department or location changed)
The identity is active
At least one of the trigger_properties has changed since last extraction
Performance Notes
Mover Detection: Comparison occurs for all properties in
mover_propertiesduring each extractionPreview Evaluation: Each IF branch with preview attributes requires transformation execution
Optimization: Place most common conditions first to minimize preview evaluations
Caching: Preview values are calculated once per condition branch and reused
Trigger Conditions Reference - Complete SCIM filter syntax for workflow conditions
Transformer Functions Reference - Complete list of transformation functions
Transformers - Attribute transformation concepts and examples
- Configuring mover properties and workflows
Environment-wide Synchronization: Keep user attributes and access rights consistent across applications and platforms
Customizable Workflows: Design tailored processes for different lifecycle events and user segments
Compliance and Audit Support: Maintain detailed records of access changes to support compliance and audit efforts
Integration with Identity Providers: Integrate with identity providers and HR systems, import HR data from CSV, or use a custom OAA template
Monitor LCM activity and policy status
View and manage identities from your sources
Create and configure automation policies
Define workflow triggers and provisioning actions
Manage birthright entitlements and business roles
Format and transform identity attributes
Reference documentation:
Understanding Conditions and Transformers - Conceptual guide to the different evaluation systems
Trigger Conditions Reference - SCIM filter syntax for workflow conditions
Transformer Reference - Complete list of transformation functions
- Formatter-based profile assignment
- How source attributes map to Veza
- Computed attributes for advanced logic
Policies define the rules and actions for managing identities throughout their lifecycle. They specify what actions should occur when there are changes in a source of identity, such as when a user is created or their attributes change.
After configuring a policy for a source of identity in your organization, Veza Lifecycle Management tracks the source for changes. When employee records are added or changed, actions will trigger based on the workflows and actions specified in the policy. Learn more about Policies.
Workflows are sequences of actions within a policy that execute based on specific conditions. They enable automation of lifecycle management processes such as onboarding, role changes, and offboarding.
Workflows only execute actions on users that meet specific conditions, and Policies can contain more than one Workflow. This enables you to create a single policy for your source of identity that contains multiple workflows, with one applying to new hires, another applying to terminated employees, and so on for the different JML scenarios you want to automate. Learn more about Workflows.
Access Profiles define sets of entitlements (such as group memberships or role assignments within a target application) that should be granted to users based on their role within the organization (or another distinguishing attribute). You can use Access Profiles to define both Business Roles – segments of employees, and Profiles – collections of entitlements in a target application.
Assigning Business Roles to the Profiles they should inherit enables you to define the birthright entitlements for different types of employees in your organization. You can then assign those Business Roles when configuring workflows that add or remove access to an application. Learn more about Access Profiles.
Lifecycle Management Actions are tasks performed within a workflow, such as creating a user account, assigning group memberships, or disabling an account. Actions can be combined to trigger in sequence when there are changes in the source of identity. Actions can run for any identity that meets the workflow conditions, or only apply when action-level conditions are met. Learn more about available Actions.
Transformers allow you to modify and format user attributes when synchronizing data between systems, ensuring consistency and compatibility when creating users across applications.
Lifecycle Management will provision new users with these attributes and can keep their accounts up-to-date when there are changes in the source of identity. Target entity attributes can be set to specific values or use metadata from the source of identity, and support a range of transformation functions. Learn about Transformers.
Lifecycle Management uses several systems that evaluate identity attributes, each serving a distinct purpose:
Workflow Conditions: SCIM filter expressions that determine whether workflows and actions execute (e.g., is_active eq true). Output is boolean.
Attribute Transformers: Formatter expressions that determine what value an attribute should have (e.g., {first_name | UPPER}). Output is a string.
Dynamic Access Profiles: Formatter expressions that resolve to Access Profile names at runtime (e.g., dept-{department | LOWER}).
These systems can work together. For example, workflow conditions can embed transformer syntax for dynamic date comparisons. For a guide to when and how to use each, see Understanding Conditions and Transformers.
Customize email notifications sent during Lifecycle Management events and Access Request workflows. You can personalize messaging, add branding, and include event-specific information through placeholders. Learn more about Notification Templates.
Enable Integrations: Configure your data sources and enable them for Lifecycle Management. Lifecycle Management Integrations
Define Access Profiles: Create profiles that map your organizational structure to application-specific entitlements. Creating Access Profiles
Create Policies: Add policies to automate identity management processes. Building Lifecycle Management Policies
Configure Workflows: Design workflows within policies to handle specific lifecycle events.
For an overview of Lifecycle Management configuration using Okta, Workday, and Active Directory, see Workday, Okta, and Active Directory.
For API documentation, see Lifecycle Management APIs.
Managing and monitoring Lifecycle Management from a central dashboard
The Lifecycle Management Dashboard provides a centralized interface for monitoring automatic provisioning and deprovisioning of user access - both birthright access granted by Veza Lifecycle Management and just-in-time access granted by Veza Access Reviews. This dashboard gives you an at-a-glance view of your configuration, status, and recent activity.
The dashboard is the primary landing page for Lifecycle Management and Access Requests and can help with routine monitoring, error resolution, policy validation, activity review, and integration health checks.
The dashboard is organized into several key sections:
Policies: Displays your most recently updated Lifecycle Management and their status
Access Profiles: Shows configured and usage metrics
Identities: Provides a visualization of managed identities
To navigate to more detailed information, click on any section heading to open the related overview. Click on specific items (such as a policy or integration) to view or edit configuration details.
From the dashboard, you can perform common tasks including:
Create a new policy: Click the "Create Policy" button in the Policies section
Configure Access Profiles: Click the "Create Access Profile" button in the Access Profiles section
Set up a new integration: Click the "Set up Integration" button in the Integrations section
The Policies section displays all configured Lifecycle Management policies with their current status. Each policy shows its name, associated identity source, number of identities managed, and current status (Running/Stopped).
You can view all policies at a glance, create new ones with the "Create Policy" button, see which policies are actively running, access detailed configuration by clicking on a specific policy, and verify that policies in "Running" status should be active. Learn more about .
The Access Profiles section shows the total number of configured access profiles and provides a visual representation of profile activity. Access profiles define sets of entitlements granted to users based on their roles.
You can see the total number of configured profiles, create new ones using the "Create Access Profile" button, view profile activity and utilization, and access detailed configuration by clicking into the section. Learn more about .
The Identities section provides a visual representation of all identities managed through Lifecycle Management and Access Requests. The chart displays the distribution of identities by type or status, giving you an immediate understanding of your identity landscape.
This visualization helps you understand the overall composition of your managed identities, identify distribution patterns across different categories, and track changes in identity distribution over time.
The Integrations section lists all systems connected to Lifecycle Management and Access Requests, displaying the total number of integrations, error status and counts, recently created integrations, and last update timestamps. For each integration, you can see its name and type, current status (including error indicators), and last update timestamp. You can set up new integrations using the "Set up Integration" button, identify and troubleshoot integration errors, and view all integrations by clicking "View all." Review this section regularly to identify any integrations with error states. See for more information.
The Access Requests section tracks pending access requests, recently completed requests, and request status (Pending, Completed, Rejected, Cancelled). This section provides visibility into the access request process, allowing you to monitor request volume and status, track completion rates, and identify potential bottlenecks in the access request workflow.
The Errors section displays any Lifecycle Management and Access Requests errors that require attention. When functioning normally with no issues, this section will display "No issues found." If errors occur, this section will list the specific errors, provide context about when and where they occurred, and offer guidance on troubleshooting and resolution. Check this section regularly for any reported issues.
The Recent Activity section shows a chronological log of Lifecycle Management and Access Requests events, including event type, timestamp, affected identity, and entity name. Examine this section to identify any unusual patterns or failed operations. This activity log helps you track recent actions, verify that expected changes have occurred, identify patterns or issues in lifecycle events, and monitor the overall health of your Lifecycle Management or Access Requests implementation.
After familiarizing yourself with the dashboard:
Temporarily pause specific workflows or actions in a policy without removing configuration
This guide explains how to disable individual workflows or actions within a Lifecycle Management policy. Disabling allows you to temporarily pause specific parts of a policy without deleting or modifying the underlying configuration.
Use this option when developing workflows to support:
Managing gradual rollouts: Enable actions one at a time to verify each step before activating the next
Troubleshooting issues: Isolate problematic actions without removing configuration
Implementing seasonal policies: Temporarily disable workflows that only apply during certain periods
Workflow Testing: Disable production actions while testing new workflow logic
Disabling a workflow prevents it from running during policy execution. All conditions and actions within the workflow are also skipped.
Go to Lifecycle Management > Policies.
Select a policy and click Edit Workflow.
Toggle the workflow's Enabled control to disabled.
The policy editor displays disabled workflows and actions with a "Disabled" tag.
You can also disable specific actions within a workflow without disabling the entire workflow. When you disable an action, any nested conditions and actions under the disabled action are also skipped, but other actions in the workflow continue to run normally.
Open the workflow editor.
Select the action you want to disable.
Toggle the Enabled control in the action settings.
Disabled workflows are evaluated by default during dry run simulations. This allows you to preview what would happen if you re-enabled a disabled workflow and validate trigger conditions and action configurations before making them active.
When you run a dry run simulation, the results show what actions would run if the workflow were enabled.
To re-enable a disabled workflow or action, toggle the Enabled control back to enabled and save.
Step-by-step guides for common Lifecycle Management tasks and configurations
This guide explains how to configure identity override attributes in Lifecycle Management to address scenarios where user attributes at the source of identity are incorrect, slow to update, or temporarily need adjustment for policy execution.
Identity override attributes allow Lifecycle Management administrators to override the value of any user attribute set at the source of identity. These overrides take precedence over actual values during Lifecycle Management workflows.
Configuring the Coupa Contingent Workforce integration for Veza Lifecycle Management.
The Veza integration for Coupa Contingent Workforce (CCW) enables automated identity synchronization as a source of truth for contingent worker lifecycle management. Coupa CCW serves as an authoritative source for contingent worker information that can be synchronized with other systems in your environment.
This document includes steps to enable the Coupa CCW integration for use in Lifecycle Management, along with supported actions and notes. See for more details.
{
"mover_properties": ["department", "manager_id", "title", "location"]
}sys_attr__is_mover eq truesys_attr__is_mover eq true and department eq "Engineering" and is_active eq trueIF sys_attr__would_be_value co "@"
{email | LOWER}
ELSE
{email | LOWER}@company.comIF sys_attr__would_be_value_len le 30
{first_name | LOWER}.{last_name | LOWER | NEXT_NUMBER, 2, 3}
ELSE IF sys_attr__would_be_value_len le 20
{first_name | LOWER | FIRST_N, 10}.{last_name | LOWER | NEXT_NUMBER, 2, 3}
ELSE
{first_name | LOWER | FIRST_N, 1}.{last_name | LOWER | FIRST_N, 1 | NEXT_NUMBER, 2, 3}IF sys_attr__would_be_value_len le 15
{username | NEXT_NUMBER, 2, 5}
ELSE IF sys_attr__would_be_value_len le 15
{username | FIRST_N, 13 | NEXT_NUMBER, 2, 5}{
"trigger_properties": ["department", "location"],
"trigger_string": "sys_attr__is_mover eq true and is_active eq true"
}Integrations: Top Integrations enabled for Lifecycle Management and Access Requests along with any error statuses
Access Requests: Tracks pending and completed access requests
Errors: Displays recent Lifecycle Management and Access Requests errors requiring attention (past day, week, or month)
Recent Activity: Shows the most recent Lifecycle Management and Access Requests Events
Track recent changes: Review the Recent Activity section for a log of recent events
Filter activity by time period: Use the time period dropdown (e.g., "Past day") to adjust the view
Configure email templates and webhooks
Trigger compliance reviews from LCM workflows
Supported identity sources and targets
Common questions and troubleshooting
End-to-end example using Workday as source, with Okta and AD as targets
Automatically assign Microsoft 365 licenses during onboarding
Validate policy behavior before enabling production execution
Pause or stop automation without deleting configurations
You will need administrative access in Veza to configure the integration and Customer Integration Admin privileges in Coupa CCW.
Ensure you have an existing Coupa CCW integration in Veza or add a new one for use with Lifecycle Management.
Verify your Coupa CCW integration has completed at least one successful extraction
The Coupa CCW integration will need the required API scope:
ccw.contingent_workers - For accessing contingent worker data
To enable the integration:
In Veza, go to the Integrations overview
Search for or create a Coupa CCW integration
Check the box to Enable usage for Lifecycle Management
Configure the extraction schedule to ensure your Coupa CCW data remains current:
Go to Veza Administration > System Settings
In Pipeline > Extraction Interval, set your preferred interval
Optionally, set a custom override for Coupa CCW in the Active Overrides section
To verify the health of the Lifecycle Management data source:
Use the main Veza navigation menu to open the Lifecycle Management > Integrations page or the Veza Integrations overview
Search for the integration and click the name to view details
In the Properties panel, click the magnifying glass icon under Lifecycle Management Enabled
Coupa CCW can serve as a source for identity information in Lifecycle Management Policies. Contingent worker identity details are synchronized from Coupa CCW with changes propagated to connected target systems.
Important: Coupa CCW is a source-only integration for Lifecycle Management. It provides authoritative identity information but cannot be used as a provisioning target.
The integration supports the following lifecycle management Actions:
As a source-only system, Coupa CCW provides:
Contingent worker identity information synchronized to downstream systems
Organizational structure data (Account Segments, Cost Centers, Departments)
Employment status and contract details for lifecycle decisions
Manager relationships for approval workflows
When a new contingent worker is added to Coupa CCW:
Identity Sync: Coupa CCW provides worker details to Veza Lifecycle Management
Access Provisioning: Based on department, cost center, and role, appropriate access is granted in target systems
Manager Assignment: Hiring manager relationships are established for approval workflows
Group Assignment: Worker is added to relevant organizational groups based on Account Segment and Department
When a contingent worker's status changes (contract end, role change):
Status Detection: Coupa CCW reflects updated employment status
Access Review: Lifecycle policies evaluate continued access needs
De-provisioning: If terminated, appropriate access removal is triggered in target systems
Audit Trail: All changes are tracked for compliance reporting
When a contingent worker transitions to full-time employee:
Status Update: Employment type change is detected in Coupa CCW
Access Migration: Existing access is evaluated and potentially expanded
System Updates: Worker identity is updated across all connected systems
Process Completion: Manager and HR notifications confirm successful transition
Identity override attributes address operational challenges where the source of identity doesn't immediately reflect ground truth:
Incorrect or slow-to-update attributes:
Employee termination: An employee has been terminated and needs immediate deprovisioning, but the termination status is not yet reflected at the source of identity
Role changes: An employee has immediately changed roles and needs new birthright access, but the role change and the new manager haven't been updated in the source system
Contract extensions: A contractor's end date has been extended, but the extension isn't reflected yet at the source of identity
Missing manager data: The source of identity is missing a manager value, but this information is required for downstream application provisioning
Emergency access control:
Security incidents: Immediate access restrictions are needed before HR systems can be updated
Temporary access grants: Providing temporary access while permanent changes are processed
Before you configure identity override attributes, verify that override values comply with organizational policies and data standards, and assess the downstream impact of attribute changes. Ensure:
You have administrative access to Veza Lifecycle Management
You understand which source identity attributes need to be overridden
You have identified the specific identities requiring attribute overrides
You understand that overrides only affect Lifecycle Management workflows, not Access Visibility
You recognize that overrides should be used for exceptional cases, not routine operations
Veza supports overrides for various property types from the source of identity:
Text properties (e.g., Department, Manager, Job Title)
Date properties (e.g., Activated At, Hire Date, End Date)
Numeric properties (e.g., Employee ID)
Boolean properties (e.g., Active status, Enabled flags)
You can view, create, edit, and delete overrides from the identity details view.
Click Lifecycle Management in the main navigation, then select the Identities tab.
Locate the identity requiring an attribute override.
2.1. Use the Search by name field to find the specific user
2.2. Click on the identity name to show more information in the sidebar
2.3 Click Details to open the expanded details view
Open the identity's Properties tab:
3.1 In the identity detail view, click the Properties tab to view all available attributes from the source of identity.
The Properties tab displays both original attribute values and any existing overrides.
Create a new attribute override:
4.1. Find the attribute you want to override in the properties table
4.2. Click the Actions menu (three dots) for that attribute
4.3. Select Create Override from the dropdown menu
Set the override value in the Create Override dialog:
5.1. Enter the desired override value in the Override Value field
5.2. For date attributes, use the calendar picker to select the appropriate date and time
5.3. For text attributes, type the new value directly
5.5. Click Save to apply the override, or Cancel to discard changes
The Create Override modal displays the attribute name and the current actual value for reference.
Verify the attribute override is active:
The Override column now shows "yes" for the modified attribute
The Override Value column displays your custom value
View the override summary in the identity details Overview tab:
7.1. Return to the Overview tab for the identity
7.2. Check the Property Overrides section to see all configured overrides for the identity
7.3. Each override displays the attribute name, override value, and actual value from the source
The identity details view provides visibility into both original and overridden values. A visual indicator will highlight any attributes with overrides:
Properties: Use this tab to show side-by-side comparisons of actual values from the source of identity and override values
Overview: This tab includes a consolidated view of all active overrides for an identity
To change the value of an attribute override:
Navigate to the identity's Properties tab. Access the same identity detail view where you created the override.
Locate the attribute with an active override. Find the attribute showing "yes" in the Override column.
Edit the override value.
3.1. Click the Actions menu (three dots) for the overridden attribute
3.2. Select Edit Override from the dropdown menu
3.3. Modify the Override Value in the dialog 3.4. Click Save to apply the changes
To remove an override:
Access the identity's Properties tab. Navigate to the identity detail view with active overrides.
Identify the override to remove. Locate the attribute with "yes" in the Override column.
Clear the override.
3.1. Click the Actions menu (three dots) for the overridden attribute
3.2. Select Clear Override from the dropdown menu
3.3. Confirm the action when prompted
The attribute will revert to using the source of identity value, and the Override column will show "no".
The current implementation supports overrides at the individual identity level. Note that any attribute overrides are not reflected in the Veza Access Graph.
Lifecycle Management only: Attribute overrides affect only Lifecycle Management workflows and policy execution
Access Visibility unchanged: The Access Graph and Access Visibility features continue to use the actual source of identity values
Source system independence: Overrides do not modify data in the originating identity providers or HR systems
You should typically use overrides as temporary measures while addressing root causes in source systems. Maintain clear records of why each override was implemented and the business justification.
Consider the following best practices when implementing attribute overrides:
Regular review process: Establish periodic audits of active overrides to ensure they're still necessary
Monitor policy impact: Review workflow execution logs to confirm that overrides produce expected policy outcomes. You can review the identity details Activity tab and Lifecycle Management Activity Logs to ensure that override values are applied as expected during provisioning, deprovisioning, and other lifecycle actions.
Emergency response procedures: Establish clear protocols for when and how to use overrides in approved scenarios.
Change management coordination: Communicate with HR and identity provider teams when overrides are needed.
Map application entitlements to user populations based on common roles, functions, levels, or locations in the organization.
Access Profiles govern how application entitlements are assigned to employees across your organization. These profiles define how birthright access should be granted based on segmentation criteria, such as business role, job function, seniority level, location, or group membership. Access Profiles are used by the Manage Relationship action to assign users to specific groups, roles, permission sets, or other access-granting entities when specific conditions are met.
Profiles can be configured hierarchically to create a fine-grained model for assigning access to different employee groups. Administrators can position child profiles beneath a parent profile, with each child profile inheriting the parent profile's entitlements.
For instance, a parent profile might be "Sales" (defining all the application entitlements that an individual belonging to the Sales organization should be granted), with child Profiles for "Account Executive," "Sales Engineering," "Sales Operations," and "Inside Sales." Each child Profile will have additional application entitlements specific to those roles. With these profiles configured, a workflow in policy for sales engineers can use just the "Sales Engineering" Profile, which includes the access defined by the "Sales" profile.
Since workflows in Lifecycle Management policies can apply these Profiles at all stages in a user's lifecycle, defining Profiles enables Veza to serve as a source of truth for birthright entitlements for all employees. Access Profiles also define what access-granting relationships to remove from users during de-provisioning workflows.
The access granted by a Profile can be defined by both:
Explicitly-defined, application-specific entitlements, such as roles, groups, permission sets, etc., within the Profile. A single Access Profile can support granting one or more entitlements across one or more applications simultaneously.
Any entitlements inherited from a parent Profile.
The example below shows Business Roles for teams, managers, and all employees, along with Profiles for different applications. When configuring workflow actions, administrators can choose from one or more Business Profiles to assign the entitlements granted by the child Profiles.
Veza offers two types of built-in Access Profile types for defining birthright entitlements by user segments:
Profiles are a type of Access Profile used to define access-granting relationships (such as user assignments to groups or roles) within the applications you will provision to users. Profiles are intended to represent a specific set of entitlements across one or more applications that should be granted based on a user's segmentation criteria.
Profiles should be configured in coordination with the application owner, who will best understand the exact permissions and privileges granted by various groups, roles, and other entitlements in each specific application.
Business roles are a type of Access Profile used to model your organization's structure, based on a hierarchy of job functions, locations, and titles. Ideally, by itself, a Business Role should not describe specific entitlements but can inherit relationships from other Profiles. These will usually be named according to logical segments that should be assigned to different applications with different levels of access, such as "Sales," "QA Contractors," or "Engineering Managers."
Business Roles can inherit Profiles to enable a hierarchical approach to birthright access management. You should draft and review Access Profiles to create a map of user entitlements for each application (such as "GitHub Developers" or "Salesforce Administrators").
Create Business Roles that align with your organizational structure, especially considering location, business unit, and functional organization. Then, configure these Business Roles to inherit Profiles that describe the birthright entitlements granted to different user populations.
To create and manage Access Profiles, go to Lifecycle Management > Access Profiles.
Click Create Access Profile.
Under Access Profile Details, choose the Profile Type to create:
Business Role: Business roles are intended to represent logical units within your organizational structure, and can inherit entitlements defined in other Access Profiles. Use Business Roles to establish segmentation criteria based on location, role, business unit, or functional organization.
After saving an Access Profile, you can view its details, edit it, or pause and resume it on the Lifecycle Management > Access Profiles page.
When configuring a policy to include the Manage Relationships action, you can select any active profile for the target data source. You can also use Dynamic Access Profiles to resolve Access Profile names at runtime based on user attributes. See for details.
Access Profiles can have designated owners who are responsible for managing and maintaining the profile. Owners have elevated permissions to configure the profile, manage its lifecycle, and create additional profiles.
Both Veza Users and Veza Groups can be assigned as Access Profile owners:
Individual Users: Any Veza platform user with the appropriate permissions
Veza Groups: Both Customer Managed groups (created in Veza) and SCIM Managed groups (provisioned from identity providers). See for details on group types and management
To be eligible as an Access Profile owner, a user or group must have the Creator permission set for the relevant Access Profile Type. This is a two-step configuration process:
Grant Profile Type Permissions:
Navigate to Lifecycle Management > Settings
Select the Profile Types tab
Group Ownership Behavior: When a group is assigned as an owner, all its members inherit the ownership capabilities. Individual group members will also appear as available owners in the interface.
When a user or group is designated as an Access Profile owner, they automatically receive three distinct permissions:
Owner permission on the specific Access Profile
Read: View the profile's configuration, entitlements, and metadata
Update: Modify the profile's settings, labels, descriptions, and assigned relationships
These permissions enable owners to not only manage their assigned profiles but also create additional profiles of any type they have access to.
Privilege Escalation: Becoming an Access Profile owner grants global Creator permission, allowing the user or group to create Access Profiles of any type (not just the type of the owned profile). Consider this privilege escalation when assigning ownership.
Access Profile owners are managed through the Access Profiles interface:
Navigate to Lifecycle Management > Access Profiles.
Locate the Access Profile in the list.
Click the Actions button (⋮) for that profile.
Owner Requirements: Every Access Profile must have at least one owner. The system will prevent you from removing the last owner from a profile to ensure ongoing management capability.
Access Profile Creation Permissions (Early Access): By default, only Administrators can create Access Profiles. With Access Controls enabled, you can delegate creation permissions to specific Operators and Groups. See for details.
Configure fallback formatters for uniquely identifying attributes during identity synchronization
Fallback formatters can help resolve conflicts when provisioning identities with unique attributes. This is particularly useful when automated provisioning requires unique identifiers, but the standard generated values are already in use.
Terminology: A formatter is the template string within an attribute transformer that defines how to construct a value. A fallback formatter is an alternative template used when the primary formatter produces a value that conflicts with an existing record. See for more on these terms.
When provisioning new identities through Lifecycle Management, unique attributes like usernames, login IDs, or email addresses must not conflict with existing values. Fallback formatters provide an automated way to generate alternative values when conflicts arise, ensuring provisioning can proceed without manual intervention.
You can configure fallback formatters when configuring a to ensure new users can be onboarded efficiently, regardless of naming conflicts.
The most common use case for fallback formatters is handling username conflicts. For example:
Your organization uses a standard username format of first initial + last name (e.g., jsmith for John Smith).
When multiple employees have similar names, this can lead to conflicts:
John Smith already has jsmith
Jane Smith already has jsmith1
James Smith already has jsmith2
When Jennifer Smith joins, the fallback formatter automatically assigns jsmith3, maintaining your naming convention while ensuring uniqueness.
Fallback formatters can be configured as part of the "Sync Identities" action within a Lifecycle Management workflow:
Edit or create a Lifecycle Management policy
Edit the workflow containing the Sync Identities action
In the Sync Identities action configuration, click Add Fallback
Several transformers can be used for implementing fallback formatters depending on your specific use case.
A typical approach is to use the NEXT_NUMBER transformer, which is specifically designed to generate sequential numerical alternatives when naming conflicts occur.
The NEXT_NUMBER transformer:
Generates a set of sequential integers as strings
Takes two parameters: BeginInteger (starting number) and Length (how many numbers to generate)
Is unique among transformers in that it returns multiple values, making it ideal for fallback scenarios
In addition to NEXT_NUMBER, other transformers can be valuable for creating fallback formatters:
Using Random Alphanumeric for Unique Usernames:
This could generate usernames like jsmith8f3d instead of sequential jsmith1, jsmith2, etc.
Using UUID for Guaranteed Uniqueness:
This would append the first 8 characters of a UUID, creating identifiers like jsmith-a7f3e9c2.
When configuring a fallback formatter with the NEXT_NUMBER transformer:
Select the attribute that requires uniqueness (e.g., username, email)
Configure the primary pattern (e.g., {first_initial}{last_name})
Add a fallback using the NEXT_NUMBER transformer to generate sequential alternatives:
This will generate up to 10 alternatives: jsmith1, jsmith2, ... jsmith10
Here are some commonly used fallback patterns:
When Lifecycle Management attempts to provision a new identity with a unique attribute value that already exists:
The system first tries the primary format (e.g., jsmith)
If a conflict is detected, it automatically tries the first alternative using the NEXT_NUMBER transformer (e.g., jsmith1)
If that value also exists, it tries the next alternative (e.g.,
This automated conflict resolution ensures provisioning can proceed without manual intervention, even when your standard naming conventions result in conflicts.
Integrate Access Reviews with Lifecycle Management workflows
This guide explains how to create Access Reviews from Lifecycle Management workflows and troubleshoot common issues.
Lifecycle Management (LCM) policies can trigger Access Reviews automatically using the CREATE_ACCESS_REVIEW action. When a workflow runs and conditions match, Veza queues and creates an access review campaign based on the configured certification plan.
Use LCM-triggered access reviews to:
Automatically certify access when employees change roles (movers)
Review permissions before offboarding (leavers)
Validate access grants after onboarding (joiners)
Enforce periodic re-certification based on identity attribute changes
The sections below cover configuration options and troubleshooting for reviews created by LCM workflows.
Common scenarios:
All results filtered: Veza created the review but then deleted it because all rows already appeared in recent in-progress reviews
Entity type mismatch: The policy identity type does not match the access review query, and no identity graph relationship exists to resolve it. Veza displays this error: "No matching node type found for identity type {type}"
Missing workflow configuration: The Access Review workflow is not configured or not linked to the policy
LCM-triggered reviews always run when a workflow executes, but Veza deletes the review if it has no results after filtering.
Veza compares each row against the last five in-progress reviews (by default) for the same workflow. The system excludes rows that appeared in any of those reviews. If all rows are excluded, Veza deletes the review rather than completing it with zero results. Veza does not send notifications for deleted reviews.
To verify a review was created and deleted:
Check Veza Events for the review creation and deletion
Review Lifecycle Management event logs for the workflow execution
Note: Deleted LCM-triggered reviews do not appear in the Reviews list (unlike manually-created empty reviews, which do appear)
This behavior prevents duplicate review efforts and focuses reviewer attention on changed or new access. The comparison count (default: 5) is configurable by Veza support using the CertificationCountToExcludeUnchanged setting.
LCM and Rule-triggered Access Reviews automatically exclude unchanged results. Veza enables this setting by default, and you cannot disable it for these review types.
When Veza creates a review, it compares each row against the last five in-progress reviews for the same workflow (sorted by start time, newest first). The system excludes rows that appeared in any of those reviews, leaving only new or changed access to review.
This behavior:
Applies automatically to all LCM_TRIGGERED and RULE_TRIGGERED reviews
Compares against the last five in-progress reviews by default (configurable by Veza support)
Cannot be changed through the UI or API
If filtering excludes all rows, Veza deletes the review rather than completing it with zero results. Veza does not send notifications for deleted reviews, but the deletion appears in Veza Events.
The first LCM-triggered review for a workflow includes all results since there are no earlier reviews to compare against. Subsequent reviews only show changes.
LCM-triggered access reviews require the policy identity entity type to match the entity type defined in the access review query. Veza resolves this match in the following order:
Direct match in source node types: The policy identity type matches directly
Direct match in destination node types: The policy identity type matches the destination
Linked nodes through the identity graph: Veza follows graph relationships to find a connection (for example, WorkdayWorker → ActiveDirectoryUser
If none of these resolve, the review creation fails with the error: "No matching node type found for identity type {type}".
Example: If your policy tracks WorkdayWorker identities and your review expects ActiveDirectoryUser entities, Veza still creates the review successfully if there is a defined relationship (for example, WorkdayWorker → ActiveDirectoryUser) in the identity graph. If no such mapping exists, the review creation fails.
Access Reviews can include enriched columns that display additional identity attributes (such as department or manager from an HRIS system). However, Veza skips enrichment when the identity mapping is ambiguous.
When Veza skips enrichment:
If a single account or entity maps to multiple identity nodes in the graph (for example, one Active Directory account maps to two different WorkdayWorker records), Veza intentionally skips enrichment rather than arbitrarily choosing one.
Result:
Veza still creates the review successfully
Enriched columns appear but remain empty for affected rows
Veza logs a trace-level warning: "Skipping enriching nodes due to finding multiple linked nodes"
Resolution:
Review your identity mappings to ensure each account maps to a single identity. Ambiguous mappings often indicate data quality issues in source systems (such as duplicate employee records).
When creating access reviews through LCM workflows, you can configure a custom review name using attribute transformers. This is useful when a workflow creates multiple reviews and you need to differentiate them.
Common use case (Movers): When employees change roles, a single workflow run can trigger multiple access reviews. Custom names help reviewers identify which review corresponds to which change.
Transformer syntax:
Use curly braces to reference identity attributes:
Review for {name} → "Review for John Smith"
{department} Access Review - {name} → "Engineering Access Review - John Smith"
{job_title} Certification → "Senior Engineer Certification"
See for the complete transformer syntax reference.
Dry Run verification:
Custom review names appear in Dry Run results, allowing you to verify the name format before the workflow runs in production. This helps catch transformer syntax errors or missing attributes early.
: Complete guide to configuring and managing access certification campaigns
: Creating and configuring certification plans
: Configuring the workflow action settings
How to delegate Access Profile creation to specific Operators and Groups.
By default, only Administrators can create Access Profiles in Lifecycle Management. With Access Controls enabled, Administrators can grant Creator permissions to specific Operators and Groups, allowing them to create new profiles. Users who create a profile automatically become its Owner and can edit that profile, but cannot modify profiles created by others. Administrators always retain full access to all profiles.
Users must have the Operator role to use Creator permissions — non-Operator roles (Access Reviewer, Watcher, etc.) cannot create Access Profiles even with explicit permission grants.
Early Access Feature: This feature requires enablement by Veza support. Contact your Veza support team to enable Access Controls for your tenant.
You have the Administrator role on the root team
Access Controls are enabled on your tenant (contact Veza support)
The users receiving permissions have the Operator role assigned
To assign Access Profile creation permissions to users or groups:
Navigate to Lifecycle Management in the Veza main navigation menu.
Click Settings in the Lifecycle Management sidebar.
On the Settings page, locate the Access Profile Types section.
Result: Users and groups with Creator permissions can now create new Access Profiles from the Lifecycle Management > Access Profiles page.
To confirm that permissions were assigned correctly:
In the Manage Permissions modal, review the list of assigned users and groups.
Each row shows:
Principal name (user or group)
Principal type (User or Group)
To revoke Access Profile creation permissions:
Navigate to Lifecycle Management > Settings.
Click Manage Access Profile Creation Permissions.
In the permissions table, locate the user or group to remove.
Result: The user or group can no longer create new Access Profiles. They retain read-only access to view existing profiles.
Important: Removing a user's Creator permissions prevents them from creating new Access Profiles. However, they retain Owner permissions on profiles they previously created, allowing them to continue editing those specific profiles.
To fully revoke a user's access to Access Profiles, you must remove both:
- Overview of the permission sets system
- Understanding Access Profiles and their role in Lifecycle Management
- Veza role definitions and capabilities
Understanding the Lifecycle Management Activity Log for tracking provisioning operations
The Lifecycle Management Activity Log provides visibility into all provisioning operations performed by Veza's Lifecycle Management system. It serves as a record of all activities, including successful actions, errors, and failures.
A Lifecycle Management policy defines automated workflows that execute when changes occur in a source of identity. The Activity Log tracks all aspects of these operations through a hierarchical structure:
Understanding and configuring different types of Access Profiles for Lifecycle Management and Access Requests
Safely preview policy changes and validate workflow logic before enabling policies in production
Preview what provisioning or deprovisioning actions would occur
Test policy changes safely before deployment
Troubleshoot when workflows are not triggering as expected
Before testing with dry run:
Create or edit a Lifecycle Management policy with at least one workflow
Ensure your source of identity contains test identities or representative data
Use single-identity dry run to test how a specific identity would be processed by a policy.
Go to Lifecycle Management > Policies.
Select a policy to view its details.
Click Perform Dry Run.
Select an identity to test.
Optionally, modify identity attributes to simulate changes (such as a department transfer or status change).
Click Show Results.
Go to Lifecycle Management > Identities.
Search for an identity and click to view its details.
Click the Actions menu and select Policy Dry Run.
Select a policy and optionally customize attributes.
Click Show Results.
Use bulk dry run to test a policy against multiple identities at once. You can test against all identities or filter to a specific subset.
Go to Lifecycle Management > Policies.
Select a policy and click Perform Dry Run Bulk.
Choose your identity selection method:
Select All: Test against every identity in the policy
Select Identities individually: Choose specific identities from a searchable list
Select Identities based on properties: Enter a SCIM filter expression to target identities by attribute values (for example, department eq "Engineering" or is_active eq true)
Click Run Dry Run.
Dry run results show what would happen if the policy ran against the selected identities.
The Workflows Run section shows which workflows triggered for the identity and why. If no workflows matched, verify that the identity's attributes meet the workflow trigger conditions.
The Potential Changes section lists all actions that would run, including:
User accounts that would be created or updated
Attributes that would be synced
Access profiles that would be assigned or removed
Relationships (group memberships) that would be added or removed
Click View Details on any action to see its full configuration, including sync attributes, relationship mappings, REST payload contents, and password complexity rules.
When a dry run returns "0 changes", the selected identity does not meet any trigger conditions in the policy's workflows. This is not an error; it means the identity would not be processed by this policy.
Bulk dry run results are preserved in a history table, so you can review previous tests and compare results across multiple runs.
Go to Lifecycle Management > Policies.
Select a policy.
Click See Dry Run Bulk History.
The history shows each dry run task with its filter criteria, identity counts, workflow matches, and timestamps.
Disabled workflows are evaluated by default during dry run simulations. This means you can test workflow logic before enabling it in production. The dry run results show what actions would run if the workflow were enabled.
To learn how to disable workflows, see Disable workflows and actions.
Dry run has several important limitations:
No integration testing: Dry run does not check whether integrations are functioning properly or whether target systems are accessible. A broken integration might cause workflow-defined changes not to be applied when the policy runs.
No action validation: Dry run evaluates whether workflow conditions are met, not whether actions would succeed. It does not validate that changes could be successfully applied.
Simulation only: Dry run identifies actions that would execute but does not perform them.
Dry run does not test integration connectivity. Issues like API timeouts, authentication failures, or attribute mapping errors are not detected during simulation.
Test with representative identities: Select identities that represent different scenarios (new hires, role changes, terminations) to validate all workflows in your policy.
Simulate attribute changes: Modify identity attributes during dry run to test trigger conditions such as department changes, employment status updates, or location transfers.
Test edge cases: Use dry run to test unusual scenarios that might not occur frequently, such as same-day rehire after termination or simultaneous department and location changes.
Does not apply to manually-created or scheduled reviews
The Manage Permissions modal opens, showing currently assigned users and groups.
Select the Type of principal to add:
User: Assign permissions to individual Veza users
Group: Assign permissions to a Veza Group (all members receive permissions)
Select the user or group from the dropdown menu.
The dropdown shows only users or groups that don't already have permissions assigned. The permission is assigned automatically when you make a selection.
Repeat steps 5-6 to assign permissions to additional users or groups.
When finished, click outside the modal or press ESC to close.
Permission set name ("creator")
Assigned users should now see the Create Access Profile button on the Access Profiles page.
Users without permissions will not see the Create Access Profile button.
Confirm the deletion when prompted.
Their individual Owner permissions on specific profiles (revokes editing rights for those profiles)
Only Administrators can manage these permission assignments.
Profile: Profiles define entitlements that can be assigned to users in target applications, such as groups, roles, or permission sets assigned to users as birthright entitlements. Profiles cannot be inherited from other Access Profiles, but can be inherited by Business Roles. Use this profile type to define the birthright entitlements within one or more applications (such as group memberships or role assignments).
Profile Name and Description: You should follow a standard naming convention for all profiles to help identify them, describing the employee segment or applications the Access Profile applies to.
Profile Labels: Labels are available for quickly finding access profiles when configuring actions in a policy. Apply and create labels as needed to organize your Access Profiles by employee segment and the applications they apply to.
Assigned Relationships:
Click Add Relationship
Choose the type of relationship to add:
Access Profile: Use the Relationship menu to pick one or more Access Profiles to grant those business roles or entitlements. This option is not available for Access Profiles of type "Profile".
Relationship: Choose the target data source and specific entities the Profile will govern access to (such as Google Cloud Platform > Google Group). This option is not available for Access Profiles with the "Business Role" type.
Click Assign to save the changes.
Locate the profile type in the table
Click the Actions button (⋮) for that profile type
Select Manage Permissions from the dropdown menu
In the Manage Permissions dialog, select USER or GROUP from the Type dropdown
Choose the specific user or group to grant Creator permissions
Assign as Owner: Once a user or group has Creator permissions for the profile type, they can be designated as owners for individual Access Profiles of that type
Create: Perform create operations within the profile context
Delete: Remove the Access Profile
Enables full control over the profile's configuration and lifecycle (pause/resume)
Creator permission globally for all Access Profiles
Grants the ability to create new Access Profiles of any type (subject to other constraints)
Scoped to the entire access_profiles table, not limited to specific Profile Types
This is a privilege escalation: first-time owner assignment grants global creation capability
Viewer permission on the Access Profile Type
Read: View details about the profile type configuration and requirements
Scoped to the specific Profile Type of the owned profile
In the Manage Owners dialog:
Use the Type dropdown to select USER or GROUP.
Use the Name dropdown to select the specific user or group to add as an owner.
View and manage existing owners in the list below.
Click Done to save changes.
Manage Access Profile Creation Permissions - Delegate Access Profile creation to Operators and Groups (Early Access)
Executive Employees
Active Directory
Executive Employee - Manager US (Active Directory Group)
US Engineering Managers
Active Directory
Engineering - Manager US (Active Directory Group)
Azure Helpdesk Role
Azure
Helpdesk Administrator (Azure AD Role)
Google Asia Employees
Google Cloud

Google Asia Employees (Google Group)
Close the action sidebar and save your changes to the policy.
jsmith2This process continues until either:
A unique value is found
All alternatives from the NEXT_NUMBER range are exhausted (in which case an error would be reported)
{first_initial}{last_name}
{first_initial}{last_name}{NEXT_NUMBER(1, 10)}
jsmith, jsmith1, jsmith2, etc.
{first_name}.{last_name}
{first_name}.{last_name}{NEXT_NUMBER(1, 10)}
john.smith, john.smith1, john.smith2
{username}@domain.com
{username}{NEXT_NUMBER(1, 10)}@domain.com
{first_name}{last_initial}
{first_name}{last_initial}{NEXT_NUMBER(1, 10)}
johns, johns1, johns2
{first_initial}{last_name}{RANDOM_ALPHANUMERIC_GENERATOR(4)}{first_initial}{last_name}-{UUID_GENERATOR() | SUB_STRING,0,8}{first_initial}{last_name}{NEXT_NUMBER(1, 10)}Policies define the overall automation framework for managing identities
Workflows determine which actions should be executed for specific identities
Actions represent specific operations to be performed on target systems
Jobs are individual tasks executed as part of actions
Events record atomic changes resulting from successful jobs
The Activity Log provides four views of this activity across different tabs: Events, Jobs, Actions, and Workflow Tasks.
Each tab can help track recent actions, verify that expected changes have occurred, identify patterns or issues in lifecycle events, and monitor the overall health of your Lifecycle Management implementation.
The Events tab shows individual changes made to entities and relationships within the system. Each event represents an atomic change resulting from a successful action.
Event Type
The type of event that occurred (e.g., REMOVE_RELATIONSHIP, ADD_RELATIONSHIP, SYNC_IDENTITY)
Timestamp
When the event occurred
Success
Whether the event completed successfully (True/False)
Identity
The identity associated with the event
Entity Name
The name of the entity affected by the event
Entitlement Entity
The entitlement entity involved in the event, if applicable
The Jobs tab displays individual jobs executed as part of actions. Jobs represent specific tasks performed on target systems, such as creating a user account or updating attributes. Use this tab to review whether individual jobs executed successfully or encountered an error and could not be completed.
Started At
When the job started
Completed At
When the job completed
Action Name
The name of the action that initiated the job
Action Type
The type of action (e.g., SYNC_IDENTITIES, MANAGE_RELATIONSHIPS)
Identity
The identity associated with the job
State
The current state of the job (Completed, Errored)
The Actions tab shows high-level operations triggered by workflows. Actions typically involve one or more jobs that work together to accomplish a specific goal.
Started At
When the action started
Completed At
When the action completed
Action Name
The name of the action
Action Type
The type of action (e.g., SYNC_IDENTITIES, MANAGE_RELATIONSHIPS)
State
The current state of the action (Completed, Errored)
Jobs Started
Number of jobs initiated by this action
See Actions for more details on supported actions and configuration options.
The Workflow Tasks tab displays workflows executed for specific identities. Workflows represent a sequence of actions executed as part of a Lifecycle Management Policy.
Workflow
The name of the workflow
Identity
The identity for which the workflow was executed
Scheduled For
When the workflow was scheduled to run, if applicable
Started At
When the workflow started
Completed At
When the workflow completed
Entity Type
The type of entity processed by the workflow
For each identity, Lifecycle Management follows this process:
Validation: The system validates the identity against workflow trigger conditions
Execution Determination: The system determines whether execution is needed based on:
Identity state (e.g., CREATED, CHANGED, UNCHANGED)
Continuous sync settings
Last execution time (for unchanged identities)
Task Creation: If execution is needed, a workflow task is created
Action Execution: The system executes conditions and actions via the task runner
Result Storage: The result is stored as an event in the Activity Log
The Activity Log provides filtering and search options to help locate particular events:
Filter by time period: Use the date range filters to focus on date ranges
Search by identity or entity: Use the search fields to find activities related to unique identities or entities
Filter by event type or state: Use the dropdown filters to focus on event type or state
View error messages: Review issues by checking for error messages in the Message column
Veza maintains all Lifecycle Management activity logs for audit purposes. These logs are retained even if the associated integration is removed, maintaining a full historical record of all provisioning operations.
Note: Events shown in the Activity Log are distinct from the system-wide Event Logs found in the Veza Administration section.
If the profile can grant entitlements in one or more target applications
The maximum number of entitlements the profile can grant
The specific integrations where entitlements can be granted
Veza provides built-in profile types, such as Profiles and Business Roles, for hierarchical management of birthright entitlements by employee population. You can also create new profile types to meet your organization's Access Requests and Lifecycle Management needs.
Access Profiles define collections of entitlements within one or more target applications that can be assigned to an identity. Depending on the profile type, an access profile can include certain groups or roles, or inherit entitlements from another profile.
For example, you can create different types to organize profiles by:
Applications: Granting access to an application without specific entitlements, such as access to Zoom, a video conference platform
Single Entitlements: Defining a single entitlement within a single application, such as a user being added to the DNS Admin group in Active Directory or the Domain Name Administrator role in Entra ID
Application Entitlements: Defining multiple entitlements within a single application, such as access to several Okta Groups
Multi-Application Entitlements: Defining multiple entitlements across different applications, such as for site reliability engineers who need access to GitHub, AWS, Jira, and Snowflake, along with one or more roles and group memberships within each of those applications
Business Roles: Inheriting combinations of other profile types to model sophisticated access privileges, such as all US Call Center employees inheriting US Employee access
Use Access Profile Types to set rules for all profiles using that type. You can create new profile types to implement Lifecycle Management and Access Requests based on the access you grant to employees and the conditions under which it is granted.
Open Lifecycle Management > Settings.
In the Profile Types section, click New Profile Type.
In the sidebar, configure the new type:
Basic Information shown when creating Access Profiles:
Name: Display name for the profile type, shown when creating new Access Profiles.
Description: Extended description to document the purpose of the profile type.
Instructions: Optional custom instructions for using the profile type, shown when creating new profiles. This is useful if allowing self-service Access Profile creation.
On Create Behavior: Set the default policy state for Access Profiles created with this profile type:
Default: Uses Veza's default behavior (currently sets the profile to Initial state, but this may change in future releases).
Initial: The Access Profile is created but remains inactive/non-functional until a user explicitly starts it to move it to the Running state.
Relationship Options:
Allow Inheritance from Other Access Profiles: When enabled, profiles with this type can use another access profile to specify the exact entitlements.
Allow Direct Relationships: When enabled, you will specify the exact entitlements when creating a profile with this type. When disabled, profiles with this type can only inherit entitlements from another profile.
Access Request Policy: Choose the default Access Request Policy to apply access duration controls and approval workflow.
Allow overwrite of Access Request Policy: Enable selection of an alternative policy when Access Profile creators and owners create Access Profiles of this type.
Integrations: Choose if the Access Profile of this type supports multiple integrations, integrations of a single type, or a single instance of a single integration:
Allow multiple integration types: Profiles can have specific entitlements in more than one target integration type (such as one or more entitlements from any Active Directory or Okta integration).
Limit to a single integration type: Entitlements must be within integrations of a specific type (such as one or more entitlements from any Okta integration).
Entitlements: Set the maximum number of entitlements that can be added to profiles with this type (0 for unlimited entitlements).
Access Profile creators and owners can choose specific entitlements when editing the profile.
Create New Entitlement if None Exists: Configure the CREATE_ENTITLEMENT action to run when the policy is applied, including:
Click Create Profile Type to save the changes.
After saving a profile type, you can edit or delete it on the Lifecycle Management Settings > Profile Types tab.
To manage the users or groups allowed to create profiles of that type, click Actions > Manage Permissions.
To view profiles with a specific type, choose a profile type and click Show Access Profiles.
The Manage Permissions option controls who is eligible to be designated as owners of Access Profiles of a specific type. When you assign the Creator permission set to a user or group for a profile type:
They become eligible to be designated as owners of Access Profiles of that specific type
Once they become an owner of any profile, they automatically receive global Creator permission to create Access Profiles of any type
If a group receives Creator permissions, all group members inherit these capabilities (see Veza Groups for details on group management)
The Creator permission at the Profile Type level is scoped to access_profile_types.{type-id} and serves as a gating mechanism for ownership assignment
Permission Scoping: The Creator permission at the Profile Type level controls ownership eligibility, not the ability to create profiles. The ability to create Access Profiles is controlled by a global table-level permission that is automatically granted when a user or group becomes the owner of an Access Profile.
This permission configuration is required to assign Access Profile ownership. See Access Profile Ownership for details on designating owners for individual profiles.
When working with Access Profile Types, consider the following best practices:
Consistent Naming: Use clear, descriptive names for profile types that indicate their purpose and scope
Appropriate Granularity: Create profile types with the right level of granularity for your organization's needs
Documentation: Add thorough descriptions and instructions to help others understand when to use each profile type
Inheritance Planning: Carefully plan which profile types should inherit from others to create a logical hierarchy
Regular Review: Periodically review profile types to ensure they continue to meet your organization's needs
Good Hygiene: Eliminate profile types that are no longer in use (when the count of Access Profiles with that type equals zero)
Conceptual guide to the different condition and transformer systems in Lifecycle Management and when to use each
Lifecycle Management automates identity provisioning across your applications. When an employee joins, changes roles, or leaves, workflows answer two questions: Should this person get access? And what should their account look like?
This document explains the building blocks: conditions that control when things happen, and transformers that control what values are set.
These terms are used throughout Lifecycle Management documentation.
Key relationship: A Transformer CONTAINS a Formatter. The transformer is the complete configuration (which attribute to set, the formatter template, sync options). The formatter is just the template string that defines how to construct the value.
Purpose: Determine whether a workflow should execute based on identity attributes.
Syntax: SCIM filter expressions that evaluate to true or false.
Example:
When to use: Gate workflow execution based on identity state, department, location, employment type, or other attributes.
See for complete syntax documentation.
Purpose: After a workflow trigger matches, determine whether subsequent actions should run.
Syntax: Same SCIM filter syntax as workflow triggers.
Example:
When to use: Create branching logic within a workflow where different actions apply to different identity subsets.
See for configuration details.
Purpose: Construct attribute values when syncing identities to target systems.
Syntax: Formatter templates with optional pipeline functions.
Examples:
When to use: Transform source attributes into the format required by target systems (usernames, email addresses, distinguished names, etc.).
Transformers also support IF/ELSE conditional logic to select different values based on identity attributes. See for complete documentation.
Purpose: Dynamically determine which Access Profile to assign based on identity attributes.
Syntax: Formatter templates (same as attribute transformers) that resolve to Access Profile names.
Example:
If user's department is "Engineering", this resolves to the Access Profile named dept-engineering.
When to use: Assign Access Profiles based on department, location, role, or other attributes without creating separate workflow conditions for each combination.
Dynamic Access Profiles answer "which profile?" not "should we assign a profile?" They use formatter syntax, not SCIM conditions.
See for complete documentation.
Conditions and transformers can work together. Workflow trigger conditions can embed transformer syntax for dynamic value comparisons.
This condition triggers a leaver workflow when an employee's last day falls within a 2-day window around today:
Breaking it down:
The syntax {\| FUNCTION \| ...} (pipe immediately after opening brace) indicates a transformer with no source attribute—it starts directly with a function like NOW.
See for more examples.
- Complete SCIM syntax for workflow triggers
- Formatter syntax and pipeline functions
- All available transformation functions
Configuring the Snowflake integration for Veza Lifecycle Management.
The Veza integration for Snowflake enables automated user lifecycle management, with support for user provisioning and de-provisioning, role assignment management, and attribute synchronization.
This document includes steps to enable the Snowflake integration for use in Lifecycle Management, along with supported actions and notes. See for more details.
You will need administrative access in Veza to configure the integration and USERADMIN role or equivalent privileges in Snowflake.
Ensure you have an existing in Veza or add a new one for use with Lifecycle Management.
Verify your Snowflake integration has completed at least one successful extraction
Important: The Snowflake user account used for Lifecycle Management operations should have USERADMIN role or higher privileges to ensure proper user and role management capabilities.
To enable the integration:
In Veza, go to the Integrations overview
Search for or create a Snowflake integration
Check the box to Enable usage for Lifecycle Management
Configure the extraction schedule to ensure your Snowflake data remains current:
Go to Veza Administration > System Settings
In Pipeline > Extraction Interval, set your preferred interval
Optionally, set a custom override for Snowflake in the Active Overrides section
To verify the health of the Lifecycle Management data source:
Use the main Veza navigation menu to open the Lifecycle Management > Integrations page or the Veza Integrations overview
Search for the integration and click the name to view details
In the Properties panel, click the magnifying glass icon under Lifecycle Management Enabled
Snowflake can be a target for identity management actions, based on changes in another external source of truth or as part of a workflow.
The integration supports the following lifecycle management :
Primary action for user management (creating or updating users):
User names must be unique and follow Snowflake identifier naming conventions
Login names are used for authentication and must be unique
Passwords are automatically generated and set to require change on first login
The following attributes can be synchronized:
Role assignment management for users:
Add and remove role assignments for users
Synchronize role memberships from source systems
Support for direct role grants to users
Within Snowflake, roles can be associated with:
Database and schema access permissions
Table and view privileges
Warehouse usage rights
Administrative privileges for account management
When a user is deprovisioned:
User account is disabled (set DISABLED = TRUE)
Role assignments are removed to revoke access
User attributes are preserved for audit purposes
Automated provisioning when a new employee joins:
Create User Account: Sync identity attributes from HR system to create Snowflake user with name and login details
Assign Department Role: Grant role based on department attribute (e.g., SALES_ANALYST, DATA_ENGINEER)
Set Default Role: Configure default role for the user's session
Managing access when employees change roles:
Update User Attributes: Sync changed attributes like email or comments
Remove Old Roles: Revoke previous role assignments that are no longer appropriate
Grant New Roles: Assign roles appropriate for the new position
Secure access removal when employees leave:
Disable Account: Set user account to disabled status
Revoke All Roles: Remove all role assignments to eliminate data access
Preserve Audit Trail: Maintain user record and history for compliance
Manage user identities and lifecycle automation in Veza, including synchronization, access profiles, and workflow triggers for joiner, mover, and leaver processes.
Identities in Veza Lifecycle Management represent a top-level view of an individual user, used to automate provisioning and deprovisioning across systems, applications, or services.
This can include birthright access managed throughout the user's lifecycle, triggered by joiner, mover, or leaver events, as well as ad-hoc, just-in-time access granted upon approval of an access request.
Identities can refer to users who may be employees, contractors, or external collaborators (partners). Additionally, Veza supports lifecycle management for Non-Human Identities (NHI), such as service accounts, though with a simplified action set. See for details on NHI-specific capabilities and limitations.
With Lifecycle Management, workflows defined within policies dictate the users’ onboarding, job-function change, and offboarding processes, ensuring that corresponding identities have precisely the access they need as their roles evolve or their status within the organization changes. Similarly, access granted to identities may also change as just-in-time access requests are fulfilled or revoked.
The Lifecycle Management > Identities page serves as a central hub for viewing identities known to Lifecycle Management and Access Requests, as well as performing actions on individual identities.
Identities are populated into Lifecycle Management by first identifying the entire user population by integrating their source of identity (SOI) and creating a policy that uses that data source, into a Veza tenant. This may require enabling a built-in integration for your identity source (e.g., Workday integration), uploading user data in CSV format (CSV Upload integration), or using a custom OAA connector.
See for detailed information on integrating the source of identity.
For Integration management using APIs, see .
Identities are maintained through synchronization with the identity sources. Syncing identities ensures that all systems reflect the most current user state, whether through onboarding, role changes, or attribute updates, keeping access aligned, consistent, and audit-ready.
The Sync Identities action is used for the automatic synchronization of user identities between an authoritative source (such as an HR system or identity provider) and target systems. In the Lifecycle Management workflow, Sync Identities works alongside other key actions:
Manage Relationships (handling group/role memberships)
Deprovision Identity (removing access when users leave the organization)
Synchronization is executed through Lifecycle Management policy workflows. Policy workflows can be defined with triggers and actions to synchronize changes in your identity source with target systems. Additionally, SCIM (System for Cross-domain Identity Management) or OAA (Open Authorization API) can enable identity sync for a wide range of target applications that don't have a built-in Veza integration, but do expose standard user and group management APIs or support bulk data export.
See for more information on usage.
See for detailed information.
Active Directory supports appending values to multi-value attributes during Identity Sync actions. This allows you to add new values without replacing existing ones.
For detailed information about appending multi-value attributes, including supported attributes, syntax, and examples, see in the Transformers documentation.
Note: The display name is not the primary unique identifier, as multiple users may share the same first and surname.
When an identity has multiple sources (primary and secondary), the Identities table displays attributes based on the active status of each source. The "active" status is determined by the is_active field in each source of identity, which typically represents employment or account status (e.g., an active employee in Workday, an active contractor account in a secondary system).
Display Priority:
This behavior ensures the table reflects the most current and relevant source of identity information. For example, when an employee terminates (primary source becomes inactive) but remains as an active contractor in a secondary source, their attributes are displayed from the contractor system.
Early Access: Enhanced display prioritization may require Veza support to enable. Contact your Customer Success Manager for scenarios where secondary identities should be displayed when primary identities become inactive.
To start, you can use filtering options to locate specific identities or analyze a group of identities based on standard criteria. The following filters are available on the Identities overview:
Search by name: Locate specific individuals using a name-based search
Department filter: View identities by organizational unit
Status filter: Filter by Active or Inactive employment status
For each identity record, administrators can perform actions through the Actions menu:
View Details: Access identity information, attribute history, and related accounts
Trigger Workflow: Manually initiate a workflow in a policy
Request Access: Launch an Access Request for additional access (requires Veza Access Requests).
See for customizing the Request Access Template.
Click on your selected identity to open the Identity Details view.
The following fields in the Identity Details view are populated with the current user's information:
Title: The user’s position title.
Email: The user's email address.
Providers: A list of assigned integrations. When you click a specific provider, the Integration page opens, displaying the provider's detailed information, including its Entity Categories distribution.
When executing a policy where user attributes at the source of identity are incorrect, slow to update, or temporarily need adjustment, you can override the existing attribute with a different value until the issue is corrected. For more information, see .
Here are some examples of incorrect or slow-to-update attributes:
Employee termination: An employee has been terminated and needs immediate deprovisioning, but the termination status is not yet reflected at the source of identity
Role changes: An employee has immediately changed roles and needs new birthright access, but the role change and the new manager haven't been updated in the source system
Contract extensions: A contractor's end date has been extended, but the extension isn't reflected yet at the source of identity
To create an Override Value, perform the following:
Select an identity by name.
Click Details.
Click Properties in the Details menu.
Click the overflow icon (three dots) to display options for performing actions on the identity. Next, click on the desired action:
Trigger Workflow
Request Access
Show in Graph
The Trigger Workflow option is a convenient way to test a specific user in a policy workflow. For example, you can test a new employee's identity in a joiner workflow to evaluate whether they have sufficient access to perform their duties.
Use the Trigger Workflow option to manually run a workflow for a specific user.
To trigger a workflow with a specific user, perform the following steps:
Select a workflow in the dropdown menu.
Click Trigger to run the workflow.
Requests Access allows for additional or temporary access grants, particularly when a user’s current access is insufficient for their duties.
Use the Request Access option in the Identity Details view to grant access to a specific user while reviewing their detailed information. You can grant access to the user through the following:
Access Profiles option
A collection of entitlements that are granted as part of the user’s identity lifecycle requirements. Access Profiles can:
Define reusable collections of entitlements across multiple target systems by business roles, departments, or functions
Automate consistent access provisioning
Manage access profile types and their capabilities
See and for more information.
To grant an Access Profile, perform the following:
Click the Access Profile radio button.
The Choose from Access Profile window appears.
Enter a Reason for granting the Access Profile for the user.
App option
An App refers to a target system, where user access is provisioned or deprovisioned as part of the identity lifecycle process.
To grant an App, perform the following:
Click the Access Profile radio button.
The Request Grant Access window appears.
Enter a Reason for granting the App for the user.
Entitlements option
Granting Entitlements to a user provides specific access permissions (roles, permissions, group memberships) required to perform their responsibilities.
Note: By granting Entitlements to a specific user, you pre-fill an Access Request with the appropriate configuration settings and policy.
To grant an Entitlement, perform the following:
Click the Entitlements radio button.
The Request Grant Access window appears.
Enter a Reason for granting the Entitlement for the user.
Use the Show in Graph option to display a graph that represents all assigned Access Profiles, Apps, and Entitlements, including all associations.
This is a graphical representation of John Smith’s assigned access and entitlements to roles/groups.
This guide describes how to enable and configure Exchange Server for Lifecycle Management in Veza, including supported capabilities and configuration steps.
Supports the creation of email accounts for users within Exchange Server.
Entity Type: Exchange Server Users
Attributes Available for Configuration:
Identity (Required)
Example Use Cases:
Create email accounts for new employees joining the organization
Assign email aliases to users to facilitate communication
Find the Exchange Management Shell shortcut in the Start Menu
Right-click > More > Open File Location
Right-click the shortcut icon > Properties
Open IIS Manager and create a new application pool
Name the application pool
Configure the application pool:
Add the application to "Default Web Site"
Configure the application:
Set alias to "VezaProvisioner"
Install the VezaProvisioner.msi installer provided by Veza support on the Exchange Server. This component handles email address creation for users provisioned in Active Directory.
Go to Configurations > Integrations
Click Add New and select Exchange Server
Complete the following fields:
After configuration, the Exchange Server integration will be available for use in Lifecycle Management policies, specifically for the Create Email action. This action can be used in workflows for new employee onboarding or other scenarios requiring email account creation.
Configuring Google Cloud for Veza Lifecycle Management
The Veza integration for Google Cloud enables automated user provisioning, access management, and de-provisioning capabilities for Google Workspace. This integration allows you to synchronize identity information, manage group memberships, and automate the user lifecycle from onboarding to offboarding.
Running: The Access Profile starts in an active state and is immediately functional with no additional action required.
Initial Start By Admin: The Access Profile starts in the Initial state, but requires an administrator (not a regular user) to explicitly start it to move it to the Running state.
Limit to a single integration: Profiles are limited to a single integration (such as one or more entitlements from a specific Okta integration).
Create a local user account only (if limited to a single integration): Create a local user account without specific entitlements.
The target integration and entity type to create.
Any member conditions (ANY to apply to all identities, or restricted by a condition string).
Attributes for the created entities using the specified formatters.
Enabling Continuous Sync to periodically recreate and reapply entitlements if removed within the target system.
Message
Additional details or error messages related to the event
Any Changes
Whether the job resulted in changes to the system
Error Message
Detailed error information if the job failed
Any Changes
Whether the action resulted in changes to the system
State
The current state of the workflow (Completed, Errored)
Messages
Additional details or error messages related to the workflow
The Snowflake integration will need the additional required privileges:
CREATE USER privilege on the account for user provisioning
GRANT ROLE privilege for role assignments
OWNERSHIP privilege on target roles for role management
Access to a warehouse for executing queries during lifecycle operations
login_name
No
String
Login identifier for authentication
Defaults to name if not provided
No
String
User's email address
Must be valid email format
comment
No
String
User description or notes
default_role
No
String
Default role for user sessions
Role must exist in Snowflake
password
No
String
User password
Auto-generated if not provided
disabled
No
Boolean
User account status
true = disabled, false = active
SYNC_IDENTITIES
Synchronizes identity attributes between systems, with options to create new identities and update existing ones
✅
MANAGE_RELATIONSHIPS
Controls role assignments for identities
✅
DEPROVISION_IDENTITY
Safely removes or disables access for identities
✅
SOURCE_OF_IDENTITY
Snowflake can act as a target system for identity lifecycle policies from other sources
✅
name
Yes
String
User name identifier
Unique identifier, immutable
Policy
Associated Lifecycle Management policy
Links identity to a specific Lifecycle Management workflow
Access Profiles
Assigned Access Profiles with counts
Shows current access assignments
Last Changed at
Timestamp of the most recent update
Tracks synchronization and change activity
Workflows
Associated Lifecycle Management workflow name
Identifies which policy workflow manages the identity
Integrations filter: Filter by source integration system
Policy filter: View identities managed by specific policies
Workflows Triggered filter: Identify identities that have triggered automation
Not in a Workflow: Find identities outside automated workflows
Show in Graph: Visualize identity relationships and access patterns
Access Profiles: A list of assigned Access Profiles to the identity. When you click on a specific profile, its detailed information page appears, displaying its status (either Draft or Published). You can also edit the Access Profile if needed.
Last Workflow Triggered: The name of the workflow that was recently executed.
Primary: The Primary identifier is configured (True or False) to be the authoritative attribute for matching or locating an identity.
Secondary Identities: An associated name is connected to the primary identity.
ID: The Identification number assigned to the primary identity.
Active: The user’s identity is active if True. Otherwise, False when inactive.
Last Changed: A time frame (in days, weeks, months) when the identity was last changed.
Missing manager data: The source of identity is missing a manager value, but this information is required for downstream application provisioning
Security incidents: Immediate access restrictions are needed before HR systems can be updated
Temporary access grants: Providing temporary access while permanent changes are processed
Select Create Override.
The Create Override window appears. The Property Name and Actual Value fields are populated.
Enter an Override Value.
Click Save.
Enter an Expiration Time in Hours or Days.
Use the arrows to select an Expiration Time in Days, where 0 means no expiration.
Click Create.
Based on the integration you selected, the Target Entity Type is automatically populated.
Use the arrows to select a Target Entitlement.
Use the arrows to select an Expiration Time in Days, where 0 means no expiration.
Click Create.
Name
Identity display name
The full display name is an attribute composed of the user's first name and last name.
Status
Current lifecycle status (Active/Inactive)
Indicates employment status.
Property Overrides
Shows "Yes" if identity has custom attribute overrides
Identifies identities with manual attribute modifications (overriding attributes from your SOI )
Department
Organizational department from SOI
Used for access assignment and reporting
Active
Any
Primary source
Inactive
Active
Secondary source
Active
Active
Primary source (default)
Inactive
Inactive

Primary source (default)
Decide WHICH Access Profile to assign
Formatter (template)
String (profile name)
Can embed transformers
Yes, for dynamic values
N/A (is the transformer)
Pipeline functions
Only within embedded values
Yes (| UPPER | LOWER)
System Attributes - Computed attributes like sys_attr__is_mover
Policies - Creating and configuring Lifecycle Management policies
Condition
A SCIM filter expression that evaluates to true/false
department eq "Engineering"
Transformer
A complete attribute mapping configuration
Maps email to target, with formatter {first_name}.{last_name}@co.com
Formatter
The template string within a transformer that constructs the value
{first_name}.{last_name}@company.com
Pipeline function
A transformation applied within a formatter
UPPER, LOWER, SUBSTRING
Decide IF a workflow runs
SCIM filter
Boolean
Decide IF a subsequent action runs
SCIM filter
Boolean
Decide WHAT value an attribute should have
Formatter (template)
is_active eq true
SCIM condition
Check if employee is active
customprop_lastdayofwork le ...
SCIM condition
Compare last day to threshold
{| NOW | UTC_TO_TIME_ZONE, "-05:00" | ...}
Embedded transformer
Generate "today in EST" dynamically
Purpose
Gate execution
Construct values
Output
Boolean (yes/no)
String (the value)
Base syntax
SCIM filter (eq, le, and, or)
Template ({attribute})
Supports IF/ELSE
No (use nested conditions)
String
Yes
Copy the Target field value
Note the two important paths from the target:
PowerShell Path: (e.g., C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe)
Remote Exchange Path: (e.g., C:\Program Files\Microsoft\Exchange Server\V15\bin\RemoteExchange.ps1)
Right-click > Advanced Settings
Under Process Model, set the Identity
Select the application pool created above
Configure authentication:
Disable Anonymous Authentication
Enable Basic Authentication
Insight Point
Select if using an Insight Point to access Exchange Server
Name
Friendly name for the integration
Instance URL
https://<exchange_server_host>/VezaProvisioner
Username
Domain username with required Exchange permissions
Password
Password for the account
PowerShell Path
Path to PowerShell.exe noted in step 1
Remote Exchange Path
Path to RemoteExchange.ps1 noted in step 1
Enable Lifecycle Management by checking Enable Lifecycle Management
Save the configuration





SYNC_IDENTITIES
Synchronizes identity attributes between systems, with options to create new identities and update existing ones
✅
MANAGE_RELATIONSHIPS
Controls entitlements such as group memberships for identities
✅
DEPROVISION_IDENTITY
Safely removes or suspends access for identities
✅
SOURCE_OF_IDENTITY
Google Cloud can act as a source system for identity lifecycle policies
✅
This document includes steps to enable the Google Cloud integration for use in Lifecycle Management, along with supported actions and notes. See Supported Actions for more details.
You will need administrative access in Veza to configure the integration and grant API scopes in Google Cloud.
Ensure you have an existing Google Cloud integration in Veza or add a new one for use with Lifecycle Management.
Verify your Google Cloud integration has completed at least one successful extraction.
The Google Cloud integration will need the following additional API scopes:
https://www.googleapis.com/auth/admin.directory.user - Required for user management operations
https://www.googleapis.com/auth/admin.directory.group - Required for group management operations
https://www.googleapis.com/auth/admin.directory.domain
In Veza, go to the Integrations overview
Search for or create a Google Cloud integration
Check the box to Enable usage for Lifecycle Management
Configure the service account with appropriate permissions:
Users > Read/Write
Groups > Read/Write
Organization Units > Read
To verify the health of the Lifecycle Management data source:
Use the main Veza navigation menu to open the Lifecycle Management > Integrations page or the Veza Integrations overview
Search for the integration and click the name to view details
In the Properties panel, click the magnifying glass icon under Lifecycle Management Enabled
Google Cloud can serve as a source for identity information in Lifecycle Management Policies. User identity details are synchronized from Google Cloud with changes propagated to connected systems.
Google Cloud can also be a target for identity management actions, based on changes in another external source of truth or as part of a workflow.
The integration supports the following lifecycle management Actions:
Primary action for user management (creating or updating users):
Entity Types: Google Workspace User
Create Allowed: Yes (New user identities can be created if not found)
The following attributes can be synchronized:
Controls relationships between users and Google Workspace groups:
Supported Relationship Types: Google Workspace Groups
Assignee Types: Google Workspace Users
Supports Removing Relationships: Yes
Both adding and removing group memberships are supported:
Add users to specific Google Workspace groups based on department or role
Remove access when roles change or users leave
Maintain consistent group membership based on organizational structure
When a user is deprovisioned:
Entity Types: Google Workspace User
De-provisioning Methods: Suspend user (preserves user data while preventing access)
User is suspended in Google Workspace
Access to resources is removed
Account information is preserved for audit purposes
Google Cloud can serve as a source system for identity lifecycle policies, where changes to Google Workspace users trigger workflows in other systems.
To create a workflow for onboarding new employees:
Create a policy with your source of identity (e.g., Workday or CSV upload)
Configure a workflow for new employees
Add a Sync Identities action to create Google Workspace users:
Add a Manage Relationships action to assign appropriate groups:
Condition: department eq "Engineering"
Add to: "Engineering Team" group
Condition: department eq "Sales"
To create a workflow for departing employees:
Create a policy with your source of identity
Configure a workflow with condition: active eq false
Add a De-provision Identity action:
Entity Type: Google Workspace User
Method: Suspend
Remove All Relationships: Yes
Synchronizes identity attributes between systems, with options to create new identities and update existing ones
✅
MANAGE_RELATIONSHIPS
Controls entitlements such as organization and team memberships for identities
✅
DEPROVISION_IDENTITY
Safely removes or disables access for identities by suspending accounts
✅
SOURCE_OF_IDENTITY
GitHub can act as a source system for identity lifecycle policies
❌
This document includes steps to enable the GitHub integration for use in Lifecycle Management, along with supported actions and notes. See Supported Actions for more details.
You will need administrative access in Veza to configure the integration and site administrator privileges in GitHub Enterprise Server.
Ensure you have an existing GitHub integration in Veza or add a new one for use with Lifecycle Management.
Verify your GitHub integration has completed at least one successful extraction
The GitHub integration will need the additional required GitHub App permissions:
Organization permissions - Members (Write) - Required for managing organization memberships
Organization permissions - Administration (Write) - Required for administrative operations
Repository permissions - Administration (Write)
Important: GitHub LCM operations use Admin API endpoints that require site administrator privileges. These operations are typically available in GitHub Enterprise Server environments, not GitHub.com.
To enable the integration:
In Veza, go to the Integrations overview
Search for or create a GitHub integration
Check the box to Enable usage for Lifecycle Management
Configure the extraction schedule to ensure your GitHub data remains current:
Go to Veza Administration > System Settings
In Pipeline > Extraction Interval, set your preferred interval
Optionally, set a custom override for GitHub in the Active Overrides section
To verify the health of the Lifecycle Management data source:
Use the main Veza navigation menu to open the Lifecycle Management > Integrations page or the Veza Integrations overview
Search for the integration and click the name to view details
In the Properties panel, click the magnifying glass icon under Lifecycle Management Enabled
GitHub can be a target for identity management actions, based on changes in another external source of truth or as part of a workflow.
The integration supports the following lifecycle management Actions:
Primary action for user management (creating or updating users):
User login cannot be changed after creation
GitHub usernames must be unique and follow GitHub naming rules (39 characters max, alphanumeric plus hyphens)
Email addresses must be unique across the GitHub instance
Requires site administrator privileges for user creation operations
The following attributes can be synchronized:
Both adding and removing memberships are supported. Organization and team memberships are automatically removed during deprovisioning.
Add and remove organization memberships with member role
Add and remove team memberships with member role
Synchronize access assignments based on external identity changes
Track membership changes for audit purposes
When a user is deprovisioned:
User account is suspended in GitHub Enterprise Server
All organization and team memberships are removed automatically
Commit history and attribution are preserved for audit and compliance
Account can be reactivated if needed (unsuspended)
User receives appropriate error messages when attempting to access GitHub
Create GitHub accounts and assign appropriate access for new developers:
Identity Sync: Create user account with basic profile information
Organization Access: Add user to primary GitHub organization
Team Assignment: Assign to development teams based on department
Profile Setup: Configure public email and display name
Update GitHub access when employees change departments or roles:
Relationship Updates: Remove existing team memberships
New Access: Add memberships for new role requirements
Audit Trail: Track all membership changes for compliance
Securely remove access while preserving development history:
Account Suspension: Suspend GitHub account to prevent access
Membership Removal: Remove all organization and team memberships
History Preservation: Maintain commit attribution and repository history
Compliance: Generate audit trail of all access removal actions
SYNC_IDENTITIES
Configuring PostgreSQL Integration for Veza Lifecycle Management
The Veza integration for PostgreSQL enables automated user provisioning, access management, and deprovisioning capabilities. This integration allows you to synchronize identity information, manage group memberships, and automate the user lifecycle from onboarding to offboarding.
This document outlines the steps to enable PostgreSQL integration for use in Lifecycle Management, including supported actions and relevant notes. See for more details.
You will need administrative access in Veza to configure the integration and grant API scopes in PostgreSQL.
Ensure you have an existing PostgreSQL integration in Veza or add a new one for use with Lifecycle Management.
Verify your PostgreSQL integration has completed at least one successful extraction.
Configuration Steps
To enable the integration:
In Veza, go to the Integrations overview
Search for or create a PostgreSQL integration
Check the box to Enable usage for Lifecycle Management
Configure the extraction schedule to ensure your PostgreSQL data remains current:
Go to Veza Administration > System Settings
In Pipeline > Extraction Interval, set your preferred interval
Optionally, set a custom override for PostgreSQL in the Active Overrides section
To verify the health of the Lifecycle Management data source:
Use the main Veza navigation menu to open the Lifecycle Management > Integrations page or the Veza Integrations overview
Search for the integration and click the name to view details
In the Properties panel, click the magnifying glass icon under Lifecycle Management Enabled
PostgreSQL can serve as a source for identity information in Lifecycle Management . User identity details are synchronized from PostgreSQL, with changes propagated to connected systems.
PostgreSQL can also be a target for identity management actions, based on changes in another external source of truth or as part of a workflow.
The integration supports the following Lifecycle Management :
Primary action for user management (creating or updating users):
Entity Types: PostgreSQL User
Create Allowed: Yes (New user identities can be created if not found)
SQL Command: CREATE ROLE {username} WITH LOGIN PASSWORD 'password' [attributes]
Note: In PostgreSQL's architecture, users are roles with the LOGIN privilege. When Veza creates a user, it uses CREATE ROLE with the LOGIN attribute. This is functionally identical to PostgreSQL's CREATE USER command, which is simply an alias for CREATE ROLE ... WITH LOGIN.
The following attributes can be synchronized:
Controls relationships between users and PostgreSQL groups:
Supported Relationship Types:
PostgreSQL Group: Manages group membership for users
Assignee Types: PostgreSQL User
Technical details:
Adding a user to a group: GRANT {group} TO {user}
Removing a user from a group: REVOKE {group} FROM {user}
Group memberships use PostgreSQL's role inheritance system, where users inherit permissions from their assigned groups
Disables a user's ability to authenticate to PostgreSQL while preserving the role and its attributes:
Entity Type: PostgreSQL User
Action: Revokes the LOGIN privilege (equivalent to ALTER ROLE {username} WITH NOLOGIN)
Removes All Group Memberships: Yes (user is removed from all PostgreSQL groups)
Use case: Temporary offboarding or leave of absence where you may need to restore access later.
Security note: A deprovisioned superuser cannot log in but retains SUPERUSER status. If the role is re-enabled without updating attributes, it will have full superuser privileges. Consider using a Sync Identities action to revoke SUPERUSER before deprovisioning if this is a concern.
Permanently removes a user role from PostgreSQL:
Entity Type: PostgreSQL User
Action: Drops the role from the database (equivalent to DROP ROLE {username})
Impact: Complete and irreversible removal of the role
Important limitations:
Will fail if the user owns database objects: PostgreSQL prevents dropping roles that own schemas, tables, functions, or other database objects. PostgreSQL will return an error: role "username" cannot be dropped because some objects depend on it
Will fail if the user has granted permissions: If the role has granted permissions to other roles or is referenced in default privileges, the drop will fail
Will fail if referenced in policies: Row-level security policies or other database policies that reference the role must be removed first
Note: Unlike some database systems, PostgreSQL allows dropping roles with active connections, but the operation will still fail if any of the above dependencies exist.
Recommended workflow:
Use Deprovision Identity first to revoke LOGIN and remove group memberships
Verify the user has no owned objects, granted permissions, or policy references
Use Delete Identity only when permanent removal is required
Alternative for users with dependencies: PostgreSQL administrators can manually run REASSIGN OWNED BY {username} TO {new_owner} followed by DROP OWNED BY {username} before triggering deletion through Veza, or handle the deletion entirely through PostgreSQL.
Configuring the Atlassian Cloud integration for Veza Lifecycle Management.
The Veza integration for Atlassian Cloud enables automated user lifecycle management, with support for user provisioning and deprovisioning, group membership management, and attribute synchronization across Atlassian Cloud Admin, Jira Cloud, Confluence Cloud, and Bitbucket Cloud.
This document includes steps to enable the Atlassian Cloud integration for use in Lifecycle Management, along with supported actions and notes. See for more details.
Before enabling Lifecycle Management for Atlassian Cloud, ensure you have the necessary access and configuration in place. You'll need administrative access in both Veza and Atlassian Cloud to complete the setup process.
Veza Requirements:
Administrative access to configure integrations
An existing that has completed at least one successful extraction
Atlassian Cloud Requirements:
Administrative access to manage API keys and SCIM configuration
An active SCIM directory configured in your Atlassian Cloud organization
Proper API permissions for both SCIM and Atlassian Cloud Admin APIs
The following parameters are required to enable lifecycle management operations:
The integration automatically extracts the directory ID from your SCIM URL and uses it alongside the organization ID to coordinate user and group operations.
Optional Parameters: If you're also using the integration for discovery operations (viewing Jira projects, Confluence spaces, and Bitbucket repositories in Veza), you'll need product_token and product_user. These parameters are not required for lifecycle management operations and can be omitted if you're only performing user provisioning and group management.
Complete the following steps in Veza to enable and configure Lifecycle Management for your Atlassian Cloud integration.
Enable Lifecycle Management:
Navigate to the Integrations overview in Veza
Locate your Atlassian Cloud integration (or create a new one if needed)
Check the box to Enable usage for Lifecycle Management
Configure Data Synchronization:
Configure the extraction schedule to ensure Atlassian Cloud user and group data remains current. Go to Administration > System Settings, then navigate to Pipeline > Extraction Interval. Set your preferred interval for data synchronization, or create a custom override specifically for Atlassian Cloud in the Active Overrides section if you need more frequent updates than your default schedule.
Verify Configuration:
After enabling Lifecycle Management, verify the integration is functioning correctly by navigating to Lifecycle Management > Integrations (or the main Integrations overview). Locate your Atlassian Cloud integration and click its name to view details. In the Properties panel, click the magnifying glass icon under Lifecycle Management Enabled to check the health status.
Atlassian Cloud can be a target for identity management actions, based on changes in another external source of truth or as part of a workflow.
The integration supports the following lifecycle management :
The Sync Identities action creates new user accounts or updates existing ones in Atlassian Cloud. User provisioning occurs through the SCIM directory API, which ensures that email addresses remain unique across your Atlassian organization. When you create or update a user, Veza automatically establishes cross-service connections between the Cloud Admin user account and their corresponding accounts in Jira, Confluence, and Bitbucket.
Supported User Attributes:
The active status is managed automatically during provisioning and deprovisioning operations and is not available as a sync attribute. When you sync user attributes, Veza translates them to the appropriate SCIM fields shown in the table above before sending them to Atlassian's SCIM API.
The Manage Relationships action controls group memberships for users across Atlassian Cloud. You can add users to groups or remove them, with changes synchronized across Atlassian Cloud Admin and all associated products (Jira, Confluence, and Bitbucket). All membership changes are tracked automatically for audit purposes, providing visibility into access modifications over time.
Atlassian Cloud groups can control various types of access, including product-level permissions (such as access to specific Jira projects or Confluence spaces), administrative roles within Atlassian Cloud Admin, site-wide permissions and policies, and integration settings with external identity providers. When you modify a user's group memberships through Veza, these changes apply consistently across all products where the group has assigned permissions.
Important: Groups must already exist in both the SCIM directory and Atlassian Cloud Admin before you can assign users to them. The integration does not support creating or deleting groups. See for more details.
The Deprovision Identity action safely removes user access while preserving audit trails for compliance. When you deprovision a user, their account is deactivated through the SCIM API and all group memberships are automatically removed across Atlassian Cloud Admin, Jira, Confluence, and Bitbucket. While the user can no longer access any Atlassian products, their account information and cross-service connection history are preserved to maintain audit trails and historical visibility for compliance reporting.
The Delete Identity action permanently removes the user account and associated data from Atlassian Cloud. When you delete a user, their account is permanently deleted through the SCIM API, not just deactivated. Unlike deprovisioning, this operation cannot be reversed and should be used with caution only when permanent removal is required.
The following operations are not supported in the current implementation:
User Logout: Cannot force user logout from Atlassian products
License Management: Cannot remove specific licenses from users
Device Management: Cannot manage or remove personal devices
Managing group memberships in Atlassian Cloud requires coordination between the SCIM directory and Atlassian Cloud Admin.
Key requirements and limitations:
Groups must already exist in both systems: You can only assign users to groups that are present in both the SCIM directory and Atlassian Cloud Admin. The integration does not support creating or deleting groups.
Display name matching: When modifying group memberships, Veza uses display name matching to identify the corresponding group in each system.
Automatic ID mapping: The integration automatically maps the correct SCIM group ID and Atlassian group ID for each operation.
The Atlassian Cloud integration uses a dual-API architecture to provide comprehensive lifecycle management capabilities.
User provisioning, deprovisioning, and attribute updates are handled via Atlassian's SCIM API, ensuring email uniqueness and maintaining user account consistency.
Group membership management uses the Atlassian Cloud Admin API, which provides the functionality to add and remove users from groups across all products. ID Mapping and Coordination:
To maintain consistency across systems, the integration performs complex ID mapping between SCIM identifiers and Atlassian identifiers. SCIM User IDs are mapped to Atlassian Account IDs, and SCIM Group IDs are mapped to Atlassian Group IDs. The integration automatically extracts the directory ID from your SCIM URL and uses your organization ID to coordinate these operations. This ensures that changes made through Veza are reflected accurately in both the SCIM directory and across all Atlassian products.
Automate the provisioning of new employees into Atlassian Cloud:
Create User Account: New user account is created via SCIM with basic profile information
Assign Base Groups: User is added to organization-wide groups for general access
Product Access: User is granted access to specific products (Jira, Confluence, Bitbucket) based on role
Handle employee role changes and access updates:
Update User Attributes: User profile information is updated to reflect new role
Remove Previous Access: User is removed from role-specific groups and permissions
Grant New Access: User is added to groups appropriate for their new role
Safely remove access when employees leave:
Deactivate Account: User account is disabled via SCIM
Remove All Groups: User is removed from all groups and permissions
Revoke Product Access: Access is revoked across Jira, Confluence, and Bitbucket
Use lookup tables to transform identity attributes for target systems
You can use Lookup transformers to convert identity attributes from a source system into appropriate values for target systems based on CSV reference tables. This is particularly useful when mapping values between systems that use different naming conventions, codes, or formats for the same conceptual data.
For example, you might need to transform a "Location" attribute from Workday (which might be stored as location codes like "MN001") into corresponding values for country, country code, or city names in a target system.
Use Table Lookup Transformers when:
You need to map source attribute values to different values in target systems
You have standardized reference data that must be consistent across applications
You need to extract different pieces of information from a single attribute value
Geographic Information:
Transform location codes to country, region, city, or timezone information
Map office codes to physical addresses or facility types
The Table Lookup Transformer references CSV-based mappings between source and destination values. When synchronizing user attributes, Veza:
Takes the source attribute value
Looks up this value in the specified lookup table
Returns the corresponding value from the designated return column
Lookup tables are CSV files with columns that map values from a source of identity to destination values. Each row represents a mapping entry. The first row must contain the column headers.
For example, a location mapping table might look like:
To create a new lookup table:
Navigate to the Lookup Tables tab within your policy configuration
Click Edit mode to enable policy changes
Click Add New to create a new lookup table
From the Lookup Tables tab, you can:
Edit table descriptions or upload a new CSV
Delete tables that are no longer needed
To use a Table Lookup Transformer in a common or action-synced attribute:
In Destination Attribute, choose the attribute on the target entity that will be updated
In Formatter, choose the source attribute to transform
In Pipeline Functions, specify the lookup table name, the column to match against, and the column containing values to return.
The full syntax for using lookup table transformers is:
Where:
<value> is the source attribute to transform (e.g., {location})
<table_name> is the name of the lookup table to use
<column_name>
Assuming a user has "location": "IL001" and a lookup table named locationTable structured as shown earlier:
You can combine lookup transformations with other transformation functions in a pipeline:
This would look up the state_code corresponding to the location value and convert it to lowercase.
When a lookup value is not found in the table, the transformation will fail for that specific attribute.
For full coverage, ensure your lookup table includes entries for all possible source values that may be encountered during provisioning.
To ensure robust provisioning workflows, it's important to include all expected values in your lookup table, validate source data before implementing lookup transformations, and test transformations with representative data sets.
Lookup tables are immutable and automatically deleted when no longer referenced by any policy version
Multiple policy versions can reference the same lookup table (e.g., an active version and a draft version)
Lookup tables are defined at the policy level and can be referenced by any transformer within the policy
Standardize Naming: To use a lookup-based transformer, you will reference the table by file name. Apply consistent conventions for both the table and columns.
Document Mappings: Add descriptions for each lookup table to explain its purpose
Validate Data: Ensure lookup tables are complete and accurate before using them in transformers. Consider how lookup tables will be maintained over time, especially for values expected to change.
Configuring the Oracle Database integration for Veza Lifecycle Management
The Veza integration for Oracle DB enables automated user provisioning, access management, and deprovisioning capabilities. This integration allows you to synchronize identity information, manage group memberships, and automate the user lifecycle from onboarding to offboarding.
This document outlines the steps to enable Oracle DB integration for use in Lifecycle Management, including supported actions and relevant notes. See for more details.
You will need administrative access in Veza to configure the integration.
Ensure you have an existing integration in Veza or add a new one for use with Lifecycle Management.
Verify your Oracle DB integration has completed at least one successful extraction.
Configuration Steps
To enable the integration:
In Veza, go to the Integrations overview
Search for or create an Oracle DB integration
Check the box, Enable usage for Lifecycle Management
Configure the extraction schedule to ensure your Oracle DB data remains current:
Go to Veza Administration > System Settings
In Pipeline > Extraction Interval, set your preferred interval
Optionally, set a custom override for Oracle DB in the Active Overrides section
To verify the health of the Lifecycle Management data source:
Use the main Veza navigation menu to open the Lifecycle Management > Integrations page or the Veza Integrations overview
Search for the integration and click the name to view details
In the Properties panel, click the magnifying glass icon under Lifecycle Management Enabled
Oracle DB can serve as a source for identity information in Lifecycle Management . User identity details are synchronized from Oracle DB, with changes propagated to connected systems.
Oracle DB can also be a target for identity management actions, based on changes in another external source of truth or as part of a workflow.
The integration supports the following Lifecycle Management :
The following attributes can be synchronized:
Entity Type: OracleDB User
Create Allowed: Yes
Method: SQL CREATE USER / ALTER USER
Entity Types: OracleDB Role
Assignee Types: OracleDB User
Supports Remove: Yes
Entity Type: OracleDB User
Method: DISABLED (account lock via ALTER USER ... ACCOUNT LOCK)
Removes Relationships: Yes
Entity Type: OracleDB User
Method: Permanent deletion via DROP USER
Create an Oracle DB user account with the Sync Identities action
Assign default role based on department with Manage Relationships
Set password (requires change on first login)
Update user attributes (profile, tablespaces) with Sync Identities
Remove old role assignments with Manage Relationships
Grant new roles appropriate for the new position
Lock user account with Deprovision Identity (ACCOUNT LOCK)
Remove all role assignments
Preserve the user record for audit purposes
Optional: Delete user permanently with Delete Identity (DROP USER)
Configure how user attributes from a source of identity are synchronized for target user accounts
Attribute synchronization ensures that identity attributes in target systems remain up to date with the corresponding attributes in the source of truth. Veza Lifecycle Management provides configuration at two levels to control how and when attributes are synchronized.
At the action level, there are two distinct options to govern provisioning and user update processes:
Create new users - When enabled, the action will create new user accounts that don't exist in the target system
Update active users - When enabled, the action can update existing user accounts with attribute changes from the source of truth
At the attribute level, there are two explicit choices that define how and when attribute values are applied to user accounts:
Set for new users only - The attribute value is set only when creating new user accounts
Set for new and existing users - The attribute value is set for new accounts and updated for existing accounts when changes are detected
You may not want to enable "Set for new and existing users" for attributes like user principal name, which may change due to marital status or legal name corrections but shouldn't be automatically updated in all systems.
Both levels must be properly configured for an attribute to be continuously synchronized. For example, to keep an employee's department updated:
Enable Update active users on the Sync Identity action
Select Set for new and existing users for the department attribute
Set for new and existing users (continuously sync attributes that change during employment):
First Name, Surname
Department
Title
Manager
Set for new users only (preserve stable identifiers):
Active Directory sAMAccountName
Email Addresses (for Email Write-Back action)
This configuration ensures that dynamic attributes remain up to date while preserving stable identifiers.
Configuring the Salesforce integration for Veza Lifecycle Management.
The Veza integration for Salesforce enables automated user lifecycle management across your identity ecosystem. This integration allows security and IT teams to automate the provisioning, updating, and deprovisioning of Salesforce user accounts based on changes in an authoritative source (such as an HRIS system or another identity provider).
Key capabilities include:
Configuring the PagerDuty integration for Veza Lifecycle Management
The Veza integration for PagerDuty enables automated user provisioning, team membership management, and user deletion capabilities. This integration allows you to synchronize identity information, manage team assignments, and automate the user lifecycle from onboarding to offboarding.
is_active eq true and department eq "Engineering"job_level ge 5 and location sw "US-"{first_name}.{last_name}@company.com{first_name | LOWER}.{last_name | LOWER | SUBSTRING, 0, 10}dept-{department | LOWER}is_active eq true
and customprop_lastdayofwork le "{| NOW | UTC_TO_TIME_ZONE, \"-05:00\" | DATE_ADJUST_DAY, 0 | DATE_FORMAT, \"DateOnly\"}"
and customprop_lastdayofwork gt "{| NOW | UTC_TO_TIME_ZONE, \"-05:00\" | DATE_ADJUST_DAY, -2 | DATE_FORMAT, \"DateOnly\"}"# Google Workspace User Attributes
email: {first_name}.{last_name}@company.com
first_name: {first_name}
last_name: {last_name}Cost Center
AD Distinguished Name (DN)
AD User Principal Name (UPN)
AD Email
https://www.googleapis.com/auth/admin.directory.rolemanagement - Required for admin role management
https://www.googleapis.com/auth/apps.groups.settings - Required for detailed group settings management
https://www.googleapis.com/auth/cloud-platform - Required for Cloud Identity API and broader Google Cloud access
Add to: "Sales Team" group
Unique identifier
first_name
Yes
String
Given name
last_name
Yes
String
Family name
email_addresses
No
Array
Multiple email addresses as a list
Additional email formats
location_areas
No
Array
Location information as a list
organization_names
No
Array
Organization information as a list
Unique identifier, immutable
emails
Yes
Array
List of email addresses
Primary email required
active
No
Boolean
User account status
true=active, false=suspended
public_email
No
String
Public email for profile
Must be in emails list
display_name
No
String
User's display name
Shown on GitHub profile
is_site_admin
No
Boolean
Site administrator privileges
GitHub Enterprise only






name.formatted
Combined first and last name
display_name
No
String
User's display name
displayName
How the user appears in Atlassian products
SYNC_IDENTITIES
Synchronizes identity attributes between systems, with options to create new identities and update existing ones
✅
MANAGE_RELATIONSHIPS
Controls entitlements such as group memberships and role assignments for identities
✅
DEPROVISION_IDENTITY
Safely removes or disables access for identities
✅
DELETE_IDENTITY
Permanently deletes the user account and associated data
✅
SCIM URL (scim_url)
The SCIM endpoint URL for your Atlassian organization
User provisioning and deprovisioning
SCIM Token (scim_token)
Authentication token for SCIM API access
Authenticates user lifecycle operations
Admin API Key (admin_api_key)
API key for Atlassian Cloud Admin API
Group management and ID mapping
SCIM Organization ID (scim_organization_id)
Your organization's SCIM identifier
Yes
String
User's email address
userName
Unique identifier across the organization
name
No
String
Coordinates operations across APIs
User's full name
❌
For multi-tenant configurations: access to CDB$ROOT container
Supported Oracle Database versions: 19c, 21c, or 23ai
No
String
Account status
Values: OPEN, LOCKED, EXPIRED, etc.
profile
No
String
User profile
Profile must exist in the Oracle DB
default_tablespace
No
String
Default tablespace
Tablespace must exist
temporary_tablespace
No
String
Temporary tablespace.
Typically TEMP
authentication_type
No
String
Authentication method
PASSWORD, EXTERNAL, GLOBAL, etc.
SYNC_IDENTITIES
Synchronizes identity attributes between systems, with options to create new identities and update existing ones
✅
MANAGE_RELATIONSHIPS
Controls entitlements such as group memberships for identities
✅
DEPROVISION_IDENTITY
Safely removes or suspends access for identities
✅
DELETE_IDENTITY
Deletes the identity name, specifically the unique identifier associated with it.
✅
CREATE_ENTITLEMENT
Creates entitlements such as groups or roles
❌
SOURCE_OF_IDENTITY
username
Yes
String
User name Identifier
Must be unique, follow Oracle identifier naming rules
password
No
String
User password
Auto-generated if not provided, requires change on first login
Oracle DB provides worker data as input for identity lifecycle policies
account_status
Convert department codes to department names or business units
Map cost centers to budget codes or accounting categories
System-Specific Configurations:
Transform job titles to role designations in target systems
Convert skill codes to certification requirements or training needs
Drag a CSV file or click Browse to upload your reference data
Review the automatically detected column names
Click Save to store the lookup table
<return_column_name> is the column containing the value to return
{location} | LOOKUP locationTable, location_code, city
"Chicago"
{location} | LOOKUP locationTable, location_code, state
"Illinois"
{location} | LOOKUP locationTable, location_code, state_code
"IL"
Value not found in lookup table
Add the missing mapping to the lookup table with the correct source value
Incorrect column name referenced
Check the column names in your lookup table (they are case-sensitive)
Unexpected transformation results
Verify the lookup table content and ensure the correct columns are specified

Note: SUPERUSER is required because Lifecycle Management may need to create or modify roles with SUPERUSER, BYPASSRLS, or other elevated privileges. Without SUPERUSER, the service account cannot manage roles with privileges equal to or greater than its own.
Boolean
Grants SUPERUSER privilege. Superusers bypass all permission checks and have full control over the database. Use with extreme caution.
can_create_db
No
Boolean
Grants CREATEDB privilege, allowing the role to create new databases.
can_create_role
No
Boolean
Grants CREATEROLE privilege, allowing the role to create, alter, and drop other roles. Cannot modify superusers unless the role is also a superuser.
can_initiate_streaming_replication
No
Boolean
Grants REPLICATION privilege. Allows the role to connect in replication mode and access Write-Ahead Log (WAL) streams. Typically used for replication standby servers.
can_by_pass_all_row_level_security
No
Boolean
Grants BYPASSRLS privilege. Allows the role to bypass Row-Level Security (RLS) policies on all tables. Use when the role needs unrestricted access to data regardless of RLS policies.
Preserves:
The role itself (can be re-enabled later)
All role attributes (SUPERUSER, CREATEDB, CREATEROLE, REPLICATION, BYPASSRLS)
Ownership of database objects (tables, schemas, etc.)
Granted permissions on database resources
SYNC_IDENTITIES
Synchronizes identity attributes between systems, with options to create new identities and update existing ones.
✅
MANAGE_RELATIONSHIPS
Controls entitlements such as group memberships for identities.
✅
DEPROVISION_IDENTITY
Safely removes or suspends access for identities.
✅
DELETE_IDENTITY
Deletes the identity name, specifically the unique identifier associated with it.
✅
name
Yes
String
The role name (unique identifier). Must follow PostgreSQL naming rules: start with a letter or underscore, contain only alphanumeric characters and underscores, maximum 63 bytes.
is_super_user
No
location_code,state_code,state,city
MN001,MN,Minnesota,Minneapolis
CA001,CA,California,Los Angeles
TX001,TX,Texas,Houston
TX002,TX,Texas,Austin{<value> | LOOKUP <table_name>, <column_name>, <return_column_name>}{location | LOOKUP locationTable, location_code, state_code | LOWER}ALTER ROLE veza_service WITH SUPERUSER CREATEROLE;Attribute Synchronization: Keep user details in sync across systems, ensuring data consistency
Permission Management: Assign and remove permission sets and roles based on policies
User Deprovisioning: Safely disable access when users leave the organization
The integration leverages the SCIM protocol for standardized identity management operations and uses Salesforce-specific APIs for permission management.
SYNC_IDENTITIES
Synchronizes identity attributes between systems, with options to create new identities and update existing ones
✅
MANAGE_RELATIONSHIPS
Controls entitlements such as permission set assignments, role assignments, and profile assignments for identities
✅
DEPROVISION_IDENTITY
Safely freezes or disables access for identities, includes user deactivation support
✅
CREATE_ENTITLEMENT
Creates entitlements such as Salesforce permission sets
This document includes steps to enable the Salesforce integration for Lifecycle Management, along with details on supported actions and notes.
Before configuring the integration, ensure you have:
Administrative access in Veza to configure the integration
An existing Salesforce integration in Veza or add a new one
At least one successful extraction from your Salesforce integration
The appropriate permissions in Salesforce
Salesforce API v40 or later for user provisioning
The Salesforce integration will need the following permissions:
Assign Permission Sets: Enables assignment and removal of permission sets for users.
Freeze Users: Enables freezing and unfreezing user accounts.
Manage Internal Users: Required for user creation and updates.
Manage IP Addresses: Required for managing trusted IP ranges if IP restrictions are used.
Manage Login Access Policies: Required for configuring login access policies.
Manage Password Policies: Required for setting and resetting passwords during user creation.
Manage Profiles and Permission Sets: Required for permission set and profile assignment.
Manage Roles: Required for role assignments and management.
Manage Sharing: Required for managing sharing rules and access control.
Manage Users: Essential for user lifecycle operations.
Monitor Login History: Required for monitoring user logins.
Reset User Passwords and Unlock Users: Required for account management.
View All Profiles: Required to view profile information for all users.
View All Users: Required to view all user information.
In Salesforce, you can add these permissions for the Veza connected app in the System Permissions section at the bottom of the Permission Set configuration page.
Veza Lifecycle Management uses Salesforce SCIM APIs for identity provisioning operations. The SCIM protocol enables the automated exchange of user identity data between Veza and Salesforce. The permissions listed above provide the necessary access for SCIM functionality.
The Connected App used for the integration must have OAuth scopes that include api and refresh_token permissions and a certificate for JWT-based authentication
To make the required API calls, the integration requires a custom user profile in Salesforce with "API Enabled" permission
For additional details about Salesforce's SCIM implementation, refer to the Salesforce SCIM documentation.
To enable the integration:
In Veza, go to the Integrations overview.
Search for or create a Salesforce integration.
Ensure the integration permission set includes the required permissions.
Check the box to Enable usage for Lifecycle Management.
Save the configuration.
Configure the extraction schedule to ensure your Salesforce data remains current:
Go to Veza Administration > System Settings.
In Pipeline > Extraction Interval, set your preferred interval.
Optionally, set a custom override for Salesforce in the Active Overrides section.
To verify the health of the Lifecycle Management data source:
Use the main Veza navigation menu to open the Lifecycle Management > Integrations page or the Veza Integrations overview.
Search for the integration and click the name to view details.
In the Properties panel, click the magnifying glass icon under Lifecycle Management Enabled.
Veza's Salesforce integration implements the SCIM 2.0 protocol to standardize identity management operations:
Users are represented with standard SCIM core attributes plus Salesforce-specific Enterprise extensions
The system uses email addresses as the primary key for user lookups
Usernames cannot be changed after creation and must be unique within the Salesforce instance
User profiles are managed through SCIM entitlements
User roles are handled through SCIM roles endpoints
User Deprovisioning is implemented as deactivation (setting active=false)
Permission sets are assigned through Salesforce API calls after user creation
Salesforce can serve as a source for identity information in Lifecycle Management Policies. User identity details are synchronized from Salesforce, with changes propagated to connected systems.
Salesforce can also be a target for identity management actions based on changes in another external source of truth or as part of a workflow:
The integration supports the following lifecycle management Actions:
Primary action for user management (creating or updating users):
Usernames cannot be changed after creation.
Email addresses must be unique.
Required attributes must be present (Username, Email, FirstName, LastName).
Passwords are set during user creation.
Division and Department attributes are excluded during updates due to Salesforce API limitations.
Salesforce does not support changing usernames after creation.
The following attributes can be synchronized:
username
Yes
String
Primary login identifier
Unique identifier
emails
Yes
String List
User's email addresses
Custom properties: In addition to the standard attributes above, Veza supports synchronizing custom properties for Salesforce User objects, including both direct properties and indirect (referenced) properties using dot notation (e.g., Profile.Name, Manager.Email). For details on configuring custom properties, see User custom properties in the Salesforce integration guide.
The following relationship types are supported:
Groups: Add and remove group memberships (only for groups with Group Type = Regular).
Permission Sets: Add and remove permission set assignments.
Permission Set Groups: Add and remove permission set group assignments.
Profiles: Manage profile assignments.
User Roles: Synchronize user role assignments.
Notes:
Profile and role assignments are managed via SCIM and Salesforce APIs.
When removing a profile assignment, users are assigned the "Minimum Access - Salesforce" profile by default. This profile must exist in your Salesforce instance for profile changes to work properly.
Only Salesforce groups with the property Group Type = Regular can be used in Manage Relationships configurations.
Groups of type RoleAndSubordinatesInternal are not supported but can be assigned through their corresponding roles.
Direct creation of permission sets ("Create Entitlement" action) is not currently supported.
When a user is deprovisioned:
The user account is frozen or deactivated (Salesforce does not allow user deletion).
Permission set assignments are removed.
Attribute history is preserved for audit.
The account can be reactivated if needed.
SYNC_IDENTITIES
Synchronizes identity attributes between systems, with options to create new identities and update existing ones
✅
DELETE_IDENTITY
Permanently removes users from PagerDuty
✅
This document includes steps to enable the PagerDuty integration for use in Veza Lifecycle Management, along with supported actions and notes. See Supported Actions for more details.
You will need administrative access in Veza to configure the integration.
Ensure you have an existing PagerDuty integration in Veza or add a new one for use with Veza Lifecycle Management.
Verify your PagerDuty integration has completed at least one successful extraction.
The PagerDuty integration will need the following configuration:
API Access Token: A PagerDuty API token with full read and write permissions (not read-only)
API URL: Your PagerDuty instance URL (e.g., https://yourcompany.pagerduty.com or use api.pagerduty.com for API-direct access)
Admin Email
For testing and development, you can create a free PagerDuty developer account at https://developer.pagerduty.com/sign-up/. Developer accounts are limited to a maximum of 3 simultaneous users, but you can delete and recreate users as needed.
To enable the integration:
In Veza, go to the Integrations overview
Search for or create a PagerDuty integration
Ensure the following configuration is complete:
URL: Your PagerDuty domain URL (e.g., https://yourcompany.pagerduty.com)
Token: A valid API access key with write permissions
Admin Email: The email address used for administrative operations
Check the box to Enable usage for Lifecycle Management
To verify the health of the Lifecycle Management data source:
Use the main Veza navigation menu to open the Lifecycle Management > Integrations page or the Veza Integrations overview
Search for the integration and click the name to view details
In the Properties panel, click the magnifying glass icon under Lifecycle Management Enabled
PagerDuty can serve as a source for identity information in Lifecycle Management Policies. User identity details are synchronized from PagerDuty, with changes propagated to connected systems.
PagerDuty does not support account deactivation or suspension. Users can only be fully deleted from the system. The DEPROVISION_IDENTITY action is not available for this integration. Use DELETE_IDENTITY instead when removing user access.
PagerDuty can also be a target for identity management actions, based on changes in another external source of truth or as part of a workflow.
The integration supports the following lifecycle management Actions:
Primary action for user management (creating or updating users):
Entity Types: OAA.PagerDuty.User
Create Allowed: Yes - New user identities can be created if not found
The following attributes can be synchronized:
Identity Model: PagerDuty users are uniquely identified by their email address. The email attribute is used for all user lookup and synchronization operations.
Permanently removes a user from PagerDuty:
Entity Type: OAA.PagerDuty.User
Remove All Relationships: Yes - All team memberships are automatically removed
Deletion Method: Permanent deletion via PagerDuty API
Requirements: The user must exist in PagerDuty (identified by email or user ID)
Permanent Action: User deletion in PagerDuty is permanent and cannot be undone. All user data, including incident history and on-call schedules, will be affected. PagerDuty does not support user suspension or deactivation - deletion is the only method to remove user access.
To provision a new user in PagerDuty and assign them to relevant teams:
Create a policy with your HRIS or identity source (e.g., Workday, Okta)
Configure a workflow for user creation with condition: {job_role} == "Engineer"
Add a Sync Identities action:
Target Integration: PagerDuty
Entity Type: OAA.PagerDuty.User
Create if Not Found: Enabled
Attribute mapping:
To remove a departing user from PagerDuty:
Create a policy with your HRIS or identity source
Configure a workflow for user termination with condition: {employee_status} == "Terminated"
Add a Delete Identity action:
Target Integration: PagerDuty
Entity Type: OAA.PagerDuty.User
Identifier mapping: email: {work_email}
Before deleting a user, ensure they are not assigned to any active on-call schedules or escalation policies that could impact incident response.
PagerDuty enforces API rate limits on all operations. The Veza integration automatically handles rate limiting by:
Monitoring the X-RateLimit-Remaining and X-RateLimit-RetryAfter response headers
Automatically retrying requests after the rate limit reset time
Using exponential backoff for failed requests
If you encounter errors during high-volume operations, consider:
Scheduling bulk provisioning operations during off-peak hours
Batching user creation across multiple workflow executions
Contacting PagerDuty support to discuss rate limit increases for your account
Free and developer PagerDuty accounts have user limits:
Developer accounts: Maximum of 3 simultaneous users
Free tier: Check your PagerDuty plan for specific limits
For production use of Lifecycle Management with PagerDuty, verify that your PagerDuty subscription supports the number of users you plan to manage.
When working with PagerDuty teams in lifecycle management:
Teams are referenced by their PagerDuty team ID (e.g., PCALT99)
Team IDs can be found in the PagerDuty UI under People > Teams or via the Veza entity browser
In Veza, team entity IDs follow the format: custom_provider:application:[datasource_id]:pagerduty:team:[team_id]
How source system properties become Veza attributes
When connecting to integrated systems (see ), Veza ingests properties from the source systems (e.g., Workday, Okta, Active Directory) and normalizes them into standardized attributes that appear when configuring Workflow trigger conditions, configuring Actions, and in views.
While these standardized attributes are intended to ensure consistent naming across different systems, it is important to understand that some attributes may appear differently than their original names in the source system.
❌
SOURCE_OF_IDENTITY
Salesforce can act as a source system for identity lifecycle policies
✅
first_name
Yes
String
Given name
last_name
Yes
String
Family name
profile_id
Yes
String
User's profile ID
is_active
No
Boolean
Account status
department
No
String
Organizational department
user_role_id
No
String
User's role ID
Must be unique across all PagerDuty users
name
Yes
String
Full name of the user
role
No
String
PagerDuty role assigned to the user
Common values: user, admin, limited_user
job_title
No
String
Job title of the user
time_zone
No
String
Time zone for the user in tzinfo format (e.g., 'America/New_York')
Must be a valid IANA time zone string
description
No
String
Description or notes about the user
email: {work_email}
name: {first_name} {last_name}
role: user
time_zone: {time_zone | DEFAULT_VALUE: "America/New_York"}
job_title: {job_title}SYNC_IDENTITIES
Synchronizes identity attributes between systems, with options to create new identities and update existing ones
✅
MANAGE_RELATIONSHIPS
Controls entitlements such as group memberships and role assignments for identities
✅
DEPROVISION_IDENTITY
Safely removes or disables access for identities, includes user logout support
✅
CREATE_ENTITLEMENT
Creates entitlements such as Okta groups
✅
RESET_PASSWORD
Allows password reset operations for Okta users
✅
SOURCE_OF_IDENTITY
Okta can act as a source system for identity lifecycle policies
✅
This document includes steps to enable the Okta integration for use in Lifecycle Management, along with supported actions and notes. See Supported Actions for more details.
You will need administrative access in Veza to configure the integration and grant API scopes in Okta.
Ensure you have an existing Okta integration in Veza or add a new one for use with Lifecycle Management.
Verify your Okta integration has completed at least one successful extraction
The Okta integration will need the additional required API scopes:
okta.users.manage - For user lifecycle operations
okta.groups.manage - For group membership management
Enhanced Security: For organizations with security policies preventing super admin grants, see the Okta custom admin role setup guide which provides least-privilege alternatives that include these additional LCM scopes.
To enable the integration:
In Veza, go to the Integrations overview
Search for or create an Okta integration
Check the box to Enable usage for Lifecycle Management
Configure the extraction schedule to ensure your Okta data remains current:
Go to Veza Administration > System Settings
In Pipeline > Extraction Interval, set your preferred interval
Optionally, set a custom override for Okta in the Active Overrides section
To verify the health of the Lifecycle Management data source:
Use the main Veza navigation menu to open the Lifecycle Management > Integrations page or the Veza Integrations overview
Search for the integration and click the name to view details
In the Properties panel, click the magnifying glass icon under Lifecycle Management Enabled
Okta can serve as a source for identity information in Lifecycle Management Policies. User identity details are synchronized from Okta with changes propagated to connected systems
Okta can also be a target for identity management actions, based on changes in another external source of truth or as part of a workflow:
The integration supports the following lifecycle management Actions:
Primary action for user management (creating or updating users):
Login ID cannot be changed after creation
Email addresses must be unique
Required attributes must be present (login, email, first_name, last_name)
The following attributes can be synchronized:
Both adding and removing memberships are supported. Group memberships are removed in deprovisioning.
Add and remove group memberships
Synchronize group assignments
Track membership changes
When a user is deprovisioned:
User account is disabled
Group memberships are removed
Attribute history is preserved for audit
Account can be reactivated if needed
Entity Types: Okta Groups
Assignee Types: Okta Users
Supports Relationship Removal: Yes
Within Okta, groups can be associated with:
Application group assignments controlling SSO access
Permissions to resources within specific applications
Synchronized AWS SSO groups
Role-based access controls within Okta
Resets passwords for Okta users by expiring their current password and generating a temporary password:
Requires the login attribute as a unique identifier
Non-idempotent action (each execution creates a new password reset event)
Expires the user's current password immediately
Returns an Okta-generated temporary password
Any password provided in the request is ignored; Okta always generates the temporary password
The user must sign in with the temporary password and will be prompted to set a new permanent password
The temporary password is available in notification templates using the {{LOGIN_PASSWORD}} placeholder. Configure a notification for the LIFECYCLE_MANAGEMENT_RESET_PASSWORD event to automatically send the temporary password to users through your organization's approved channels. See Notification Templates for details.
Veza normalizes all property names for consistency:
Employee ID
employee_id
Spaces → underscores
BusinessTitle
business_title
CamelCase → snake_case
Cost-Center
cost_center
Special chars removed
Department Code
customprop_department_code
The following normalization rules typically apply:
Source properties are converted to lowercase
Any spaces and hyphens become underscores
Special characters removed
CamelCase converted to snake_case
Custom fields are identified with a customprop_ prefix
System-computed fields are identified with the sys_attr__ prefix
The following sections include some examples of how Veza handles attributes from common integrations.
Veza recognizes and standardizes many common attributes across source systems:
employee_id
string
Employee identifier
E-98765
email
string
Primary email
department
string
Department name
Veza will make conversions to some attribute names from the source integration. For example, sAMAccountName in Microsoft Active Directory is shown as account_name for Active Directory Users in Veza Access Graph.
Workday → Veza
Worker ID
workday_id
Unique worker identifier
Employee ID
employee_id
Employee number
Business Title
business_title
Job position
Cost Center
cost_center
Okta → Veza
login
login
Username
email
Primary email
status
status
ACTIVE, SUSPENDED, etc.
department
department
Active Directory → Veza
sAMAccountName
account_name
Pre-Windows 2000 login
distinguishedName
distinguished_name
Full LDAP path
userPrincipalName
user_principal_name
user@domain format
memberOf
member_of
Some integrations support custom property extraction for organization-specific fields from custom reports or extended schemas:
Always prefixed with customprop_
Automatically discovered during extraction once enabled
Follow standard normalization rules (lowercase, underscores)
Examples:
customprop_department_code - Custom department identifier
customprop_employeeou - Organizational unit
customprop_region - Geographic region
customprop_project_code - Project allocation
Some entity attributes are computed by Veza, and not derived from source data:
sys_attr__is_mover - Identity has changed monitored properties
sys_attr__would_be_value - Preview value in conditional transformers
sys_attr__would_be_value_len - Preview value length in conditional transformers
See System Attributes for details.
When configuring a Workflow trigger condition or an action that syncs attributes, you can choose from available attributes using a dropdown menu.
Primary Source - Attributes from the main identity source appear without prefixes:
Secondary Sources - Attributes from additional sources are prefixed with the entity type:
Lifecycle Management uses two different expression syntaxes depending on the context:
In Workflow Conditions (SCIM Filter Syntax):
Trigger conditions use SCIM filter syntax to evaluate boolean expressions. See Trigger Conditions Reference for complete documentation.
In Transformers (Formatter/Pipeline Syntax):
Attribute transformers use curly braces and pipes to produce output values. See Transformers for complete documentation.
Important: These syntaxes cannot be interchanged. Use SCIM filter syntax only in condition fields, and formatter syntax only in attribute mapping fields.
With Secondary Sources (in Conditions):
System Attributes - Computed attributes for advanced scenarios
Transformers - Modifying and combining attribute values
Policies - Using attributes in workflow conditions
Role assignment and removal for access management
User account deletion for offboarding
Attribute synchronization for user profiles
Use this integration with Veza Lifecycle Management to:
Onboard users: Automatically create Splunk Enterprise accounts with initial role assignments
Manage access: Add or remove role memberships based on access policies
Offboard users: Delete accounts when users leave the organization
Update profiles: Synchronize user attributes like email and display name
Splunk Enterprise supports the following Lifecycle Management actions:
Action Type
Description
Supported Operations
Sync Identities
Create or update user accounts
Create, Update
Manage Relationships
Assign or remove role memberships
Add, Remove
Delete Identity
Permanently delete user accounts
Delete
Note: Splunk Enterprise does not support the Deprovision Identity action for disabling or locking user accounts. The Splunk API only supports permanent deletion via the Delete Identity action. To offboard users while maintaining audit records, use the Delete Identity action, which preserves activity logs even after account deletion.
Refer to the Lifecycle Management Overview for more information about creating policy-based provisioning workflows with Veza.
Before enabling Lifecycle Management for Splunk Enterprise, you will need:
An Existing Integration: Add a Splunk Enterprise integration and complete at least one successful extraction. See Splunk Enterprise integration.
Sufficient Permissions for Lifecycle Management: The Veza service account needs write capabilities beyond read-only access:
Capability
Required For
edit_user
SYNC_IDENTITIES, DELETE_IDENTITY
edit_roles_grantable or edit_roles
MANAGE_RELATIONSHIPS
The edit_user capability grants permission to create, modify, and delete any user account in Splunk Enterprise. Ensure this service account is properly secured and monitored.
To enable the Splunk Enterprise integration for Lifecycle Management:
In Veza, navigate to Integrations
Locate your Splunk Enterprise integration
Open the integration details
Enable Usage for Lifecycle Management
Verify the integration appears in Lifecycle Management > Integrations
See Managing Integrations for more information on configuring integrations for Lifecycle Management.
Creates new user accounts or updates existing user attributes in Splunk Enterprise.
Capabilities:
Create New Users: Yes
Update Existing Users: Yes
Entity Type: Splunk Enterprise User
Attribute
Type
Description
Example
name
String
Username (unique identifier, lowercase alphanumeric recommended)
jsmith
password
String
User password (required for create operations)
SecurePass123!
Attribute
Type
Description
Default
realname
String
User's display name or full name
Uses name if not provided
When creating a new user:
The name attribute becomes the unique username (must be unique within the Splunk Enterprise instance)
Both email and password are required for user creation. The password must meet your Splunk Enterprise deployment's password complexity requirements, which are configured by your Splunk administrator (e.g., minimum length, required character types).
If realname is not provided, it defaults to the name value
New users are automatically assigned the default user role (Splunk requires at least one role). You can use MANAGE_RELATIONSHIPS to grant additional role assignments
When updating an existing user:
Only the attributes specified in the update request are modified
Other attributes remain unchanged
The name attribute is used to identify the user, but cannot be changed
Password updates are supported, but require providing the new password value
Assigns or removes role memberships for Splunk Enterprise users.
Supported Relationship Types:
Relationship
Description
User → Role
Assign or remove a role for a user.
Splunk Enterprise implements a role relationship manager that:
Adds roles to users by updating the user's role list
Removes roles from users by updating the user's role list
Validates that the target role exists before assignment
Preserves all other assigned roles when adding or removing a single role
Only existing roles can be assigned. Splunk Enterprise groups (LDAP and SAML) are read-only and managed by external identity providers. Lifecycle Management cannot create or modify groups or create new roles.
When Adding a Role:
Veza retrieves the user's current role assignments
Checks if the role is already assigned (skips if already assigned)
Adds the new role to the user's role list
Updates the user with the complete role list
When Removing a Role:
Veza retrieves the user's current role assignments
Checks if the role is currently assigned (skips if not assigned)
Removes the target role from the user's role list
Updates the user with the remaining roles
Notes:
Users must have at least one role in Splunk Enterprise
Removing a user's last role assignment will fail
Role assignments are direct. A role may contain inherited roles depending on Splunk's role inheritance configuration.
Built-in roles (e.g., admin, user, power) can be assigned and removed
Custom roles created in Splunk Enterprise are also supported
Permanently deletes user accounts from Splunk Enterprise. Note that Splunk Enterprise does not have a native "disabled" or "locked" state for accounts (except lock-out).
Delete Method: The account and all associated data are permanently removed from Splunk Enterprise.
Attribute
Type
Description
name
String
Username of the account to delete
When deleting a user:
The user account is permanently removed
All role assignments are removed as part of the deletion
User-owned objects (saved searches, dashboards, etc.) may be affected based on Splunk configuration
The username can be reused for a new user after deletion
User deletion is permanent and cannot be undone through the API. While Splunk administrators can view audit logs to access deleted user records, consider removing role assignments (using MANAGE_RELATIONSHIPS) for temporary access revocations. Built-in system accounts (e.g., admin) cannot be deleted.
Create User Account (SYNC_IDENTITIES): Provide a name, email, password, and optionally realname. The user is created with the default user role.
Assign Roles (MANAGE_RELATIONSHIPS): Add role assignments based on job function.
Add Role (MANAGE_RELATIONSHIPS): Add a role assignment to the user
Remove Role (MANAGE_RELATIONSHIPS): Remove role assignment from the user
Revoke Access (Reversible): Remove all elevated roles via MANAGE_RELATIONSHIPS, leaving only the base user role.
Delete Account (Permanent): Use DELETE_IDENTITY to remove a user account permanently.
Use SYNC_IDENTITIES to update a user's email, realname, or password. Provide the name to identify the user; only the specified attributes are updated.
Configuring the AWS IAM Identity Center integration for Veza Lifecycle Management.
The Veza integration for AWS IAM Identity Center enables automated user lifecycle management, with support for user provisioning and de-provisioning, group membership management, and attribute synchronization across AWS organizations.
This document includes steps to enable the AWS IAM Identity Center integration for use in Lifecycle Management, along with supported actions and notes. See for more details.
You will need administrative access in Veza to configure the integration and appropriate permissions in AWS IAM Identity Center.
Ensure you have an existing in Veza or add a new one for use with Lifecycle Management.
Verify your AWS integration has completed at least one successful extraction
Important: AWS IAM Identity Center Lifecycle Management requires:
SCIM endpoint configuration in IAM Identity Center (automatic provisioning must be enabled)
The integration uses AWS's SCIM v2.0 API implementation over HTTPS
Authentication is handled through IAM policies and does not require separate SCIM bearer tokens
To enable the integration:
In Veza, go to the Integrations overview
Search for or create an AWS integration
Check the box to Enable usage for Lifecycle Management
Configure the extraction schedule to ensure your AWS IAM Identity Center data remains current:
Go to Veza Administration > System Settings
In Pipeline > Extraction Interval, set your preferred interval
Optionally, set a custom override for AWS in the Active Overrides section
To verify the health of the Lifecycle Management data source:
Use the main Veza navigation menu to open the Lifecycle Management > Integrations page or the Veza Integrations overview
Search for the integration and click the name to view details
In the Properties panel, click the magnifying glass icon under Lifecycle Management Enabled
AWS IAM Identity Center can serve as a source for identity information in Lifecycle Management . User identity details are synchronized from AWS IAM Identity Center with changes propagated to connected systems.
AWS IAM Identity Center can also be a target for identity management actions, based on changes in another external source of truth or as part of a workflow.
The integration supports the following lifecycle management :
Primary action for user management (creating or updating users):
Username serves as the unique identifier and cannot be changed after creation
Email addresses must be unique across the AWS IAM Identity Center instance
First name, last name, display name, and username are required attributes for user creation
The following attributes can be synchronized:
Controls group memberships for users in AWS IAM Identity Center:
Add and remove group memberships for users
Synchronize group assignments based on source system changes
Support for both adding and removing relationships
When a user is deprovisioned in AWS IAM Identity Center:
User account is disabled (set to inactive) rather than deleted
All group memberships are automatically removed
User's permission set assignments are revoked
Entity Types: AWS IAM Identity Center Groups
Assignee Types: AWS IAM Identity Center Users
Supports Relationship Removal: Yes
Within AWS IAM Identity Center, groups can be associated with:
Permission sets that grant access to AWS accounts and resources
AWS applications and third-party SAML applications
AWS account assignments for cross-account access
Automate the onboarding process for new employees:
Identity Creation: Create AWS IAM Identity Center user account with attributes synchronized from HR system
Group Assignment: Add user to department-specific groups based on their role and location
Permission Sets: Automatically assign appropriate permission sets for AWS resource access
Handle internal role changes and departmental transfers:
Attribute Update: Synchronize updated employee information from HR system
Group Reassignment: Remove user from previous department groups and add to new ones
Permission Adjustment: Update permission set assignments to match new role requirements
Securely remove access when employees leave:
Account Deprovisioning: Disable the user account in AWS IAM Identity Center
Group Removal: Remove all group memberships and permission set assignments
Access Revocation: Ensure all AWS account access is immediately revoked
Configuring the ServiceNow integration for Veza Lifecycle Management
The Veza integration for ServiceNow enables automated user lifecycle management capabilities. ServiceNow can serve as both a source of identity for lifecycle policies and a target for custom actions that insert records into ServiceNow tables.
This document includes steps to enable the ServiceNow integration for use in Lifecycle Management, along with supported actions and notes. See for more details.
You will need administrative access in Veza to configure the integration.
Ensure you have an existing in Veza or add a new one for use with Lifecycle Management.
Verify your ServiceNow integration has completed at least one successful extraction.
The existing ServiceNow integration credentials (admin and snc_read_only roles) are sufficient for Lifecycle Management. Custom Actions use the same Table API as the standard integration.
To enable the integration:
In Veza, go to the Integrations overview
Search for or create a ServiceNow integration
Check the box to Enable usage for Lifecycle Management
To verify the health of the Lifecycle Management data source:
Use the main Veza navigation menu to open the Lifecycle Management > Integrations page or the Veza Integrations overview
Search for the integration and click the name to view details
In the Properties panel, click the magnifying glass icon under Lifecycle Management Enabled
ServiceNow can serve as a source for identity information in Lifecycle Management . User identity details, group memberships, and role assignments are synchronized from ServiceNow with changes propagated to connected systems.
ServiceNow can also be a target for Custom Actions that insert records into ServiceNow tables as part of automated workflows.
The integration supports the following lifecycle management :
ServiceNow provides identity information for lifecycle policies using the ServiceNowUser entity type. The following information is available:
User Identities: Users with their email addresses, employee numbers, and profile attributes (entity type: ServiceNowUser)
Group Memberships: ServiceNow groups that users belong to are tracked as relationships and can be referenced in transformer policies
Role Assignments: ServiceNow roles assigned to users (both direct and inherited) are tracked as relationships and can be referenced in transformer policies
When used as a source of identity, ServiceNow user attributes can be mapped to target systems through attribute transformers and lifecycle management policies.
Custom Actions enable Veza to insert records into any ServiceNow table. This is useful for:
Creating incident tickets for access changes
Logging audit records for compliance
Triggering ServiceNow workflows via table insertions
Custom Actions are non-idempotent. Each execution creates a new record in the specified ServiceNow table. Running the same action multiple times will create duplicate records.
Configuration
When configuring a Custom Action for ServiceNow, specify the target table and any additional fields:
Attribute names can only contain lowercase letters, numbers, and underscores (a-z, 0-9, _). This matches ServiceNow's field naming conventions.
Example: Creating an Incident Record
To create an incident ticket when access is revoked:
Create a policy with your source of identity (e.g., Workday, Okta)
Configure a workflow with a Custom Action targeting ServiceNow
Set the action attributes:
Attribute values use syntax. Use {attribute_name} to reference source identity attributes (e.g., {email}, {name}, {employee_number}). See the for available functions.
The Custom Action will POST to the ServiceNow Table API (/api/now/table/incident) and create a new incident record.
Example: Audit Trail Records
To maintain an audit trail of lifecycle management actions:
Create a custom table in ServiceNow for audit records (e.g., u_veza_audit_log)
Configure a Custom Action with:
When ServiceNow serves as a source of identity, the following user attributes are available for mapping in transformers:
If you have configured for your ServiceNow integration, those additional user attributes are also available for use in lifecycle management workflows.
No User Provisioning: ServiceNow Lifecycle Management does not support creating, updating, or disabling user accounts directly. Use Custom Actions to trigger ServiceNow workflows that handle user provisioning.
No Group/Role Management: Direct management of ServiceNow group memberships or role assignments is not supported. Use Custom Actions to create requests that trigger ServiceNow's native provisioning workflows.
Non-Idempotent Actions: Custom Actions always create new records. Design workflows accordingly to avoid duplicate entries.
workday_id
employee_id
business_title
hire_date
email
customprop_department_codeOktaUser.login
OktaUser.department
AzureADUser.job_title
ActiveDirectoryUser.distinguished_nameemployee_types co "Full Time" and department eq "Engineering"{first_name}.{last_name}@{customprop_domain}.comOktaUser.status eq "ACTIVE" and WorkdayWorker.is_active eq trueUnique identifier
Yes
String
User's email address
Unique
first_name
Yes
String
Given name
last_name
Yes
String
Family name
display_name
No
String
User's display name
user_type
No
String
User type
department
No
String
Organizational department
title
No
String
Job title
manager
No
String
Manager's name
manager_id
No
String
Manager's identifier
employee_id
No
String
Employee identifier
division
No
String
Business division
organization
No
String
Organization name
cost_center
No
String
Cost center
country_code
No
String
Country code
second_email
No
String
Secondary email address
nickName
No
String
User's nickname
No
String
Group description
type
No
String
Group type
source
No
String
Group source
last_membership_updated_at
No
Timestamp
Last membership update time
Tokyo or newer is required.table
incident
short_description
Access revoked for {email}
description
User {name} ({employee_number}) access revoked
category
access_management
priority
3
u_user_email
{email}
u_employee_id
{employee_number}
u_user_source
{source}
u_action_source
Veza Lifecycle Management
employee_number
String
Employee identifier
source
String
Identity source (e.g., LDAP, manual)
is_active
Boolean
Whether the user account is active
is_locked
Boolean
Whether the user account is locked
mfa_active
Boolean
MFA enabled for the user
password_needs_reset
Boolean
Whether the user must reset their password
failed_attempts
Number
Number of failed login attempts
web_service_access_only
Boolean
API-only account (no UI access)
internal_integration_user
Boolean
Internal integration service account
identity_type
String
Identity classification (HUMAN or NONHUMAN)
created_at
Timestamp
Account creation date
last_login_at
Timestamp
Last login date
SYNC_IDENTITIES
Synchronizes identity attributes between systems, with options to create new identities and update existing ones
❌
MANAGE_RELATIONSHIPS
Controls entitlements such as group memberships and role assignments
❌
DEPROVISION_IDENTITY
Safely removes or disables access for identities
❌
CREATE_ENTITLEMENT
Creates entitlements such as groups or roles
❌
CUSTOM_ACTION
Inserts records into any ServiceNow table
✅
SOURCE_OF_IDENTITY
ServiceNow can act as a source system for identity lifecycle policies
✅
table
Yes
String
The ServiceNow table name to insert records into
(additional)
No
String
Any additional fields to set on the new record
table
u_veza_audit_log
email
String
User's email address
name
String
User's display name (node name in Veza graph)
Custom fields prefixed
Engineering
title
string
Job title
Senior Engineer
business_title
string
Business position
Senior Engineer
manager
string
Manager reference
managers
list
List of managers
[John Smith]
is_active
boolean
Active status
true
hire_date
date
Employment start date
2024-01-15
cost_center
string
Financial allocation
CC-1000
Financial allocation
Employee Type
employee_types
List (e.g., Full Time)
Manager
managers
List of manager names
Department name
manager
manager
Manager's email/ID
List of group DNs
department
department
Department name
title
title
Job title

identitystore:CreateUser - For user creation operations
identitystore:UpdateUser - For user attribute synchronization
identitystore:DeleteUser - For user deletion (note: AWS uses SCIM deprovisioning which disables rather than deletes)
identitystore:GetUserId - For user lookup operations
identitystore:CreateGroup - For group creation
identitystore:CreateGroupMembership - For group membership management
identitystore:DeleteGroupMembership - For removing group memberships
identitystore:ListGroups - For group discovery operations
identitystore:ListGroupMemberships - For membership enumeration
display_name
Yes
String
User's display name
Required for creation
first_name
Yes
String
Given name
Required for creation
last_name
Yes
String
Family name
Required for creation
No
String
User's email address
Unique if provided
department
No
String
Organizational department
division
No
String
Business division
title
No
String
Job title
Users can be reactivated if needed by updating the Active attribute
SYNC_IDENTITIES
Synchronizes identity attributes between systems, with options to create new identities and update existing ones
✅
MANAGE_RELATIONSHIPS
Controls entitlements such as group memberships and role assignments for identities
✅
DEPROVISION_IDENTITY
Safely removes or disables access for identities
✅
CREATE_ENTITLEMENT
Creates entitlements such as groups
✅
SOURCE_OF_IDENTITY
AWS IAM Identity Center can act as a source system for identity lifecycle policies
✅
username
Yes
String
Primary user identifier
name
Yes
String
Group name identifier
Unique identifier
SOURCE_OF_IDENTITY
Oracle HCM provides worker data as input for identity lifecycle policies
✅
EMAIL_WRITE_BACK
Writes email addresses from target systems back to Oracle HCM worker records
✅
SYNC_IDENTITIES
Synchronizes identity attributes to Oracle HCM (as target)
❌
CREATE_IDENTITY
Creates new user accounts or worker records
This document includes steps to enable the Oracle HCM integration for use in Lifecycle Management, along with supported actions and notes. See Supported Actions for more details.
You will need administrative access in Veza to configure the integration and appropriate access in Oracle HCM.
Ensure you have an existing Oracle HCM integration in Veza or add a new one for use with Lifecycle Management.
Verify your Oracle HCM integration has completed at least one successful extraction
The Oracle HCM service account requires specific permissions for different operations:
REST API Permissions (Read-only):
/hcmRestApi/resources/11.13.18.05/workers - View worker records
/hcmRestApi/resources/11.13.18.05/jobs - View job information
/hcmRestApi/resources/11.13.18.05/actionsLOV - View available actions
SCIM API Permissions:
/hcmRestApi/scim/Users - User management endpoint
GET: Read user by ID, person number, or username
PATCH: Update user email addresses only (write-back functionality)
BI Publisher Permissions:
Execute reports via the QueryDM interface
Access to custom report path (must start with /Custom and end with .xdo)
Retrieve CSV-formatted report output
Important: Oracle HCM integration requires specific report configurations and API access. Ensure your Oracle HCM user account has sufficient privileges to read worker data and update email addresses.
Technical Requirements:
Oracle HCM REST API version: 11.13.18.05
REST Framework version: 4
SCIM 2.0 support for user operations
HTTP Basic Authentication
Concurrent request limit: 8 (for optimal performance)
Configuration Parameters:
url: Oracle HCM instance URL (required)
username: Service account username (required)
password: Service account password (required)
report_path: BI Publisher report path starting with /Custom (required)
additional_columns: Comma-separated list of additional CSV columns to extract (optional)
identity_mapping: Custom identity mapping configuration (optional)
To enable the integration:
In Veza, go to the Integrations overview
Search for or create an Oracle HCM integration
Check the box to Enable usage for Lifecycle Management
Configure the extraction schedule to ensure your Oracle HCM data remains current:
Go to Veza Administration > System Settings
In Pipeline > Extraction Interval, set your preferred interval
Optionally, set a custom override for Oracle HCM in the Active Overrides section
To verify the health of the Lifecycle Management data source:
Use the main Veza navigation menu to open the Lifecycle Management > Integrations page or the Veza Integrations overview
Search for the integration and click the name to view details
In the Properties panel, click the magnifying glass icon under Lifecycle Management Enabled
Oracle HCM integration relies on BI Publisher reports to extract worker data. The report must be properly configured with specific requirements:
Must be an absolute path starting with /Custom
Must end with .xdo extension
Example: /Custom/HCM/WorkerDataReport.xdo
The BI Publisher report must output CSV data with these exact column headers:
Core Required Columns:
CORRELATION_ID - Unique worker identifier (required)
EMPLOYEE_ID - Employee number/ID (required)
FIRST_NAME - Worker's first name (required)
LAST_NAME - Worker's last name (required)
STATUS - Employment status (must be "ACTIVE" for active workers)
START_DATE - Employment start date in YYYY-MM-DD format
Additional Standard Columns:
NAME - Full name
COMPANY_NAME - Company name
PREFERRED_FIRST_NAME - Preferred first name
DISPLAY_NAME - Display name
CANONICAL_NAME - Canonical name
USER_NAME - Username
EMAIL - Primary email address
PERSONAL_EMAIL - Personal email
HOME_LOCATION - Home location
LOCATION - Work location
COST_CENTER - Cost center code
DEPARTMENT_NAME - Department name
MANAGER - Manager's correlation ID
ACTIVE - Active flag (Y/N)
TERM_DATE - Termination date in YYYY-MM-DD format
TITLE - Job title
EMPLOYEE_TYPE - Employment type (full time, part time, contractor)
Date Format: All dates must use YYYY-MM-DD format
Employment Status: Must be exactly "ACTIVE" for active workers (case-sensitive)
Boolean Values: Use "Y" or "N" for the ACTIVE column
Duplicate Records: System handles duplicates by keeping the most recent active record
Oracle HCM serves as a source for identity information in Lifecycle Management Policies. Based on the implementation configuration, Oracle HCM supports only two specific actions:
Oracle HCM provides authoritative worker information for identity lifecycle policies:
Data Flow: FROM Oracle HCM TO target systems (unidirectional)
Purpose: Serves as the authoritative source for worker identity data
Scope: Worker records from BI Publisher reports are made available to lifecycle policies
Usage: Target systems can query Oracle HCM worker data for provisioning decisions
Available Worker Attributes for Lifecycle Management:
Oracle HCM uses a multi-layer attribute system:
BI Publisher Report Fields: Over 20 fields available for reading worker data (see BI Publisher Report Configuration)
Lifecycle Management Attributes: Only 3 attributes are available for synchronization:
user_name
Yes
String
userName
Worker username
Primary identifier, required for all operations
No
String
Important: The SCIM API only supports these three attributes for write operations. All other worker data from BI Publisher reports is read-only.
Workers can be identified using multiple approaches:
Person Number (Preferred): Extracted from entity ID for most operations
Entity ID: Used for direct operations and testing scenarios
SCIM User ID: Used specifically for email write-back operations
Oracle HCM supports writing email addresses from target systems back to worker records:
Direction: Unidirectional - writes email addresses FROM provisioned target systems TO Oracle HCM worker records
Method: Uses SCIM PATCH operation to update worker email addresses
Worker Identification: Supports both entity ID-based and person number-based worker identification
Limitation: Oracle HCM SCIM API supports only one email address per worker record
Logic: Only updates if the new email address differs from the existing value
When an email address is created in a target system (such as Exchange or Google Workspace), the write-back action updates the corresponding Oracle HCM worker record with the new email address via the /hcmRestApi/scim/Users endpoint.
Oracle HCM can serve as the source of truth for new hire provisioning workflows:
Worker Added in Oracle HCM: New worker record is created with basic information
Identity Sync: Worker attributes are synchronized to target systems (Active Directory, Okta, etc.)
Email Creation: Corporate email account is created in the target email system
Email Write-Back: The newly created email address is written back to the Oracle HCM worker record
When worker information changes in Oracle HCM:
Attribute Changes: Worker attributes are updated in Oracle HCM (department, title, etc.)
Continuous Sync: Changes are automatically propagated to connected target systems
Consistency Maintenance: All systems maintain consistent worker information
For workers who need new email addresses:
Email Creation: Target email system creates a new email account
Write-Back Process: Oracle HCM worker record is updated with the new email address via SCIM API
Identity Sync: Updated email information is synchronized across all connected systems
Report Path Errors:
Ensure report path starts with /Custom and ends with .xdo
Verify the report exists and is accessible
Check BI Publisher permissions
Column Mapping Issues:
Verify all required column headers are present in CSV output
Check column name spelling (case-sensitive)
Ensure date columns use YYYY-MM-DD format
Authentication Failures:
Verify HTTP Basic Authentication credentials
Check user has access to required API endpoints
Confirm SCIM permissions for email write-back
Data Processing Problems:
STATUS column must contain "ACTIVE" for active workers
CORRELATION_ID must be unique for each worker
Handle duplicate records appropriately
Email Write-Back Issues:
Verify worker exists and is identifiable by person number or entity ID
Check SCIM endpoint permissions
Only one email address per worker is supported
Assigning Microsoft 365 licenses to users based on Workday attributes during the onboarding process
This guide explains how to automatically assign Microsoft 365 licenses to users as part of a Workday-triggered onboarding workflow. License assignment is a common requirement when provisioning new employees who need access to Microsoft productivity tools like Outlook, Teams, and SharePoint.
When a new employee is hired in Workday, you can configure Veza Lifecycle Management to:
Configuring the Workday integration for Veza Lifecycle Management
The Veza integration for Workday enables automated Lifecycle Management workflows using Workday as a source of truth for employee identity information. This integration supports identity synchronization, security group management, and bidirectional email updates.
Configuring the Oracle Fusion Cloud integration for Veza Lifecycle Management
Note: Only email updates are performed; full user creation/deletion not used
Uses same BI Publisher infrastructure as Oracle Fusion Cloud integration.
❌
MANAGE_RELATIONSHIPS
Controls entitlements such as group memberships and role assignments
❌
DEPROVISION_IDENTITY
Safely removes or disables access for identities
❌
CREATE_ENTITLEMENT
Creates entitlements such as groups or roles
❌
emails[0].value
Worker's email address
Can be updated via write-back, single email only
display_name
No
String
displayName
Worker's display name
May experience update delays
Create a user account in Azure AD
Assign the appropriate Microsoft 365 licenses based on employee attributes (department, role, location)
Optionally enable email functionality
This automation ensures consistent license assignment, reduces manual IT work, and helps control licensing costs by assigning only the licenses each employee needs.
The following diagram shows the license assignment flow:
Before starting this implementation, ensure you have:
Workday Integration: Configured Workday for Lifecycle Management as your source of identity
Azure AD Integration: Configured Azure AD for Lifecycle Management as a target system with the following permissions:
Directory.ReadWrite.All
Group.ReadWrite.All
GroupMember.ReadWrite.All
User.EnableDisableAccount.All
Completed Extractions: At least one successful extraction for each integration
Available Licenses: Sufficient Microsoft 365 licenses in your Azure AD tenant for the license SKUs you plan to assign
Administrative Access: Veza administrative access to create Lifecycle Management policies
Finding License SKU IDs: To assign licenses, you'll need the SKU IDs for your Microsoft licenses. You can retrieve these using the Microsoft Graph API endpoint GET /subscribedSkus. For a complete list of Microsoft product names and SKU identifiers, see the Microsoft product names and service plan identifiers documentation.
Before configuring the workflow, map your organization's license requirements to Workday attributes:
Full-Time
Any
ENTERPRISEPACK
Microsoft 365 E3
Full-Time
Engineering
ENTERPRISEPREMIUM
Microsoft 365 E5
Contractor
Any
O365_BUSINESS_ESSENTIALS
SKU IDs vs. Display Names: The SKU IDs shown above (like ENTERPRISEPACK) are internal Microsoft identifiers. The display names (like "Microsoft 365 E3") are what you see in the Azure portal and Veza UI.
Create a policy using Workday as the source of identity:
Navigate to Lifecycle Management > Policies
Click Create Policy
Configure the policy in the wizard:
Policy Name: Workday Azure License Provisioning
Description: (Optional) Describe the policy purpose
Primary Identity Source: Select your Workday integration (the entity type is shown alongside the integration name)
Click Save to create the policy
Add a workflow that triggers when new employees are hired:
Edit your policy and click Add Workflow
Configure the workflow trigger:
Workflow Name: New Employee Onboarding
Condition: is_active eq true (optionally add AND hire_date ge "2024-01-01T00:00:00" to limit to employees hired after a specific date). The date format follows ISO 8601 (RFC 3339) syntax.
Continuous Sync: Enabled
First, create the user in Azure AD:
In your workflow, click Add Action
Select Sync Identities
Configure the action:
Description: Create Azure AD user from Workday
Target: Azure AD User
Integration: Your Azure AD integration
Create new users: Enabled
Continuous Sync: Enabled
Configure attribute mappings:
principal_name
{username}@yourdomain.com
Yes
display_name
{first_name} {last_name}
Yes
mail_nickname
{username}
Yes
first_name
{first_name}
Usage Location Required: The usage_location attribute must be set before licenses can be assigned. This two-letter country code (ISO 3166-1 alpha-2) determines which services are available to the user based on regional compliance requirements.
When mapping date attributes between Workday and Azure AD, you may need to convert date formats. Use the DATE_FORMAT transformer with Go time layout syntax to specify the output format.
Example: Converting hire_date to ISO 8601 format
If Workday provides dates in MM/DD/YYYY format but Azure AD expects YYYY-MM-DD:
The reference date for Go time layouts is Mon Jan 2 15:04:05 MST 2006. Common format patterns:
For more transformer options, see .
Before adding the license assignment action, create Access Profiles that contain the license entitlements:
Navigate to Lifecycle Management > Access Profiles
Click Create Access Profile
Configure the profile:
Name: Microsoft 365 E3 License
Description: Standard Microsoft 365 E3 license assignment
Add an entitlement:
Integration: Your Azure AD integration
Entity Type: Azure AD License
Click Save
Repeat this process to create additional Access Profiles for different license types:
Microsoft 365 E3 License
ENTERPRISEPACK
Standard employees
Microsoft 365 E5 License
ENTERPRISEPREMIUM
Engineering department
Microsoft 365 Business Basic
O365_BUSINESS_ESSENTIALS
Contractors
Access Profiles Best Practice: Create separate Access Profiles for each license type rather than combining multiple licenses in one profile. This provides flexibility for conditional assignment and easier maintenance.
Now add the license assignment using Manage Relationships with your Access Profiles:
Click Add Action
Select Manage Relationships
Configure the action:
Description: Assign Microsoft 365 licenses
Access Profiles: Select the appropriate Access Profile(s)
Remove Existing Relationships: No (to preserve any manually assigned licenses)
For assigning the same license to all employees:
Condition: (leave empty for all users matching workflow)
Access Profiles: Select "Microsoft 365 E3 License"
Remove Existing Relationships: No
For different licenses based on department, add multiple Manage Relationships actions with conditions:
Engineering Department (E5):
Condition: department eq "Engineering"
Access Profiles: Select "Microsoft 365 E5 License"
Remove Existing Relationships: No
All Other Departments (E3):
Condition: department ne "Engineering"
Access Profiles: Select "Microsoft 365 E3 License"
Remove Existing Relationships: No
Full-Time Employees:
Condition: worker_type eq "Full_Time"
Access Profiles: Select "Microsoft 365 E3 License"
Remove Existing Relationships: No
Contractors:
Condition: worker_type eq "Contractor"
Access Profiles: Select "Microsoft 365 Business Basic"
Remove Existing Relationships: No
If you want to ensure Exchange Online is configured:
Click Add Action
Select Create Email
Configure the action:
Description: Enable Exchange Online mailbox
Target: Azure AD User
Integration: Your Azure AD integration
Create Email vs License Assignment: The Create Email action specifically assigns an Exchange Online license and enables email functionality. If your main license (E3, E5) already includes Exchange Online, this step may be redundant. Use this action when you need to ensure email is enabled regardless of which base license is assigned.
Ensure your actions execute in the correct order:
Sync Identities - Creates the user account (must run first)
Manage Relationships - Assigns licenses via Access Profiles (requires user to exist)
Create Email (optional) - Enables mailbox (requires user and license)
Access Profiles Must Exist First: The Access Profiles referenced in your Manage Relationships actions must be created before you configure the workflow. Access Profile creation (Step 5) is a one-time setup that happens outside the workflow itself.
Use the drag handles in the workflow editor to reorder actions if needed.
Select your policy
Click the overflow menu (three dots icon) and select Perform Dry Run
In the Identity field, select an employee from the dropdown
Click Show results to verify:
User creation attributes are correct
License assignment action is included
No errors are reported
Identify a test user in Workday (or create one in a test environment)
Ensure the test user matches your workflow conditions
Enable the policy and trigger a sync
Verify in Azure AD:
User account was created
Correct license(s) are assigned
Usage location is set
To assign multiple licenses to a single user, you can either:
Option 1: Create an Access Profile with multiple entitlements
Create a single Access Profile containing multiple license entitlements, then reference it in one Manage Relationships action.
Option 2: Add multiple Manage Relationships actions with different Access Profiles
Access Profile Strategy: Option 2 (separate Access Profiles) provides more flexibility for conditional logic and makes it easier to manage license changes independently. Option 1 is simpler when all licenses are always assigned together.
When employees change roles, you may need to update their licenses:
Create a Mover Workflow with the condition: department changed
Add a Manage Relationships action with:
Remove Existing Relationships: Yes (removes old licenses)
Add conditional license assignments for the new role
To remove licenses when employees leave:
In your Leaver Workflow, add Deprovision Identity action:
Remove All Licenses: Yes
De-provisioning Method: Disabled
Alternatively, use Manage Relationships with Remove Existing Relationships enabled before deprovisioning.
Azure Lifecycle Management - Azure AD integration reference
Workday Integration - Workday configuration
Veza Lifecycle Management provides a unified platform that automates identity provisioning and de-provisioning across your entire technology stack. Changes in your HR system automatically trigger coordinated workflows across all connected applications, ensuring consistent access management throughout the employee lifecycle.
Before you begin creating draft Policies for automating Lifecycle Management workflows, you should establish and document how employees in your organization are mapped to business roles, and corresponding birthright entitlements (default access permissions granted based on an employee's role) such as groups and roles in target applications.
Implementing Veza Lifecycle Management will require:
Defining segmentation criteria in terms of Business Roles for identities in your organization.
Defining Role Conditions used in Lifecycle Management policies that Veza will use to match roles to identities, based on attributes from the source of identity.
Defining Profiles for each target application that will map Business Roles to application-specific entitlements.
Assigning Profiles to Business Roles to enable business rules.
The topics in this document will help you structure your Lifecycle Management implementation, and establish foundations that you can use to simplify access management throughout the employee lifecycle.
Is a lifecycle management process defined for your organization?
If yes: Begin assessing your current policies for implementation with Veza Lifecycle Management.
If no: Work with application owners, HR administrators, and other stakeholders to establish protocols for granting and revoking access as employees join, depart, or change roles.
Do you have one, or even multiple sources of truth for employee identity metadata?
At least one source of identity is required to trigger Lifecycle Management actions when there are changes in the data source. This data source could be an HRIS system, identity provider, directory service, or an exported report.
Veza supports importing employee records from built-in , OAA integrations using the , and .
What scenarios will be automated?
A range of applications can be sources of identity and targets for Lifecycle Management, with different actions supported for each integration. See and for the current capabilities.
Begin by identifying and cataloging the different roles that can be assigned to employees and their digital identities within your organization. Users will be granted entitlements within target applications based on these business roles based on your Lifecycle Management policies.md.
This list of business roles might be sourced from an organization chart, or a human resources information system (HRIS). These roles can be defined in terms of any discriminating attributes from a source of identity, such as:
Employee or contractor status
Roles and job positions
Business Units (BUs)
Locations
Define and list the different populations of employees with different levels of access in your organization (such as by roles, regions, and teams).
Organize the populations hierarchically, each inheriting the access granted to its parent population. For example, you might have a structure "All Employees" > "Sales Team" > "Sales Managers," with each inheriting the access granted to the parent.
Create a in Veza to model each segment.
Example Business Roles:
Sales
Developers
Executive Employees
US Employees
China Employees
Identify the attributes and conditions that will identify the segment each user belongs to. The possible attributes will depend on the employee metadata provided by your HRIS or other source of truth for identity.
For example, you might assign certain Active Directory groups only to US employees, identified by a source Workday Worker's work_location. To define these conditions, you will need to understand what attributes are available within the source of truth, and how the values map to each employee segment.
Consider how employee records are structured in your source of identity, including all the built-in attributes belonging to an identity, and the possible values.
Check if any custom attributes can be used to define role conditions, and ensure these are enabled in the Veza Access Graph.
Document how employee populations correspond to the attribute values contained in the source of identity.
Examples: Source attributes for role conditions
The following standard attributes are available by all HRIS integrations that use an Open Authorization API template, along with any custom properties enabled for the integration. You can typically import data from any HRIS system to Veza using this template, sourced from a generated report, API calls, or CSV data.
Employee Number
Unique identifier for the employee.
Company
The company or subsidiary the employee works for.
First Name
Employee's first name.
Last Name
Employee's last name.
Preferred Name
Employee's preferred first name.
Display Full Name
Full name for display; includes preferred first name if available.
Using this standard identity metadata, a Lifecycle Management workflow runs specific actions for identities where some or all of the conditions are true:
Employment Status equals "Pending"
Employment Types equals "Full Time"
Department equals "Engineering"
Work Location equals "US"
Cost Center equals "R&D"
Start Date on or after "2025-01-01"
A Profile defines a set of entitlements for a specific application that can be assigned to users. For each target application, application owners will need to establish levels of birthright entitlements by defining Profiles mapped to groups, roles, or other entitlements that can be assigned to a user.
Review target applications to validate that the expected entitlements are configured, with the correct scopes and permissions for the Profiles they will be associated with.
Create Lifecycle Management Access Profiles mapped to those entitlements.
Examples: Access Profiles
AD Executive Employees
Active Directory
Executive Employee - Manager US (Active Directory Group)
AD Engineering Managers
Active Directory
Engineering - Manager US (Active Directory Group)
Azure Helpdesk Role
Azure
Helpdesk Administrator (Azure AD Role)
Google China Employees
Google Cloud
When configuring the Manage Relationships action, administrators can grant or revoke access by choosing a Business Role that inherits the desired Profile.
Configure Business Roles to inherit the corresponding access profiles, mapping entitlements to employee segments.
Create Business Roles for each segment.
For each Business Role, inherit a corresponding access profile.
Assign one or more Profiles to each Business Role as needed to fully define the birthright entitlements for each position.
Examples: Map Business Roles to Profiles
Asia Employees
US Employees
Developers
Attributes from the source of identity can determine the attributes of users in target systems when creating or updating a target entity.
For example, a provisioned Okta User's country_code might be set to a source Workday Worker's work_location. Additionally, the Okta User manager attribute could be continually synchronized to match the Worker’s manager.
Target synced attributes can have fixed values (e.g., always true), can match a source attribute, or contain a combination of source values, transformed as needed to match the required format. Rules for synchronizing attributes are managed with Transformers.
For each application, understand the supported attributes for provisioned users.
Assess the identity metadata from your source of truth to decide how source entity attributes will be used to set the values of target entity attributes.
Veza can synchronize attributes during provisioning and de-provisioning workflows, and whenever a change is detected in the source of identity. Decide which attributes should be kept in Continuous Sync, and which should only be created (and never modified after creating an entity).
Examples: Synced Attributes
Sync Active Directory Accounts for Active Employees (Joiners/Movers)
When provisioning AD Users, create user attributes based on values in the source of identity. These attributes can also be kept up-to-date with the source of identity when there are changes, by enabling Continuous Sync.
account_name
display_full_name
{display_full_name}
distinguished_name
first_name, last_name
CN={first_name} {last_name},OU=Minnetonka,OU=US,OU=Evergreen Staff,DC=evergreentrucks,DC=local
user_principal_name
username
{username}@evergreentrucks.com
username
Sync Active Directory Attributes for Withdrawn Employees (Leavers)
When disabling AD Users, update the DN and Primary Group DN to a group and OU reserved for terminated employees:
account_name
display_full_name
{display_full_name}
distinguished_name
first_name, last_name
CN={first_name} {last_name},OU=Evergreen Termination,OU=Evergreen Staff,DC=evergreentrucks,DC=local
primary_group_dn
-
CN=Terminated Users,OU=Evergreen Groups,DC=evergreentrucks,DC=local
Moving leavers into a "Terminated Users" group (via the primary_group_dn attribute) effectively restricts access to systems that rely on Active Directory for authentication and authorization.
Updating the distinguished_name to place leavers in a specific organizational unit (OU), like "Evergreen Termination," separates active users from inactive ones, and enables the application of policies, scripts, and queries that target inactive users without affecting active employees.

SYNC_IDENTITIES
Synchronizes identity attributes between systems, with options to create new identities and update existing ones
❌
MANAGE_RELATIONSHIPS
Controls entitlements such as security group memberships
✅
DEPROVISION_IDENTITY
Safely removes or disables access for identities
❌
CREATE_ENTITLEMENT
Creates entitlements such as groups or roles
❌
WRITE_BACK_EMAIL
Updates email addresses in Workday worker records
✅
SOURCE_OF_IDENTITY
Workday can act as a source system for identity lifecycle policies
✅
This document includes steps to enable the Workday integration for use in Lifecycle Management, along with supported actions and notes. See Supported Actions for more details.
You will need administrative access in Veza to configure the integration and administrative access in Workday to configure security policies.
Ensure you have an existing Workday integration in Veza or add a new one for use with Lifecycle Management.
Verify your Workday integration has completed at least one successful extraction.
The Workday integration will need the following additional permissions:
Work Contact Change Business Process Security Policy - For email write-back operations
Domain Permissions - View and Modify permissions for various Workday data domains (see )
API Client Scopes - Additional scopes for Staffing, Contact Information, Organizations and Roles (see )
Worker data syncs to Veza follow the configured extraction interval (default: 1-hour minimum). See Extraction and Discovery Intervals for scheduling details.
1. Create Business Process Security Policy
Log into Workday and search for Edit Business process security policy
Under Business Process Type, select Work Contact Change
Find "Initiating Action: Change Work Contact Information (REST Service)"
Create a Segment-Based Security Group
Configure the security group:
Add the security group created for Veza integration
Add "Worker" scope to Access Rights
Verify the security group appears in Initiating Action Security groups
Click OK and Done to save changes
2. Activate Security Policy Changes
Search for Activate Pending Security Policy Changes
Review changes, add a comment, and click OK
Verify changes in Business Process Security Policy
3. Configure Security Group Permissions
Add these Domain Permissions to the security group:
View and Modify
Workday Query Language
View and Modify
Person Data: Work Email
View and Modify
Person Data: Work Contact Information
View and Modify
Worker Data: Staffing
View and Modify
Worker Data: Public Worker Reports
Get Only
Security Configuration
4. Update API Client Configuration
Open Edit API Client
Add required scopes:
Staffing
Contact Information
System
Tenant Non-Configurable
Organizations and Roles
5. Configure Workday Integration in Veza
Navigate to Configurations > Integrations
Either:
Create a new Workday integration
Edit an existing Workday integration
Enable Lifecycle Management:
Check Enable Lifecycle Management
If using custom attributes, configure them in the section
To verify the health of the Lifecycle Management data source:
Use the main Veza navigation menu to open the Lifecycle Management > Integrations page or the Veza Integrations overview
Search for the integration and click the name to view details
In the Properties panel, click the magnifying glass icon under Lifecycle Management Enabled
Workday serves as a source for identity information in Lifecycle Management Policies. Worker identity details are synchronized from Workday with changes propagated to connected systems.
Workday can also be a target for relationship management and email write-back actions, based on changes in lifecycle policies or workflows.
The integration supports the following lifecycle management Actions:
Workday provides identity information for lifecycle policies using the WorkdayWorker entity type. Worker records serve as the authoritative source for employee identity information to trigger lifecycle management workflows.
When used as a source of identity, Workday worker attributes can be mapped to target systems through attribute transformers and lifecycle management policies.
Controls access to Workday security groups for Workday accounts. Both adding and removing group memberships are supported.
Entity Types: Workday Security Group
Assignee Types: Workday Account
Supports Relationship Removal: Yes
This action enables automated security group assignments for:
New employee onboarding
Role changes and transfers
Access removal during offboarding
Updates email addresses in Workday worker records to maintain consistency with other systems. This ensures Workday remains the single source of truth for employee email addresses.
Entity Type: Workday Worker
Purpose: Synchronizes email address changes from other systems back to Workday
The integration uses Workday's Work Contact Information Change business process to update email addresses. Each email update creates a new work contact change record that is submitted to Workday for processing.
The integration supports custom attributes defined in your Workday configuration. Custom properties can be configured in the Workday integration settings and used in lifecycle management conditions and transformers.
The integration uses these API endpoints for email write-back:
For general metadata discovery, WQL queries access:
allWorkdayAccounts
allWorkers
securityGroups
domainSecurityPolicies
businessProcessTypes
Workday Workers are the primary entity for identity information and source of truth
Bidirectional management of Account-Security Group relationships is supported
Email write-back operates on Worker entities, not Account entities
Custom attribute availability depends on your Workday configuration
Sync Identities action is not currently supported for Workday (no user provisioning to Workday)
SYNC_IDENTITIES
Synchronizes identity attributes between systems, with options to create new identities and update existing ones
✅
MANAGE_RELATIONSHIPS
Controls entitlements such as role assignments for identities
✅
DEPROVISION_IDENTITY
Safely removes or disables access for identities
✅
DELETE_IDENTITY
Permanently deletes user accounts from Oracle Fusion Cloud
✅
CREATE_ENTITLEMENT
Creates new roles in Oracle Fusion Cloud
✅
SOURCE_OF_IDENTITY
Oracle Fusion Cloud can act as a source system for identity lifecycle policies
❌
This document includes steps to enable the Oracle Fusion Cloud integration for use in Lifecycle Management, along with supported actions and notes. See Supported Actions for more details.
You will need administrative access in Veza to configure the integration and appropriate administrative privileges in Oracle Fusion Cloud.
Ensure you have an existing Oracle Fusion Cloud integration in Veza or add a new one for use with Lifecycle Management.
Verify your Oracle Fusion Cloud integration has completed at least one successful extraction.
The Oracle Fusion Cloud service account requires the following permissions for different operations:
SCIM API Permissions:
/hcmRestApi/scim/Users - Full user lifecycle management
GET: Read user by ID or username
POST: Create new users
BI Publisher Permissions:
Execute reports via /xmlpserver/services/PublicReportService?wsdl
Access to predefined reports in /Custom/Veza/v2/ directory
Enabling the Oracle Fusion Cloud integration in Veza requires:
Your Oracle Fusion instance URL
Service account username with administrative privileges
Service account password for HTTP Basic Authentication
Oracle Fusion Cloud uses predefined BI Publisher reports for extracting role and privilege information. These reports must be accessible at the following paths:
/Custom/Veza/v2/ASE_ROLE_VL.xdo - Application roles
/Custom/Veza/v2/ASE_PRIVILEGE_VL.xdo - Privileges
/Custom/Veza/v2/ASE_PRIV_ROLE_MBR.xdo - Privilege to role mappings
/Custom/Veza/v2/ASE_Role_Role_MBR.xdo - Role hierarchy
/Custom/Veza/v2/ERP_USER_ROLES.xdo - User role assignments
Note: These reports are used for metadata extraction only. Lifecycle Management operations use the SCIM API.
To enable the integration:
In Veza, go to the Integrations overview
Search for or create an Oracle Fusion Cloud integration
Check the box to Enable usage for Lifecycle Management
Configure the extraction schedule to ensure your Oracle Fusion Cloud data remains current:
Go to Veza Administration > System Settings
In Pipeline > Extraction Interval, set your preferred interval
Optionally, set a custom override for Oracle Fusion Cloud in the Active Overrides section
To verify the health of the Lifecycle Management data source:
Use the main Veza navigation menu to open the Lifecycle Management > Integrations page or the Veza Integrations overview
Search for the integration and click the name to view details
In the Properties panel, click the magnifying glass icon under Lifecycle Management Enabled
Oracle Fusion Cloud serves as a target for identity management actions, based on changes in another external source of truth or as part of a workflow.
The integration supports the following lifecycle management Actions:
Primary action for user management (creating or updating users):
Username cannot be changed after creation
Email addresses must be unique
Required attributes must be present (user_name, email)
Display name will default to username if not provided
The following attributes can be synchronized:
Attribute Notes:
The SCIM API uses standard SCIM 2.0 field mappings
Email is stored as the first element in the SCIM emails array
Additional custom attributes beyond these three are not supported
The integration supports managing role assignments for users:
Both adding and removing role memberships are supported
Role assignments are managed through the Oracle SCIM API
Available roles are discovered during the extraction process
Role memberships are automatically removed during deprovisioning
Supported Entitlement Types:
OAA.Oracle Fusion Cloud.Role - Oracle Fusion Cloud application roles
Role Management Operations:
List current role assignments for a user
Add role assignments to a user
Remove role assignments from a user
Role creation (as part of entitlement creation)
Deactivates a user account in Oracle Fusion Cloud:
Sets the user's active status to false
The user will no longer be able to log in
User data is retained for audit purposes
Role assignments remain intact but inactive
Deprovisioning Behavior:
User record remains in the system
All role memberships are preserved, but non-functional
The Account can be reactivated by setting the active status back to true
Audit trail is maintained
Permanently removes a user account from Oracle Fusion Cloud:
Completely deletes the user record
This action is irreversible
All role assignments are removed
Use with caution, as this removes audit history
Deletion Considerations:
Cannot be undone
Removes all user data and history
Should only be used when complete removal is required
Consider deprovisioning instead for most use cases
Creates new roles in Oracle Fusion Cloud:
Role creation is supported through the lifecycle management framework
New roles can be created as part of provisioning workflows
Role properties include ID and role name
Role Creation Details:
Roles are created with basic properties (ID, name)
Custom role attributes are not currently supported
Role hierarchy and inheritance must be configured separately
Oracle Fusion Cloud lifecycle management uses the SCIM (System for Cross-domain Identity Management) protocol for user management operations. The integration:
Supports SCIM 2.0 standard operations
Handles user creation, update, deactivation, and deletion
Manages role assignments through SCIM relationship operations
Provides error handling for common SCIM response codes
The integration includes comprehensive error handling:
User not found errors are properly detected and reported
Duplicate user creation attempts are handled gracefully
Network and API errors are logged with appropriate context
Validation errors provide clear feedback about missing or invalid attributes
Common Error Scenarios:
404 Not Found: User or role doesn't exist
409 Conflict: Duplicate user or constraint violation
400 Bad Request: Invalid attribute values or missing required fields
401 Unauthorized: Authentication failure
403 Forbidden: Insufficient permissions
Users in Oracle Fusion Cloud are identified by:
User ID: System-generated unique identifier (uppercase)
Username: User-provided login name (case-sensitive)
Entity ID: Used for LCM operations, automatically converted to uppercase
The integration handles ID case conversion automatically to ensure compatibility with Oracle Fusion Cloud's uppercase ID requirements.
Testing: Always test lifecycle management policies in a non-production environment first
Extraction Schedule: Set an appropriate extraction interval based on your organization's change frequency (recommended: 6-12 hours)
Monitoring: Regularly review the LCM Activity Log for any errors or unexpected behavior
Role Management: Ensure roles are properly configured in Oracle Fusion Cloud before assigning them through LCM
Deprovisioning vs. Deletion: Use deprovisioning for standard offboarding; reserve deletion for special cases
Bulk Operations: When processing multiple users, consider batching to avoid API rate limits
Error Recovery: Implement retry logic for transient failures
Username cannot be modified after user creation
Oracle Fusion Cloud cannot currently serve as a source of identity for LCM policies
Custom user attributes beyond the standard SCIM schema are not supported
Bulk operations are processed individually through the SCIM API
Role hierarchy and complex role structures must be managed outside of LCM
Common issues and resolutions:
User creation fails with "duplicate" error
Username or email already exists
Verify the username and email are unique in Oracle Fusion Cloud
Role assignment fails
Role doesn't exist or is inactive
Ensure the role exists and is active in Oracle Fusion Cloud
Authentication errors
Invalid credentials or expired password
Verify the service account credentials and permissions
User not found during update
User doesn't exist or ID mismatch
Enable Debug Logging: Turn on debug logs for the integration to see detailed API requests and responses
Check Activity Logs: Review the Lifecycle Management activity logs for specific error messages
Verify Permissions: Use the Oracle Fusion Cloud UI to confirm the service account has the necessary permissions
Test SCIM Endpoints: Use a tool like Postman to test SCIM endpoints directly
Review Extraction Status: Check the last extraction results for any warnings or errors
Configuring LCM Policies
Configuring the MySQL integration for Veza Lifecycle Management
The Veza integration for MySQL enables automated user provisioning, access management, and deprovisioning capabilities. This integration allows you to synchronize identity information, manage role memberships, and automate the user lifecycle from onboarding to offboarding.
Action 1: Manage Relationships
- Description: Assign base Microsoft 365 license
- Access Profiles: Microsoft 365 E3 License
Action 2: Manage Relationships
- Description: Assign Power BI Pro license
- Condition: department eq "Analytics" OR department eq "Finance"
- Access Profiles: Power BI Pro License
Action 3: Manage Relationships
- Description: Assign Visio license
- Condition: department eq "Engineering"
- Access Profiles: Visio Plan 2 License{instance_url}/ccx/api/person/v3/{tenant}/workContactInformationChanges/{change_id}/emailAddresses
{instance_url}/ccx/api/person/v3/{tenant}/workContactInformationChanges/{change_id}/submit
{instance_url}/ccx/api/staffing/v5/{tenant}/workers/{worker_id}/workContactInformationChangesPATCH: Update user attributes and manage role memberships (ADD/REMOVE operations)
DELETE: Remove users permanently
/hcmRestApi/scim/Groups - Role information access
GET: Read role details and membership information
userName
Primary login identifier
Unique, cannot be changed after creation
Yes
String
emails[0].value
User's email address
Must be unique across the system
display_name
No
String
displayName
User's display name
Defaults to username if not provided
Check if the user exists and the identifier is correct (note: IDs are uppercase)
Extraction fails
Network connectivity or API changes
Check network connectivity and Oracle Fusion Cloud service status
Deprovisioning doesn't disable login
Caching or replication delay
Allow up to 15 minutes for changes to propagate
Get Only
Business Process Administration
View and Modify
Security Administration
View and Modify
Workday accounts
View and Modify
Special OX Web Services
Get and Put
User-Based Security Group Administration
last_name
String
Worker's last name
name
String
Worker's full name (node name in Veza graph)
employee_id
String
Employee identifier
business_title
String
Worker's business title
position
String
Worker's position
management_level
String
Management level name
management_level_id
String
Management level identifier
location
String
Worker's location
hire_date
Timestamp
Date the worker was hired
managers
String List
List of manager names
hiring_manager
String
Hiring manager's name
hiring_manager_email
String
Hiring manager's email address
employee_types
String List
List of employee types
cost_center
String
Worker's cost center
workday_id
String
Workday unique identifier
termination_date
Timestamp
Date the worker was terminated (if applicable)
primary_time_zone
String
Worker's primary time zone
is_active
Boolean
Whether the worker is active
created_at
Timestamp
Worker record creation date
idp_unique_id
String
Unique identifier for identity mapping





Microsoft 365 Business Basic
Yes
last_name
{last_name}
Yes
department
{department}
Yes
job_title
{job_title}
Yes
usage_location
US
Yes
hire_date
{hire_date | DATE_FORMAT, "2006-01-02"}
2006-01-02
2024-03-15
ISO date only
2006-01-02T15:04:05Z07:00
2024-03-15T09:30:00-07:00
Full ISO 8601 with timezone
01/02/2006
03/15/2024
US date format
Canonical Name
Employee's canonical name.
Username
Username as shown in the integration UI.
Employee's work email (unique).
IDP ID
ID for connecting to the destination IDP provider.
Personal Email
Employee's personal email.
Home Location
Employee's home location.
Work Location
Employee's work location.
Cost Center
Cost center ID associated with the employee.
Department
Department ID (Group ID) of the employee.
Managers
List of employee IDs of the employee's managers.
Groups
List of group IDs the employee is associated with.
Employment Status
Employment status, e.g., ACTIVE, PENDING, or INACTIVE.
Is Active
Indicates if the employee is active.
Start Date
The date the employee started working.
Termination Date
Employee's termination date, if applicable.
Job Title
Employee's job title.
Employment Types
Type of employment, e.g., FULL_TIME, PART_TIME, INTERN, CONTRACTOR, or FREELANCE.
Primary Time Zone
Employee's primary time zone.
Google China Employees (Google Group)
{username}@evergreentrucks.com
display_name
display_full_name
{display_full_name}
given_name
first_name
{first_name}
sur_name
last_name
{last_name}
country_code
work_location
{work_location}
job_title
job_title
{job_title}
primary_group_dn
-
CN=Domain Users,CN=Users,DC=evergreentrucks,DC=local

SYNC_IDENTITIES
Synchronizes identity attributes between systems, with options to create new identities and update existing ones
✅
MANAGE_RELATIONSHIPS
Controls role membership for user identities
✅
DEPROVISION_IDENTITY
Safely disables access for identities without deleting them
✅
DELETE_IDENTITY
Permanently removes user identities from the database
✅
SOURCE_OF_IDENTITY
MySQL can act as a source system for identity lifecycle policies
✅
This document includes steps to enable the MySQL integration for use in Lifecycle Management, along with supported actions and notes. See Supported Actions for more details.
MySQL Version Compatibility: Lifecycle Management supports MySQL 5.7 and later. Role management (MANAGE_RELATIONSHIPS) requires MySQL 8.0 or later.
Required Access
You will need administrative access in Veza to configure the integration.
Ensure you have an existing MySQL integration in Veza or add a new one for use with Lifecycle Management.
Verify your MySQL integration has completed at least one successful extraction.
Required MySQL Service Account Privileges
The MySQL service account used for Lifecycle Management requires specific global privileges depending on which features you plan to use.
Minimal Required Privileges
These privileges are required for core Lifecycle Management functionality:
CREATE USER
Global (*.*)
Creating, modifying, and deleting user accounts
Also enables ALTER USER and DROP USER operations automatically
GRANT OPTION
Global (*.*)
Granting roles to users (MANAGE_RELATIONSHIPS)
Required to delegate privileges and assign roles to users
Optional Privileges for Extended Functionality
These privileges enable additional features but are not required for basic operations:
SUPER
Global (*.*)
Granting/revoking SUPER privilege via the is_full_admin attribute
High privilege - enables system-wide administrative operations. Only needed if you plan to use is_full_admin. Use a dedicated service account and restrict its host pattern for security.
CREATE ROLE
Global (*.*)
Creating new roles via MANAGE_RELATIONSHIPS (MySQL 8.0+ only)
Only needed if you want Lifecycle Management to create roles dynamically
DROP ROLE
Global (*.*)
Deleting roles via MANAGE_RELATIONSHIPS (MySQL 8.0+ only)
Granting Privileges
To enable the integration:
In Veza, go to the Integrations overview
Search for or create a MySQL integration
Check the box to Enable usage for Lifecycle Management
Configure the extraction schedule to ensure your MySQL data remains current:
Go to Veza Administration > System Settings
In Pipeline > Extraction Interval, set your preferred interval
Optionally, set a custom override for MySQL in the Active Overrides section
To verify the health of the Lifecycle Management data source:
Use the main Veza navigation menu to open the Lifecycle Management > Integrations page or the Veza Integrations overview
Search for the integration and click the name to view details
In the Properties panel, click the magnifying glass icon under Lifecycle Management Enabled
MySQL can serve as a source for identity information in Lifecycle Management Policies, with user identity details synchronized from MySQL and propagated to connected systems. MySQL can also be a target for identity management actions based on changes in another external source of truth or as part of a workflow.
All lifecycle management operations are performed within database transactions, ensuring atomicity - either all changes succeed or all fail.
Important: Active MySQL sessions are not automatically terminated by account changes (locks or deletions). Existing sessions continue until the user logs out. For security incidents, manually terminate sessions using KILL CONNECTION before deprovisioning or deleting accounts.
The integration supports the following lifecycle management Actions:
The SYNC_IDENTITIES action synchronizes user account attributes between systems. This action can create new users and update existing users.
Entity Types: MySQLUserInstance
Create Allowed: Yes - New user identities can be created if not found in MySQL
MySQL User Identity Model
MySQL uniquely identifies users by the combination of username and host pattern: 'username'@'host_pattern'. This means 'alice'@'%' and 'alice'@'localhost' are two completely different user accounts with separate privileges and authentication.
Host Pattern Examples:
'%' - Can connect from any host (unrestricted)
'localhost' - Can only connect from MySQL server itself
'192.168.1.%' - Restricted to specific network range
'10.0.%' - Restricted to 10.0.0.0/16 network
For security, use specific network ranges (e.g., '10.0.%') instead of unrestricted access ('%') when possible.
Syncable Attributes
Attribute Behavior
The user and host attributes are required and combined to form the unique identity 'username'@'host_pattern'. The username cannot be changed after creation (renaming not supported). The host pattern supports wildcards including '%' (any host), 'localhost' (local only), IP patterns like '192.168.1.%', and hostname patterns like '%.example.com'.
The optional is_full_admin attribute grants or revokes SUPER privilege via GRANT SUPER ON *.* TO 'user'@'host' or REVOKE SUPER. SUPER enables system-wide administrative operations - for MySQL 8.0+, consider using dynamic privileges for more granular control.
Account Status Control: User account active/inactive status is controlled through the DEPROVISION_IDENTITY action (via ALTER USER ACCOUNT LOCK/UNLOCK), not through SYNC_IDENTITIES attributes. When deprovisioned, new logins are prevented but active sessions continue. To reactivate a deprovisioned user, use SYNC_IDENTITIES to update the user.
Passwords are automatically generated using cryptographically secure random generation at user creation time, using MySQL's default authentication plugin (caching_sha2_password for MySQL 8.0+, mysql_native_password for MySQL 5.7). Password updates are not supported via SYNC_IDENTITIES; use ALTER USER 'username'@'host' IDENTIFIED BY 'new_password' directly in MySQL.
The MANAGE_RELATIONSHIPS action controls user membership in MySQL roles. This action can grant roles to users, revoke roles from users, create new roles, and delete existing roles.
Supported Relationship Types:
MySQLRoleInstance: User membership in MySQL roles (MySQL 8.0+ required)
Assignee Types: MySQLUserInstance
Supports Removing Relationships: Yes
⚠️ MySQL Version Requirement: Role functionality requires MySQL 8.0 or later. This feature is not available in MySQL 5.7 or earlier versions.
Role Operations
MySQL roles (MySQL 8.0+) are named collections of privileges stored in the mysql.user table with a 'name'@'host' identity format. Role-to-user assignments are tracked in the mysql.role_edges system table.
Grant role to user
GRANT 'role_name'@'role_host' TO 'username'@'user_host'
Links role to user in mysql.role_edges. Role activation required*
Revoke role from user
REVOKE 'role_name'@'role_host' FROM 'username'@'user_host'
Removes link and immediately deactivates role in active sessions
Create role
CREATE ROLE 'role_name'@'role_host'
Creates entry in mysql.user. Role has no privileges by default
Delete role
DROP ROLE 'role_name'@'role_host'
* Granting a role does not automatically activate its privileges. To enable automatic activation, configure MySQL: SET GLOBAL activate_all_roles_on_login = ON. Alternatively, set default roles per user: SET DEFAULT ROLE ALL TO 'username'@'host'.
Disables a MySQL user account without deleting it (soft delete). User entry remains in database with all privileges preserved, but login attempts fail.
Entity Type: MySQLUserInstance
Remove All Relationships: No - Role memberships and privileges preserved
Deprovisioning Method: Account Lock via ACCOUNT LOCK feature
Reversible: Yes - Reactivate via ACCOUNT UNLOCK or SYNC_IDENTITIES with is_active: true
Executes ALTER USER 'username'@'host' ACCOUNT LOCK, which sets account_locked = 'Y' in the mysql.user table. New login attempts fail immediately while all role memberships, privileges, database objects, and user metadata are preserved. Reactivate via ALTER USER 'username'@'host' ACCOUNT UNLOCK or SYNC_IDENTITIES with is_active: true.
Permanently removes a MySQL user account from the database (hard delete). Irreversible - user cannot be recovered.
Entity Type: MySQLUserInstance
Permanence: Irreversible - User cannot be recovered
Remove All Relationships: Yes - All privileges and role memberships removed
Executes DROP USER 'username'@'host', which removes the user record from mysql.user and all grant table entries. All privileges and role memberships are removed, but database objects (tables, views, stored procedures, triggers, events) remain with orphaned DEFINER references.
Objects with DEFINER pointing to the deleted user may fail depending on SQL SECURITY mode - objects with DEFINER (default) may fail with "user specified as definer does not exist" error, while objects with INVOKER execute using the invoking user's privileges and are unaffected.
Critical: Always audit database objects before deleting users. Identify affected objects:
Reassign ownership to a service account before deletion: ALTER DEFINER='service_account'@'%' VIEW schema.view_name;
DELETE vs DEPROVISION Comparison
User entry
Removed from database
Preserved in mysql.user
Reversible
No (must recreate)
Yes (ACCOUNT UNLOCK)
Privileges
Removed
Preserved
Role memberships
Removed
Prefer DEPROVISION_IDENTITY unless permanent deletion is specifically required. Deprovisioning provides same access control while maintaining recoverability and audit trails.
Overview of supported Lifecycle Management integrations in Veza, with capabilities and supported actions for target applications and sources of identity.
This document provides an introduction to the integrations supported by Veza Lifecycle Management (LCM), including capabilities and supported actions. These integrations enable automated identity and access management workflows across a wide range of identity sources and target applications.
Lifecycle Management supports three primary implementation pathways:
Native Integrations - Direct API-based provisioning with out-of-the-box support (see validated integrations below)
SCIM 2.0 Protocol - Standards-based provisioning for any SCIM-compliant application
OAA Write Framework - Veza's Open Authorization API (OAA) can support provisioning and deprovisioning for applications not natively supported by the Veza platform.
This architecture means that nearly any existing Veza integration can be enabled for Lifecycle Management. The validated integrations listed below represent tested, production-ready configurations. For additional integration support, contact your Customer Success Manager.
Identity sources are authoritative systems that provide information about user identities. While Veza does not require write permissions to the identity source of truth, some of these integrations are also supported as provisioning targets. Integrations can also allow write-back of a user's newly created email address to the user's record in the source of identity as part of the initial provisioning workflow.
Lifecycle Management supports leading HR systems, IDPs and directory services, ITSM platforms, payroll systems, custom applications, and flat files:
The entire catalog of Veza application integrations is Lifecycle Management-ready. Target application support in Lifecycle Management leverages Veza's existing native and OAA-based integrations, plus an intelligent shim layer to provide support for provisioning and de-provisioning.
As such, target application support in Lifecycle Management can be enabled for nearly every Veza-supported integration.
Validated Integrations
The following table lists the out-of-the-box, Veza-validated target application integrations for Lifecycle Management.
Other Supported Integrations
For any Veza-supported application not listed above, contact your Customer Success Manager for more details on how to enable the specific Veza integration for use with Lifecycle Management as a target application for provisioning and de-provisioning.
Custom REST Actions
Lifecycle Management supports Custom REST Actions that enable HTTP requests to external APIs and services as part of LCM workflows. This action type provides integration with custom applications, webhooks, and any REST-based service that supports identity management operations.
Custom REST Actions extend LCM support to virtually any system with an accessible API, enabling use cases such as triggering custom workflows, notifying external systems, or coordinating provisioning sequences across multiple downstream applications.
An Insight Point is required to enable Lifecycle Management operations and identity discovery for systems that Veza cannot access directly, such as an on-premises application server behind a firewall. The Insight Point is a lightweight connector that runs in your environment, enabling secure gathering and processing of authorization metadata for LCM tasks.
A Veza Insight Point is typically deployed as a Docker container or VM OVA, running within your network for metadata discovery and LCM job execution. This ensures secure communication between your environment and Veza.
For deployment instructions, refer to the .
You can configure extraction intervals for your integrations to ensure data is regularly updated for Lifecycle Management processes.
Go to Veza Administration > System Settings
In the Pipeline > Extraction Interval section, set the global extraction interval
To override the global setting for specific integrations, use the Active Overrides section
Available extraction intervals are:
Auto (hourly, but may take longer when the extraction pipeline is full)
15 Minutes
1 Hour
6 Hours
To manually trigger an extraction:
Go to Integrations > All Data Sources
Search for the desired data source
Select Actions > Start Extraction
Note: Custom application payloads are extracted after the payload is pushed to Veza using the Open Authorization API.
To enable Lifecycle Management for a specific integration:
Browse to the main Veza Integrations page, or go to Lifecycle Management > Integrations
Search for the integration you want to enable
Toggle the Lifecycle Management option to Enabled
To verify the health of the Lifecycle Management data source:
Use the main Veza navigation menu to open the Lifecycle Management > Integrations page or the Veza Integrations overview
Search for the integration and click the name to view details
In the Properties panel, click the magnifying glass icon under Lifecycle Management Enabled
For more information:
Refer to individual integration documentation for detailed LCM capabilities
Consult the Lifecycle Management user guide for troubleshooting and best practices
Contact Veza support for assistance with enabling or configuring LCM for your integrations
Complete reference for SCIM filter syntax used in Lifecycle Management workflow trigger conditions
This page provides a comprehensive reference for the SCIM filter syntax used in Lifecycle Management workflow trigger conditions. Trigger conditions determine when a workflow action should execute based on identity attributes.
SCIM (System for Cross-domain Identity Management) filter syntax provides a standardized way to express conditions. The basic structure is:
For example:
-- Create dedicated service account with restricted host pattern
CREATE USER 'veza_lcm'@'10.0.%' IDENTIFIED BY 'secure_password_here';
-- Grant minimal required privileges
GRANT CREATE USER ON *.* TO 'veza_lcm'@'10.0.%' WITH GRANT OPTION;
-- Apply privilege changes
FLUSH PRIVILEGES;-- Create service account (MySQL 8.0+)
CREATE USER 'veza_lcm'@'10.0.%' IDENTIFIED BY 'secure_password_here';
-- Grant privileges including role management
GRANT CREATE USER, CREATE ROLE, DROP ROLE
ON *.* TO 'veza_lcm'@'10.0.%' WITH GRANT OPTION;
-- Apply privilege changes
FLUSH PRIVILEGES;-- Create service account
CREATE USER 'veza_lcm'@'10.0.%' IDENTIFIED BY 'secure_password_here';
-- Grant all privileges including SUPER
GRANT CREATE USER, SUPER, CREATE ROLE, DROP ROLE
ON *.* TO 'veza_lcm'@'10.0.%' WITH GRANT OPTION;
-- Apply privilege changes
FLUSH PRIVILEGES;-- Example with minimal privileges and unrestricted host
CREATE USER 'veza_lcm'@'%' IDENTIFIED BY 'secure_password_here';
GRANT CREATE USER ON *.* TO 'veza_lcm'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;-- Find stored procedures/functions with this DEFINER
SELECT ROUTINE_SCHEMA, ROUTINE_NAME, ROUTINE_TYPE
FROM INFORMATION_SCHEMA.ROUTINES
WHERE DEFINER = 'username@host';
-- Find views with this DEFINER
SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.VIEWS
WHERE DEFINER = 'username@host';Only needed if you want Lifecycle Management to delete roles
mysql.user.User column
host
Yes
String
Host pattern defining where user can connect from
mysql.user.Host column
is_full_admin
No
Boolean
Whether user has SUPER privilege (full administrator rights)
mysql.user.Super_priv column
Removes entry and automatically revokes role from all users
Preserved
Objects owned
Preserved but orphaned (invalid DEFINER)
Preserved with ownership intact
Audit trail
Lost
Maintained
CustomHRISEmployee
CustomHRISEmployee
Supports email write-back
CustomHRISEmployee
AzureADUser
GoogleWorkspaceUser
OktaUser
OAA.Oracle HCM.HRISEmployee
Supports email write-back
ServiceNowUser
CustomHRISEmployee
WorkdayWorker
Supports email write-back
✅
✅
✅
Delete Identity
AtlassianCloudAdminGroup
-
✅
✅
✅
Create Entitlement
AwsSsoGroup
-
✅
✅
✅
Create & Manage Email, Create Entitlement
AzureADGroup, AzureADRole, ExchangeOnlineDistributionGroup, AzureADLicense
Email management includes mailbox configuration (size limits, quotas, auditing) and client access settings (OWA, ActiveSync, MAPI, POP, IMAP)
✅
✅
✅
Delete Identity
ApplicationGroup, ApplicationRole
-
❌
❌
❌
Create Email
-
-
✅
✅
✅
-
GithubOrganization, GithubTeam
-
✅
✅
✅
-
GoogleWorkspaceGroup
-
✅
✅
✅
Delete Identity
MySQLRoleInstance
-
✅
✅
✅
Reset Password, Create Entitlement
OktaGroup
Supports two deprovision types: SUSPENDED (temporary) and DISABLED (permanent deactivation)
✅
✅
✅
Delete Identity
OracleDBRole
-
✅
✅
✅
Delete Identity
OracleRole
-
❌
✅
❌
-
-
-
✅
✅
❌
Delete Identity
PagerDutyTeam
Platform does not support user deactivation; use Delete Identity instead
✅
✅
✅
Delete Identity
PostgreSQLGroup
-
✅
✅
✅
-
SalesforceGroup, SalesforcePermissionSet, SalesforcePermissionSetGroup, SalesforceProfile, SalesforceUserRole
-
SAP ECC
✅
✅
✅
-
SapEccRole
-
❌
✅
✅
-
-
-
❌
❌
❌
Custom Action
-
-
✅
✅
✅
-
SnowflakeRole
-
✅
✅
❌
Delete Identity
SplunkEnterpriseRole
Platform does not support user deactivation; use Delete Identity instead
✅
✅
❌
-
WorkdaySecurityGroup
-
Veza
✅
✅
✅
-
VezaRoleBinding, VezaAccessProfile, VezaGroup
-
12 Hours
1 Day
2 Days
3 Days
7 Days
30 Days
ActiveDirectoryUser
CustomHRISEmployee
CustomHRISEmployee
CustomIDPUser
✅
✅
✅
Reset Password, Create Entitlements, Delete Identity
ActiveDirectoryGroup
-

true when the identity's department attribute equals "Engineering".eq
Equal
Exact match (case-sensitive)
department eq "Sales"
ne
Not Equal
Does not match
status ne "Terminated"
co
Contains
Substring match
eq
Equal
Exact numeric match
department_code eq 100
ne
Not Equal
Does not equal
level ne 0
lt
Less Than
Strictly less than
eq
Equal
Boolean match
is_active eq true
ne
Not Equal
Boolean inverse
is_contractor ne true
pr
Present
Attribute exists and is not null
Timestamp comparisons use ISO 8601 format (YYYY-MM-DDTHH:MM:SSZ).
eq
Equal
Exact timestamp match
hire_date eq "2024-01-15T00:00:00Z"
lt
Before
Earlier than
termination_date lt "2024-06-01T00:00:00Z"
le
At or Before
At or earlier than
For attributes that contain multiple values (arrays), the following operators are supported:
co
Contains
List contains a specific value
employee_types co "Full Time"
eq
Equal
List exactly matches value(s)
roles eq "Admin"
ne
Not Equal
List does not match value(s)
The co operator is most commonly used for checking membership in a list. Use eq for exact list matching and pr to verify the attribute has any values.
Combine multiple conditions using logical operators.
and
Both conditions must be true
is_active eq true and department eq "IT"
or
Either condition must be true
department eq "IT" or department eq "Engineering"
not
Negates a condition
not(status eq "Terminated")
The not() operator uses parenthetical notation. For simple negation of a single value, prefer using ne (not equals) which has broader support across all condition contexts.
Limitation: The not() operator may not be fully supported in all LCM trigger condition contexts. If you encounter unexpected behavior with not(), rewrite the condition using ne or restructure the logic. For example, instead of not(status eq "Active"), use status ne "Active".
not has the highest precedence
and has higher precedence than or
Use parentheses () to control evaluation order
Example combining operators:
Mover detection uses the sys_attr__is_mover system attribute, which indicates whether any monitored property has changed. Configure which properties to monitor in the policy's Mover Properties settings.
The sys_attr__is_mover attribute is a boolean flag set when any property in the configured mover properties list changes. To trigger workflows only when specific attributes change, use the Run only if specific properties change workflow option.
Lifecycle Management provides computed system attributes (prefixed with sys_attr__) for use in trigger conditions. The most commonly used is sys_attr__is_mover for detecting changes in monitored properties.
See System Attributes for the complete reference.
For time-sensitive workflows, you can embed transformer functions directly in condition values. This enables comparisons against dynamically-computed dates and times rather than static values.
Embedded transformers use the {| FUNCTION | ...} syntax. The pipe (|) immediately after the opening brace indicates there is no source attribute—the expression starts directly with a function:
This differs from attribute transformers where you reference an attribute first:
Attribute transformer: {hire_date | DATE_FORMAT, "DateOnly"} (starts with attribute)
Embedded in condition: {| NOW | DATE_FORMAT, "DateOnly"} (starts with function)
NOW
Current UTC timestamp
`{
UTC_TO_TIME_ZONE
Convert to specific timezone
`{
DATE_ADJUST_DAY
Add/subtract days
`{
DATE_FORMAT
Format for comparison
`{
See Transformer Reference for all available functions.
Trigger a leaver workflow when an employee's last day of work falls within a 2-day window around today (Eastern Standard Time):
Breaking down the embedded transformer:
1
NOW
(none)
Current UTC timestamp
2
UTC_TO_TIME_ZONE, "-05:00"
UTC timestamp
Eastern time timestamp
3
DATE_ADJUST_DAY, 0
EST timestamp
Result: The workflow triggers when:
The employee is active (is_active eq true)
Their last day is today or earlier (le today)
Their last day is after 2 days ago (gt 2 days ago)
This creates a 2-day processing window for departing employees.
Trigger a joiner workflow 7 days before an employee's start date:
This triggers for employees whose hire date is within the next 7 days, enabling pre-provisioning of accounts before their start date.
Trigger a cleanup workflow for employees terminated more than 30 days ago:
Escaping quotes: When embedding transformers in conditions, you must escape inner quotes with backslashes. For example: \"-05:00\" and \"DateOnly\".
Timezone consideration: Use UTC_TO_TIME_ZONE to ensure date comparisons align with your organization's business timezone. Without timezone conversion, comparisons use UTC which may cause workflows to trigger at unexpected times.
For a conceptual overview of how conditions and transformers work together, see Understanding Conditions and Transformers.
Before enabling a policy, use the Dry Run feature to preview which identities match your trigger conditions. This helps catch overly broad or restrictive conditions before they affect real accounts.
Consider what happens when attributes are null or empty:
Check attribute names: Ensure the attribute name exactly matches the source attribute (case-sensitive)
Verify data types: String values need quotes, booleans don't
Review operator choice: co for contains vs. eq for exact match
Use Dry Run: Test the condition against specific identities
Add specificity: Combine multiple conditions with and
Check for broad patterns: co "" matches all non-null values
Verify logical grouping: Ensure and/or precedence is correct
Use ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ
Include timezone: Always use Z suffix for UTC
Check attribute type: Ensure the source attribute is a timestamp, not a string
Understanding Conditions and Transformers - Conceptual overview of conditions vs. transformers
Policies - Create and configure Lifecycle Management policies
Conditions and Actions - Configure workflow actions and their triggers
- Transform attribute values using formatter syntax
- Complete list of transformation functions
- Available system attributes for conditions
- Formatter-based profile assignment
- Map source attributes to target attributes
<attribute> <operator> <value>department eq "Engineering"# Full-time employees in Engineering or IT departments
employee_types co "Full Time" and (department eq "Engineering" or department eq "IT")# New full-time employees in specific departments
employee_types co "Full Time" and (department eq "Engineering" or department eq "Sales")
# New hires with specific job levels
is_active eq true and job_level ge 3 and hire_date gt "2024-01-01T00:00:00Z"
# Contractors starting in a specific region
is_contractor eq true and location sw "US-"# Detect any change in monitored properties for active employees
sys_attr__is_mover eq true and is_active eq true
# Department-specific mover handling (user moved AND is now in Engineering)
sys_attr__is_mover eq true and department eq "Engineering"
# Mover detection combined with employment type
sys_attr__is_mover eq true and is_active eq true and employee_types co "Full Time"# Terminated employees
employment_status eq "Terminated"
# Inactive contractors
is_active eq false and is_contractor eq true
# Users with imminent termination date
termination_date le "2024-12-31T23:59:59Z" and termination_date gt "2024-01-01T00:00:00Z"# High-privilege access for senior engineers
department eq "Engineering" and job_level ge 5 and is_active eq true
# Region-specific access
location sw "EMEA-" and employee_types co "Full Time"
# Cost center based provisioning
cost_center eq "CC-1000" and is_active eq true{| NOW | UTC_TO_TIME_ZONE, "-05:00" | DATE_FORMAT, "DateOnly"}is_active eq true
and customprop_lastdayofwork le "{| NOW | UTC_TO_TIME_ZONE, \"-05:00\" | DATE_ADJUST_DAY, 0 | DATE_FORMAT, \"DateOnly\"}"
and customprop_lastdayofwork gt "{| NOW | UTC_TO_TIME_ZONE, \"-05:00\" | DATE_ADJUST_DAY, -2 | DATE_FORMAT, \"DateOnly\"}"is_active eq false
and hire_date le "{| NOW | DATE_ADJUST_DAY, 7 | DATE_FORMAT, \"DateOnly\"}"
and hire_date gt "{| NOW | DATE_FORMAT, \"DateOnly\"}"employment_status eq "Terminated"
and termination_date lt "{| NOW | DATE_ADJUST_DAY, -30 | DATE_FORMAT, \"DateOnly\"}"# Good: Specific and targeted
department eq "Engineering" and job_level ge 3 and is_active eq true
# Avoid: Too broad, may affect unintended users
department eq "Engineering"# Use parentheses for clarity when mixing and/or
(department eq "IT" or department eq "Engineering") and is_active eq true
# Without parentheses, this evaluates differently due to precedence:
# department eq "IT" or (department eq "Engineering" and is_active eq true)
department eq "IT" or department eq "Engineering" and is_active eq true# Explicit check for non-empty department
department ne "" and department eq "Engineering"
# Check for active status before other conditions
is_active eq true and department eq "Engineering"email co "@company.com"
sw
Starts With
Prefix match
employee_id sw "EMP"
ew
Ends With
Suffix match
email ew "@company.com"
pr
Present
Attribute exists and is not null
manager_id pr
access_level lt 5
le
Less Than or Equal
Less than or equal to
risk_score le 50
gt
Greater Than
Strictly greater than
tenure_months gt 12
ge
Greater Than or Equal
Greater than or equal to
salary_grade ge 3
pr
Present
Attribute exists and is not null
access_level pr
is_contractor pr
start_date le "2024-12-31T23:59:59Z"
gt
After
Later than
hire_date gt "2023-01-01T00:00:00Z"
ge
At or After
At or later than
last_login ge "2024-01-01T00:00:00Z"
pr
Present
Attribute exists and is not null
termination_date pr
tags ne "deprecated"
pr
Present
Attribute exists and is not empty
groups pr
Today (or -2 for 2 days ago)
4
DATE_FORMAT, "DateOnly"
Adjusted timestamp
Date string for comparison
Enable SCIM-based provisioning for custom applications with Open Authorization API
Veza can automate user provisioning and de-provisioning for any application that uses the Open Authorization API (OAA) for data gathering and authorization modeling, and exposes SCIM-compliant endpoints for user and group management.
This enables organizations to:
Use your application's existing SCIM endpoints for automated provisioning operations
Model complex authorization structures using OAA's flexible templates (applications, resources, permissions, custom properties) for Access Graph visibility, Access Reviews, and other Veza features.
Gather authorization metadata using a variety of methods (custom connectors, APIs, manual JSON payloads, CSV files)
There are several potential ways to integrate a custom application for automated lifecycle management and access requests:
External SCIM for Open Authorization API: You may build your OAA integration using the custom application template and leverage dedicated SCIM endpoints for user and group management. This is useful when you need full control over how authorization metadata is represented in the Veza Access Graph:
Your application supports SCIM, and you want to model a wider range of authorization entities and metadata (e.g., credentials, resources) than the Veza SCIM integration supports.
You already have a custom OAA integration and want to add provisioning capabilities using SCIM.
This document describes how to enable External SCIM for an Open Authorization API integration, and supported actions.
Data Gathering (OAA):
You will need to design and build a custom integration to publish information about the application to the Veza Access Graph:
The payload can include local users, groups, permissions, resources, and complex authorization relationships
Data can be gathered from any source: APIs, databases, configuration files, etc.
See the rest of the Open Authorization API documentation for examples and best practices when designing and deploying custom integrations.
Lifecycle Management (SCIM):
You can enable the SCIM connection at the custom provider level:
Setting provisioning: true and external_lifecycle_management_type: SCIM for the custom provider enables Veza to use your application's SCIM endpoints for provisioning
Provide SCIM connection information and credentials (configuration_json)
Important: When configuring a custom application for SCIM integration, the OAA payload structure (Application template) and SCIM configuration serve different purposes:
The OAA Payload (push_application() or API push) defines local users, groups, permissions, and resources used for visibility and authorization modeling in Veza, and can be updated independently.
The SCIM Configuration (configuration_json) for the custom provider defines how to connect to SCIM endpoints (including authentication, URL, and endpoint paths), and is used only for lifecycle management and access request operations.
Both must be consistent (describe and contain the same users and groups), but are configured separately.
Your application must expose SCIM 2.0 compliant endpoints with the following operations:
User Management:
GET /Users - List and filter users
GET /Users?filter=userName eq "{username}" - Query users by userName
POST /Users - Create new users
Group Management:
GET /Groups - List groups
GET /Groups/{id} - Retrieve specific group by ID
POST /Groups - Create new groups
Note: If the Users and Groups APIs are not at the standard
/Usersand/Groupspaths, you can specify alternate endpoint paths in the configuration.
Your SCIM API must support one of the following authentication methods:
Bearer Token: API token passed in Authorization: Bearer {token} header
Basic HTTP Authentication: Username and password passed in Authorization: Basic {credentials} header
The authentication credentials must have both read and write permissions to the SCIM endpoints.
To synchronize custom attributes beyond the standard SCIM user schema:
Expose a GET /Schemas endpoint that returns SCIM schema definitions
Enable schema fetching in your configuration (see Configuration section)
External SCIM for Lifecycle Management is configured via the Veza REST API.
Create a Custom Provider that uses external SCIM endpoints specifically for lifecycle management:
Required Fields
Configuration JSON Parameters
The configuration_json field contains SCIM endpoint connection details used only for provisioning operations. It does not affect your OAA payload structure.
* One of scim_token or the username/password pair is required for authentication.
Example Configuration with Bearer Token:
Example Configuration with Basic Authentication:
Push the OAA Application Payload as normal. See the for details.
Veza creates entities in Access Graph based on the OAA payload, which can be targeted in lifecycle management operations:
local_users in your Application template → Users to provision via SCIM
local_groups in your Application template → Groups to manage via SCIM
Entity types are named according to the following pattern:
User Entity Type: OAA.{application_type}.User
Group Entity Type: OAA.{application_type}.Group
Where {application_type} is the value you specify in your OAA Application template when building the payload. For example, if the application is defined:
The resulting entity types are:
OAA.CustomerPortal.User
OAA.CustomerPortal.Group
When Veza provisions users via SCIM, transformers can map attributes from your policy source of identity to SCIM properties:
If the SCIM service exposes a /Schemas endpoint and you enable scim_extension_schemas: true, Veza can synchronize custom extension attributes beyond the standard SCIM user schema. Extension attributes are mapped using the schema URN as defined by your SCIM implementation.
The following SCIM operations are performed when Lifecycle Management actions execute:
Create a new user in the target application.
SCIM Operation:
The SCIM endpoint creates the user and returns the user object with an assigned id.
Updates an existing user's attributes (one-time or continuously).
SCIM Operations:
Query for existing user:
Update the user:
Remove access when a user leaves the organization or changes roles. The user account is deactivated, but data is preserved.
SCIM Operation:
Deprovision sets active=false, which disables login but preserves the user record.
Permanently remove a user account.
SCIM Operation:
Grant a user access via group membership.
SCIM Operations:
Retrieve group details:
Add user to group:
Revoke a user's access by removing group membership.
SCIM Operation:
Creates a new group so that it can be granted as an entitlement.
SCIM Operation:
Use attribute formatters to dynamically select Access Profiles at runtime based on user attributes
Dynamic Access Profiles enable context-aware provisioning by enabling the Manage Relationships action to resolve Access Profile names at runtime using user attributes.
Instead of explicitly selecting static Access Profiles when configuring a workflow, you can use attribute formatter expressions that evaluate to Access Profile names dynamically when the workflow executes. This is particularly valuable for organizations with complex access patterns based on attributes like department, location, role, or business unit.
Create Entitlement
✅
Create new groups in the target application
Full SCIM Connector: Use the built-in SCIM connector for both basic data gathering and lifecycle management. This will provide visibility into supported SCIM entities and relationships with schedulable extractions, but not for the full range of entities and metadata that might be modeled using the Application Template such as roles and resources.
Custom REST API Actions: Actions in Veza may directly call any external API and capture the response in audit trails. This can enable Lifecycle Management and Access Requests for any target system, provided it has appropriate endpoints for managing users and access controls.
POST /Users, PATCH /Users/{id}, etc.)GET /Users/{id} - Retrieve specific user by ID
PATCH /Users/{id} - Update user attributes
DELETE /Users/{id} - Delete user (required if using Delete Identity action)
PATCH /Groups/{id} - Update group membership
DELETE /Groups/{id} - Delete group (optional)
configuration_json
Yes
JSON-encoded string containing SCIM connection details (see structure below)
password
No*
Password for basic authentication
"secure-password"
users_endpoint
No
Users endpoint path (defaults to Users if not specified)
"Users"
groups_endpoint
No
Groups endpoint path (defaults to Groups if not specified)
"Groups"
scim_extension_schemas
No
Fetch SCIM schemas for extension attribute support (default: false)
true
ca_certificate
No
Custom CA certificate for SSL verification (PEM format)
"-----BEGIN CERTIFICATE-----..."
display_name
displayName
String
No
User's display name
title
title
String
No
Job title
nick_name
nickName
String
No
Casual name
external_id
externalId
String
No
External system identifier
phone_numbers
phoneNumbers
Array
No
Phone numbers (JSON array)
addresses
addresses
Array
No
Physical addresses (JSON array)
ims
ims
Array
No
Instant messaging addresses (JSON array)
photos
photos
Array
No
Photo URLs (JSON array)
locale
locale
String
No
User's locale
preferred_language
preferredLanguage
String
No
Preferred language
profile_url
profileUrl
String
No
Profile page URL
timezone
timezone
String
No
User's timezone
user_type
userType
String
No
User classification
formatted_name
name.formatted
String
No
Full formatted name
family_name
name.familyName
String
No
Last name
given_name
name.givenName
String
No
First name
middle_name
name.middleName
String
No
Middle name
Sync Identities
✅
Create new users or update existing user attributes in the target application
Manage Relationships
✅
Add or remove users from groups
De-provision Identity
✅
Deactivate user accounts (sets active=false in SCIM)
Delete Identity
✅
Extraction Method
You build the OAA push payload directly
Auto-discovery via SCIM endpoints
Authorization Modeling
Full OAA Application support (roles, permissions, resources)
Users and groups only
Lifecycle Management
Via SCIM endpoints
Via SCIM endpoints
Use Case
Complex custom applications where visibility or access reviews are needed.
name
Yes
Display name for the Custom Provider in Veza
custom_template
Yes
OAA template type ("application")
provisioning
Yes
Must be set to true to enable Lifecycle Management
external_lifecycle_management_type
Yes
Lifecycle management mode (use "SCIM" to enable SCIM-based provisioning)
scim_url
Yes
Base URL for SCIM API (without /Users or /Groups path)
scim_token
No*
Bearer token for authentication
"eyJhbGci..."
username
No*
Username for basic authentication
user_name
userName
String
Yes
Unique username
emails
emails
Array
No
Email addresses
Permanently delete user accounts from the target application
Standard SaaS with SCIM support
"scim-admin"
curl -X POST "https://{VEZA_URL}/api/v1/providers/custom" \
-H "authorization: Bearer {API_KEY}" \
-H "Content-Type: application/json" \
--data '{
"name": "MyCustomApp",
"custom_template": "application",
"provisioning": true,
"external_lifecycle_management_type": "SCIM",
"configuration_json": "{\"scim_url\":\"https://api.myapp.com/scim/v2\",\"scim_token\":\"your-bearer-token\"}"
}'{
"scim_url": "https://api.customerportal.internal.com/scim/v2",
"scim_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"scim_extension_schemas": true
}{
"scim_url": "https://legacy.mycompany.com/api/scim",
"username": "scim-service-account",
"password": "secure-password-here"
}custom_app = CustomApplication(
name="CustomerPortal", # Display name
application_type="CustomerPortal" # This determines entity types!
)POST /Users
Content-Type: application/scim+json{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"userName": "jane.doe",
"name": {
"givenName": "Jane",
"familyName": "Doe",
"formatted": "Jane Doe"
},
"emails": [
{"value": "[email protected]", "primary": true}
],
"active": true
}GET /Users?filter=userName eq "jane.doe"PATCH /Users/{id}
Content-Type: application/scim+json{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{"op": "replace", "path": "displayName", "value": "Jane Smith"}
]
}PATCH /Users/{id}
Content-Type: application/scim+json{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{"op": "replace", "path": "active", "value": false}
]
}DELETE /Users/{id}GET /Groups/{groupId}PATCH /Groups/{groupId}
Content-Type: application/scim+json{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "add",
"path": "members",
"value": [{"value": "{userId}"}]
}
]
}PATCH /Groups/{groupId}
Content-Type: application/scim+json{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "remove",
"path": "members",
"value": [{"value": "{userId}"}]
}
]
}POST /Groups
Content-Type: application/scim+json{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
"displayName": "Engineering Team"
}Terminology: Dynamic Access Profiles use formatter syntax—the same template syntax used in attribute transformers. A formatter is a template string like {department | LOWER} that constructs a value from identity attributes. See Understanding Conditions and Transformers for more context.
When a Lifecycle Management workflow runs with dynamic Access Profiles configured:
Attribute Evaluation: The system evaluates each dynamic Access Profile formatter expression using the identity's attributes. For example, if the expression is dept-{department | LOWER} and the user's department attribute is Engineering, the system evaluates this to dept-engineering.
Name Resolution: The evaluated expression produces an Access Profile name.
Access Profiles must be named using a predictable, consistent pattern to facilitate resolution. Without consistent naming conventions, dynamic profile resolution will fail to match existing profiles.
Profile Lookup: Veza looks up an Access Profile with that exact name
Profile Application: If the profile exists in the RUNNING state, its entitlements are applied. Resolved profiles can contain entitlements across multiple target integrations, and dynamically resolved profiles can inherit entitlements from other profiles.
Graceful Continuation: If the profile name doesn't resolve or doesn't exist, Veza logs the issue to the Activity Log and continues processing any other Access Profiles. This is the default behavior and ensures missing or non-existent profiles don't cause the entire workflow to fail.
Failure Handling: Dynamic Access Profile resolution failures do not stop workflow execution. When a profile cannot be resolved or doesn't exist, the system logs "Dynamic access profile not found" to the Activity Log and continues processing other profiles. This prevents a single missing profile from blocking all access provisioning.
Name-based Lookup: Dynamic Access Profiles resolve to profile NAMES, not IDs
Naming Convention Critical: Access Profiles must be named using a predictable, consistent pattern
Profile Inheritance Support: Dynamically resolved profiles can inherit entitlements from other profiles
Multi-Integration Support: Resolved profiles can contain entitlements across multiple target integrations
Graceful Failure: By default, missing or non-existent profiles don't cause the entire workflow to fail
Dynamic and static Access Profiles can be used together in the same action.
Selection Time
Policy configuration time
Workflow execution time
Identifier Type
Access Profile ID
Access Profile name (resolved from expression)
Validation
Profile existence validated when saving policy
Expression syntax validated when saving policy; profile existence checked at runtime
Flexibility
Fixed set of profiles
Before configuring Dynamic Access Profiles:
Create Access Profiles following a consistent naming convention that includes attribute values
Identify User Attributes that will drive profile selection (e.g., department, location, role)
Plan Naming Pattern that incorporates these attributes predictably
Navigate to Lifecycle Management > Policies
Create or edit a policy
Add or edit a Manage Relationships action
In the Dynamic Access Profiles section:
Click Add Profile Name to add a new dynamic profile expression
Enter an attribute formatter expression that evaluates to an Access Profile name
Use the autocomplete to reference available attributes
Dynamic Access Profile expressions use the attribute formatter syntax:
Common Patterns include:
{department} - Direct attribute value
{department | LOWER} - Convert attribute value to lowercase
{OAA.Secondary.Employee.department} - Attribute from a secondary source of identity
TEAM-{department}-{businessUnitCode} - Multiple attributes combined with static text
{location | UPPER}-{role | LOWER} - Multiple attributes with different formatters
You can configure multiple dynamic Access Profile expressions in a single action by clicking Add Profile Name for each additional expression. Each expression is evaluated independently.
You can use IF/ELSE conditional logic within a Dynamic Access Profile expression to select different profile names based on user attributes. This allows a single expression to evaluate to different Access Profile names depending on the identity's properties.
Syntax:
You can use multiple ELSE IF branches to check several conditions in sequence:
Multi-Branch Expressions Work in a Single Field
A single IF/ELSE IF/ELSE block with multiple branches is one expression and works perfectly in one Access Profile Name field. The expression evaluates conditions top-to-bottom and returns the first matching profile name.
Example: Department-Based Profile Selection
This single expression handles four different outcomes in one field—no need for multiple fields.
Supported Comparison Operators:
eq
Equals
department eq "Engineering"
ne
Not equals
status ne "Terminated"
co
Contains
groups co "Admins"
sw
Starts with
location sw "US-"
Combine conditions with and, or, or negate with not. Use parentheses to group complex conditions.
When Multiple Fields Are Required
Use separate Access Profile Name fields only when you need to assign multiple independent profiles to the same user. Each field can contain one complete IF/ELSE expression.
This requires two separate fields (assigning profiles based on TWO independent criteria):
Department-based profile
Location-based profile
This does NOT require multiple fields (one criterion with multiple outcomes):
Error: Cannot Stack Separate IF Blocks
Placing two separate IF/ELSE blocks in the same field causes the error "ELSE statement has to be last". This happens because the parser sees a second IF keyword after an ELSE statement.
Incorrect (two separate IF blocks in one field):
Correct approaches:
For multiple outcomes from the same criterion, use ELSE IF branches:
For independent criteria, use separate Access Profile Name fields (click Add Profile Name).
Example: Complex Conditions with Logical Operators
This expression assigns the SalesforceAdmins profile to users who meet the complex department/role criteria, and No_Profile_Selected (a placeholder that resolves to no profile) for everyone else.
Using No_Profile_Selected as a Fallback
When using IF/ELSE logic, the ELSE branch must provide a value. If you don't want to assign a profile when conditions aren't met, use a placeholder name like No_Profile_Selected that doesn't match any actual Access Profile. The system will log that the profile wasn't found and continue processing other profiles gracefully.
Example: Configuring three dynamic profiles for department, location, and role-based access:
`dept-{department
`location-{location
`role-{role
In this configuration, the user receives entitlements from up to three Access Profiles based on their attributes. Each expression is added as a separate profile in the UI.
Scenario: Provision users to department-specific Access Profiles based on their department attribute.
Access Profile Setup:
Create Access Profiles named: access-profile-engineering, access-profile-sales, access-profile-qa
Each profile contains entitlements appropriate for that department
Dynamic Access Profile Configuration:
With this formatter prefix:
Runtime Behavior:
User with department=Engineering → Access Profile access-profile-engineering
User with department=Sales → Access Profile access-profile-sales
Scenario: Provision users based on both department and business unit for more granular access control.
Access Profile Setup: Create Access Profiles with names combining department and business unit:
TEAM-Engineering-12345
TEAM-Engineering-67890
TEAM-Sales-12345
TEAM-QA-12345
Dynamic Access Profile Configuration:
Runtime Behavior:
User with department=Engineering and businessUnitCode=12345 → Access Profile TEAM-Engineering-12345
User with department=Sales and businessUnitCode=12345 → Access Profile TEAM-Sales-12345
Scenario: Provision users based on geographic location and job role.
Access Profile Setup:
US-manager
US-engineer
EMEA-manager
EMEA-engineer
Dynamic Access Profile Configuration:
Runtime Behavior:
User with location=us and role=Manager → Access Profile US-manager
User with location=emea and role=Engineer → Access Profile EMEA-engineer
Scenario: All employees get a base access profile, plus department-specific access.
Manage Relationships Action Configuration:
Access Profiles (static): all-employees-base-access
Dynamic Access Profiles: dept-{department | LOWER}
Runtime Behavior: Every user receives:
Entitlements from all-employees-base-access (static)
Entitlements from their department-specific profile (dynamic)
Scenario: Use attributes from a secondary identity source.
Setup:
Primary identity: Okta User
Secondary identity: HRIS Employee record with department attribute
Dynamic Access Profile Configuration:
Runtime Behavior: The system evaluates the department attribute from the secondary HRIS Employee node, not the primary Okta User node.
Scenario: Assign different Access Profiles based on which department a user belongs to. Since this is one criterion with multiple possible outcomes, use a single expression with ELSE IF branches.
Access Profile Setup:
Legal Department - For Legal department users
M&A Department - For Mergers and Acquisitions users
Information Technology Department - For IT users
(No actual profile named No_Profile_Selected exists)
Dynamic Access Profile Configuration:
This uses a single Access Profile Name field with multiple ELSE IF branches:
Runtime Behavior:
User in Legal department → Receives Legal Department profile
User in M&A department → Receives M&A Department profile
User in IT department → Receives Information Technology Department profile
This pattern is ideal when you have many possible values for a single attribute. You can add as many ELSE IF branches as needed—all within one field.
Scenario: Assign profiles based on TWO independent criteria—department membership AND user-specific overrides for testing. Since these are unrelated conditions that could both apply simultaneously, use separate fields.
Access Profile Setup:
SalesforceAdmins - For finance/sales department users with Account Manager role
Salesforce User - For specific test users
(No actual profile named No_Profile_Selected exists)
Dynamic Access Profile Configuration:
This requires two separate Access Profile Name fields because you want to potentially assign both profiles to the same user. Click Add Profile Name to add the second field.
Access Profile Name (Field 1) - Department/Role based:
Access Profile Name (Field 2) - Test user override:
Runtime Behavior:
User in Finance department with "Account Manager" title → Receives SalesforceAdmins profile
User with first_name "user04" → Receives Salesforce User profile
User meeting both conditions → Receives both profiles
When to use multiple fields: Use separate fields only when you need to assign multiple profiles independently. If you're selecting ONE profile from multiple options, use ELSE IF branches in a single field instead.
Success with Dynamic Access Profiles depends on establishing consistent naming patterns for your Access Profiles:
Use clear delimiters: Choose hyphens or underscores consistently (e.g., dept-engineering for department-based profiles or TEAM-dept-bu for multi-attribute combinations)
Add prefixes to organize: Group profiles by category (e.g., dept-{department}, loc-{location}, TEAM-{dept}-{bu})
Handle case sensitivity: Profile names are case-sensitive. Use transformers like LOWER or UPPER in your expressions to normalize values, and document your chosen convention
Document your convention: Ensure all teams follow the same naming pattern
Use ELSE IF for related conditions: When selecting one profile from multiple options based on the same attribute (e.g., department), use a single IF/ELSE IF/ELSE expression with multiple branches—this keeps your configuration simple and readable
Use multiple fields for independent criteria: Only add separate Access Profile Name fields when you need to evaluate completely independent conditions (e.g., one profile based on department AND another based on location)
Use fallback placeholders: When a condition shouldn't assign a profile, use a non-existent name like No_Profile_Selected as the ELSE value—the system will gracefully skip it
Test complex conditions: Use the Test Formatter feature to validate your IF/ELSE logic before deploying to production
Create profiles before processing: Always create Access Profiles before running workflows that reference them
The system performs name lookups at runtime: If a profile doesn't exist, it will be skipped
Plan for new attribute values: When adding new departments, locations, or roles to your organization, remember to create their corresponding Access Profiles first to avoid provisioning gaps
Before deploying to production, validate your configuration using dry-run mode to confirm profiles resolve correctly and attribute values match profile names exactly. Monitor your Lifecycle Management logs for "Dynamic access profile not found" messages, which indicate naming mismatches or missing profiles.
Profile not found in Activity Log
Name mismatch or profile is PAUSED
Check Activity Log for the exact resolved name; verify profile exists and is in RUNNING state
Formatter fails to resolve
Missing attribute or incorrect path
Verify attribute exists on identity node; check secondary node paths exist
Wrong profile applied
Similar profile names
Use distinctive naming patterns; avoid profile names that are substrings of others
ELSE statement has to be last
Two separate IF blocks in one field
You cannot stack two separate IF/ELSE blocks in one field. Solution: Either combine related conditions using ELSE IF branches in a single expression (see ), or use separate Access Profile Name fields for truly independent criteria (see ).
Understanding Conditions and Transformers - Conceptual overview of the different evaluation systems
Access Profiles - Creating and managing Access Profiles
Manage Relationships Action - Configuring the Manage Relationships action
- Available formatters and syntax
- Policy configuration and workflows
IF customprop_custom_department eq "Legal"
Legal Department
ELSE IF customprop_custom_department eq "Mergers and Acquisitions"
M&A Department
ELSE IF customprop_custom_department eq "Information Technology"
Information Technology Department
ELSE
No_Profile_SelectedIF department eq "Sales"
SalesProfile
ELSE IF department eq "Engineering"
EngineeringProfile
ELSE
DefaultProfile{attribute_path | formatter | formatter_2}IF <condition>
<profile_name_if_true>
ELSE
<profile_name_if_false>IF <condition1>
<profile_name_1>
ELSE IF <condition2>
<profile_name_2>
ELSE IF <condition3>
<profile_name_3>
ELSE
<default_profile_name>IF ((department eq "Finance") or (department eq "DigitalSales") or (department eq "FP&A") or (department eq "Fiscal Operations")) and (job_title eq "Account Manager")
SalesforceAdmins
ELSE
No_Profile_Selecteddepartment=QA → Access Profile access-profile-qaUser with department=QA and businessUnitCode=12345 → Access Profile TEAM-QA-12345
User in any other department → No profile assigned (resolves to non-existent No_Profile_Selected)
User meeting neither condition → No profiles assigned (both resolve to non-existent No_Profile_Selected)
Adapts based on user attributes
Use Case
Universal access for all users in a workflow
Conditional access based on attributes
Scalability
Requires separate conditions for variations
Single workflow handles all variations
Failure Behavior
Policy creation fails if profile doesn't exist
Graceful continuation if profile doesn't exist
ew
Ends with
email ew "@company.com"
gt
Greater than
employee_count gt 100
ge
Greater than or equal
start_date ge "2024-01-01"
lt
Less than
risk_score lt 50
le
Less than or equal
level le 5
IF department eq "Sales"
SalesProfile
ELSE
No_Profile_Selected
IF location eq "US"
USProfile
ELSE
No_Profile_SelectedIF department eq "Sales"
SalesProfile
ELSE IF department eq "Engineering"
EngineeringProfile
ELSE
No_Profile_Selected{department | LOWER}access-profile-{department | LOWER}TEAM-{department}-{businessUnitCode}{location | UPPER}-{role | LOWER}access-profile-{OAA.Secondary.Employee.department | LOWER}IF customprop_custom_department eq "Legal"
Legal Department
ELSE IF customprop_custom_department eq "Mergers and Acquisitions"
M&A Department
ELSE IF customprop_custom_department eq "Information Technology"
Information Technology Department
ELSE
No_Profile_SelectedIF ((department eq "Finance") or (department eq "DigitalSales") or (department eq "FP&A") or (department eq "Fiscal Operations")) and (job_title eq "Account Manager")
SalesforceAdmins
ELSE
No_Profile_SelectedIF first_name eq "user04"
Salesforce User
ELSE
No_Profile_SelectedConfigure automated workflows for Lifecycle Management actions, including common attribute transformers and event notification settings
Lifecycle Management policies define the workflows that are triggered when a user is added or other events are detected at a specific source of identity. Workflows contained in a policy describe conditional sequences of actions that can be structured based on the specific joiner, mover, leaver (JML) scenarios that you want to automate. This might include hiring a new employee, terminating an existing employee, transferring an existing employee to another department, or other actions triggered by changes in status.
A policy can contain one or more workflows that run under different conditions. For example, one workflow might be applied when employees enter an "Active" state (for Joiner/Rehire scenarios), and another when an employee becomes "Inactive" (for Leaver scenarios). A workflow could also be triggered when an employee's hire date falls within a certain threshold, such as being less than 4 days away, or when it is related to any other employee property within the source of identity.
For most enterprise deployments, Veza recommends:
One policy for each source of identity integrated with Lifecycle Management
Two workflows within each policy:
One for active users to cover Joiner and/or Mover scenarios (including Re-hire)
To create a policy for a source of identity:
Go to Policies.
Click Create Policy.
Enter a policy name and description.
The Dry Run allows you to simulate and preview how a Policy would process an identity, without making actual changes to target systems. This testing tool helps you validate workflow conditions, preview potential changes, and understand what actions would be triggered for specific identities.
The Dry Run evaluates workflow logic but does not interact with target integrations. Verify integration health to ensure target systems are accessible before running actual policies. Dry Run takes a policy and an identity to simulate:
The workflows triggered
All actions that would run
What Access Profiles would be assigned
Any potential changes to entities and attributes
You can test how policies would respond to identity attribute changes for different scenarios during a Dry Run simulation without impacting the actual identity attribute values.
You can initiate a Dry Run in two ways:
From a Lifecycle Management Policy
When editing a policy, open the Dry Run tool to preview changes for any identity:
Go to Policies.
Click a policy to view its details.
Click Dry Run Policy at the top right.
From Identity Details
You can start a Dry Run when viewing details for any account on the Identities page:
Go to Identities.
Search for an identity and click to view its details.
Expand the Actions menu at the top right and click Policy Dry Run.
Dry Run Notes:
Result: 0 Changes
When a dry run returns "0 changes", it means:
The selected identity does not meet any of the trigger conditions defined in your policy's workflows
No actions would be executed for this identity when the policy runs
This is not an error - it simply means the identity doesn't qualify for any of the configured workflows
Limitations
Dry Run has several important limitations:
Dry Run evaluates whether workflow conditions are met, not whether actions would succeed
It does not check whether integrations are functioning properly and whether target systems are accessible
It does not validate that changes could be successfully applied
Dry Run does not test integration connectivity. Issues like API timeouts, authentication failures, or LDAP attribute mapping errors will not be detected during simulation.
Best Practices
Use Dry Run to validate that policies and their workflows are working as intended before enabling them in a live environment.
Test with Representative Identities: Select identities that represent different scenarios (new hires, role changes, terminations) to validate all workflows in your policy.
Simulate Different Scenarios: Modify identity attributes during Dry Run to test trigger conditions such as:
Department changes
Handling long names or names with special characters
Department and location change at once
Same-day rehire after termination
Policies can be version-controlled, allowing for a method to refine and test changes in your automation workflows. You can create draft versions to test changes and validate updates before deployment while maintaining a history of previous configurations. Each policy can have only one active version and one draft version at a time, with automatic archival of retired versions.
Policies have a current state that is based on their workflow operations.
The Policy state includes:
Initial - Initially created before the first workflow version is published
Running - Actively processing with one or more workflows
Paused - Temporarily disabled
Note: In the Policies page, click on the Action overflow icon (three dots) to Start the policy in the Initial state, and Pause or Unpause at the Running state.
The Workflow Version state includes:
Draft - In draft mode for editing and modification
Published - Functional and active
Retired - No longer active or usable
The Policy Draft Mode is a state where a policy is saved but not yet active. In Policy Draft Mode, you can create, edit, and test policy configurations (such as workflows, actions, or mappings) without affecting real users, identities, or access profiles. Once you are satisfied, you can publish the policy, which moves it from the work-in-progress state to an operational state.
To enable the Policy Draft Mode, perform the following:
On the Lifecycle Management Dashboard page, click Settings in the top menu.
The Lifecycle Management Settings page appears. Click Policy Settings.
Switch ON the Enable Policy Draft Mode button.
Test Policy Workflows using Draft Versioning
You can test and refine your policy workflows to ensure that it is working as expected through a series of draft versions with Dry Run simulations. Once the workflow’s result is satisfactory, publishing the version will change the policy status to ‘active’.
Perform the following steps to test your policy workflow:
Create and save a new policy.
Create a new workflow and Save.
After creating a new workflow, click Publish.
Published Policy
A published policy is activated and deployed with the following characteristics:
Enforces the defined rules in your environments, including:
Creating, modifying, or removing user access.
Synchronizing identity attributes.
Use the Policies page for an overview of initial, running, and paused policies. New policies are created in the "Initial" state, enabling a review period before activating the policy. Active ("Running") policies will apply the next time the data source is extracted.
Publishing or updating a policy does not automatically trigger an extraction. To apply policy changes immediately, manually trigger an extraction from the Integrations page.
To manage policies on the main Policies overview:
Go to Lifecycle Management > Policies
Find the policy you want to manage
Search for a specific policy by name
Policies contain one or more workflows. Typically, workflows correspond to Active and Inactive user states, but not always. More specifically, workflows define a sequence of actions to run when a condition is met, based on events and identity changes captured at the source of identity. These workflows apply to scenarios such as new employee hiring, internal employee mobility changes (e.g., promotions, transfers, new managers), or employee departures.
Workflows comprise a tree-like sequence of conditions designed to meet the specific requirements of your joiner, mover, and leaver processes. For example, you may want to grant specific entitlements to users with specific roles, locations, or groups.
The following diagrams illustrate typical joiner and leaver workflow implementations, showing how identity changes in your HR system trigger coordinated provisioning and de-provisioning actions across multiple target applications.
Joiner Workflow
When a new employee is created in Workday, Veza automatically provisions accounts and assigns appropriate access across connected systems based on the employee's role and attributes.
Leaver Workflow
When an employee's status changes to inactive or terminated in Workday, Veza automatically de-provisions accounts and removes access to protect your organization's security posture.
Workflows and Trigger Conditions
Trigger Conditions refer to rules or filters that initiate (or delay) provisioning and deprovisioning workflows based on certain events, criteria within identity data sources, or lifecycle workflows. Trigger conditions use SCIM filter syntax to evaluate whether an identity matches specific criteria.
See for SCIM filter syntax and available operators, or for a comparison with transformer syntax.
Trigger conditions are often tied to HR events, such as employee hiring (joiner), role changes (mover), or termination (leaver). For instance, provisioning flows can be triggered when an employee is hired or deprovisioned when terminated.
Trigger Conditions can be time-based, such as "create the Active Directory account 15 days prior to a new employee's start date".
Advanced implementations also support relationship-based triggers (e.g., launching workflows when a worker is added to a specific department).
To add a workflow, perform the following:
Select a policy.
Click Create Workflow.
In Details, enter the workflow name and description.
Not set
Low
Normal
Medium
The levels dictate the order/priority in which the workflows are run. The higher-priority setting will be processed first. A fairness algorithm is built in to prevent lower-priority workflow tasks from being starved.
In the New Workflow pane, click trigger attribute. The Edit Workflow pane appears.
In the Triggering Condition (Condition String) field, select a conditional string from the dropdown menu to create a logical syntax that automatically starts the workflow. Once a condition has been set, another conditional string can follow, or an action can be taken.
In the Options section, select one of the following:
Note: All workflow errors must be resolved before it can be saved.
Clone or Delete a Workflow
Once an LCM Policy workflow is saved, the clone and delete options appear alongside the workflow name:
Click on the copy icon to clone the workflow.
Click on the trash bin icon to delete the workflow.
A transformer is a rule or function that takes incoming identity or attribute data and modifies it into the format or value that the target system requires.
They’re used when the data source system and target system represent or store information differently. For example, transformers can:
Converting a username from “First.Last” format into all lowercase.
Mapping a department value like “HR” in the source to “Human_Resources” in the target.
Adding a prefix or suffix to attributes (e.g., appending a domain name to create an email).
Transformers act as data processors inside a policy, ensuring that the right values are sent when provisioning, updating, or deprovisioning identities and entitlements.
To add a transformer, perform the following:
Select a policy.
Click Transformers.
Click Add Transformer.
See for available transformation functions.
Lookup tables are CSV files with columns that map values from a source of identity to destination values. Each row represents a mapping entry. The first row must contain the column headers.
This example is a location mapping table, which is a typical format for a Lookup Table:
Once a Lookup Table has been uploaded, it can be processed with the Lookup Transformers. The Lookup transformers convert identity attributes from a source system into appropriate values for target systems based on CSV reference tables. This is particularly useful when mapping values between systems that use different naming conventions, codes, or formats for the same conceptual data.
Use Lookup Table Transformers to:
Map source attribute values to different values in target systems
Standardized reference data that must be consistent across applications
Extract different pieces of information from a single attribute value
See for detailed information.
To add a Lookup Table, perform the following:
Select a policy.
Click Lookup Table.
Click Add Lookup Table.
Properties are the attributes that describe identities, accounts, and entitlements. They serve as the data points a policy can use to determine when and how to take action. Properties can come from:
Built-in properties – default attributes that LCM provides out-of-the-box (for example: username, email, status, created_at).
Custom properties – attributes defined by your organization to capture unique metadata (for example: cost_center, employee_type, manager_id).
Use Properties to:
Properties are referenced in policy conditions (e.g., disable account if status = inactive).
Help with transformers and lookup tables, allowing you to map or reformat values.
Used in identity overrides when syncing accounts from different providers.
To add Properties, perform the following:
Select a policy.
Click Properties.
The Mover Properties appear. Click Edit Properties.
Password Complexity Rules in a policy ensure that generated passwords adhere to standardized criteria according to defined password policies across automated provisioning workflows. You can define reusable password complexity rules to enforce requirements for password length, mandatory character types (uppercase letters, lowercase letters, numbers, and special characters), and restricted characters when generating random passwords. These rules are available for selection in Sync Identities, Deprovision Identity, and Reset Password actions when working with integrations that support complex password requirements.
To add Password Complexity Rules, perform the following:
Select a policy.
Click Password Complexity Rules.
Click Create Password Complexity Rule.
Custom Transformer Functions allow you to programmatically modify or enrich identity attributes as they are synced from identity sources to target systems. These transformations ensure that data formats align across systems and support more dynamic provisioning logic. Such transformers can:
Convert dates into required formats or perform date-based calculations (e.g., adding days to a hire date).
Normalize or transform string values (e.g., case conversion, trimming, substrings).
Apply conditional logic via functions directly within provisioning rules.
To add Transformer Functions, perform the following:
Select a policy.
Click Transformer Functions.
Click Create Custom Transformer Function.
The Policy Settings page provides information about a specific policy and allows for additional configuration, including:
Modify the primary identity source
Define an additional data source to the primary identity source
Configure email notifications or a webhook for action-related events
Making changes in the Policy Settings page will impact all versions (Draft, Published, and Retired) of the policy.
**Policy JSON Viewer**: When enabled, a "Show Raw JSON" button appears in policy header actions to export complete policy configurations for debugging and technical support. See [LCM FAQ](lcm-faq.md) for details.
The Details pane displays the Policy Name and Description fields. These fields are editable for name change or description refinement, if required.
The Primary Identity Source pane displays the integration name of the data source. The Integration field displays all available data sources, where you can add or remove, if required.
You can add multiple Primary Identity Sources if they are the same type of integration. If a different type of integration is required, use the Additional Identity Source.
A Primary Identity Source is the authoritative system that serves as the source of truth for user identities (e.g., HR system, Active Directory, identity provider like Okta/Entra ID). Typically, one type of source of identity is associated with one integration.
The role of the Primary Identity Source includes:
Acts as the authoritative record for user information (emails, roles, statuses).
Lifecycle rules such as provisioning, updates, or deprovisioning are typically triggered based on changes detected in this data source.
Ensures consistency and accuracy across target systems where access is granted or revoked.
As an option, the Additional Identity Sources pane is typically used to add a different type of integration from the Primary Identity Source, which requires that the additional data source be already configured into Lifecycle Management. You can also correlate primary attributes and additional attributes to be associated with the data source. The added data source will sync for authentication, user updates, or provisioning.
To add an Additional Identity Source, perform the following:
Click Add Source.
In the Select Identity Source field, select a data source. Note: If you enable the 'These types are not related' option, then you cannot correlate any attributes.
In the Correlating Attributes pane, select a Primary Attribute from the dropdown menu.
When events occur during the execution of a policy’s workflow, notifications can be triggered upon execution of actions in workflows as a means to inform stakeholders or integrate with external systems. These notifications can be optionally configured as their own discrete action in a workflow or as an option when another action is executed. Lifecycle Management supports email- and webhook-based notifications.
For example, an organization might configure its Active Employee policy to send an email to the manager of each new hire after the employee's email address is provisioned. Additionally, a webhook will be sent to the company's learning management system to initiate online onboarding training once each new hire's Okta account is provisioned, following a successful Sync Identity operation.
Use the Notifications to add and manage notifications:
In the Notifications pane, click Add Notification.
Choose the notification type (Email or Webhook).
Choose the event to trigger notifications:
See for customizing email notifications.
Identity Syncing Option
Identity Syncing at the policy level defines how identities from the authoritative source are synchronized into the target system, including provisioning user accounts or updating existing identities.
The Identity Syncing option controls the behavior of the Sync Identities Actions in a policy workflow, which has Continuous Sync functionality enabled.
Select either:
Sync on changes only - to skip identity syncing when no data source changes are detected
Always sync - to sync, no matter if changes are detected or not
Safety Limits
Safety Limits prevent unintended mass changes to identities by enforcing configurable thresholds. Two independent mechanisms are available and can be used together for layered protection:
Hard Limit
The Hard Limit (formerly "Safety Limit") is a reactive mechanism that stops processing during execution once the configured number of identity changes has been reached. When the limit is triggered, no further identity changes are processed for the current policy run.
To configure a Hard Limit:
Enable the Hard Limit toggle.
Set the Maximum Number of Affected Identities to define the threshold.
Predictive Safety Limit
The Predictive Safety Limit is a proactive mechanism that blocks all changes before execution begins if the system predicts the number of workflow runs will exceed configured thresholds. This prevents unintended mass processing of identities when upstream attribute changes in a Source of Identity would trigger unnecessary Joiner, Mover, or Leaver workflows.
To configure a Predictive Safety Limit:
Enable the Predictive Safety Limit toggle.
Set the Maximum Number of Workflow Runs to define the threshold.
Workflow-Level Limits
Safety limits can be configured at both the policy level and individual workflow level for granular control. When configured at the workflow level, each workflow enforces its own thresholds independently, enabling different limits for Joiner, Mover, and Leaver workflows within the same policy.
Blocked Tasks
When a Predictive Safety Limit triggers, no changes are processed. A warning appears on the Blocked Tasks page with options to:
Review what would have changed
Run the blocked tasks (manually approve execution)
Abandon the blocked tasks (discard without executing)
Processing of future extractions is paused until the administrator acknowledges the warning and resumes processing. New activity log event types PREDICTED_SAFETY_LIMIT_EXCEEDED and WORKFLOW_PREDICTED_SAFETY_LIMIT_EXCEEDED are recorded when predictive limits trigger.
Configuring the Azure integration for Veza Lifecycle Management
The Veza integration for Azure AD (Microsoft Entra ID) enables automated user provisioning, access management, and de-provisioning capabilities as a target system. This integration allows you to provision users from authoritative sources, manage group memberships, assign licenses, and automate the user lifecycle based on changes in external identity sources.
This document includes steps to enable the Azure integration for use in Lifecycle Management, along with supported actions and notes. See for more details.
You will need administrative access in Veza to configure the integration.
Ensure you have an existing in Veza or add a new one for use with Lifecycle Management.
Verify your Azure integration has completed at least one successful extraction.
To enable the integration:
In Veza, go to the Integrations overview
Search for or create an Azure integration
Check the box to Enable usage for Lifecycle Management
To verify the health of the Lifecycle Management data source:
Use the main Veza navigation menu to open the Lifecycle Management > Integrations page or the Veza Integrations overview
Search for the integration and click the name to view details
In the Properties panel, click the magnifying glass icon under Lifecycle Management Enabled
Azure AD serves as a target for identity management actions in Lifecycle Management , based on changes in another external source of truth (such as Workday, Okta, or Oracle HCM) or as part of a workflow.
Note: Azure AD is not currently supported as a source of identity for Lifecycle Management. It can only be used as a target system for provisioning, deprovisioning, and access management actions.
The integration supports the following lifecycle management :
Primary action for user management (creating or updating users):
Entity Types: Azure AD User, Exchange Online Mailbox
Create Allowed (Azure AD User): Yes (new user identities can be created if not found)
Create Allowed (Exchange Online Mailbox): No (update only)
The following attributes can be synchronized:
Use Sync Identities with the Exchange Online Mailbox entity type to update mailbox settings for existing mailboxes. To create new mailboxes, use the action instead.
Creates guest user accounts in Azure AD by sending invitations:
Required Attributes:
invited_user_email_address - Email address of the person to invite
invite_redirect_url - URL where the user is redirected after accepting the invitation
Controls relationships between users and Azure AD entities:
Supported Relationship Types:
Groups: Add or remove users from Azure AD groups
Roles: Assign or remove Azure AD roles
Distribution Lists: When managing distribution list memberships, use the Exchange Online Distribution Group entity type. The Microsoft Graph API cannot modify distribution lists or mail-enabled security groups.
Creates or enables email functionality for users in Azure AD:
Implementation: Assigns Exchange Online license to the user
Requirements: Available Exchange Online license in your tenant
Results: Email-enabled user account with Exchange Online capabilities
Creates new entitlements in Azure AD, including groups and distribution lists:
Azure AD Group Creation:
Required Attributes: name
Optional Attributes:
When a user is deprovisioned:
Entity Type: Azure AD Users
Remove All Relationships: Yes (Removes group memberships, role assignments, and license assignments)
De-provisioning Method: Disabled (Users are marked as disabled rather than deleted)
Specifically handles deprovisioning of guest user accounts:
Required Attributes:
invited_user_email_address - Email address of the guest user
Optional Attributes:
Azure AD integration supports custom properties defined in your tenant. These can be configured in the integration settings and used in attribute transformers for Lifecycle Management actions.
Allows password reset operations for Azure AD users:
Entity Type: Azure AD Users
Unique Identifiers: Can use principal_name, mail_nickname, or invited_user_email_address. At least one unique identifier is required to identify the user
Password Profile Attributes:
Notes:
If no password is provided, a secure password will be generated automatically
Password must meet your Azure AD password policy requirements
Available options include forcing password change on next sign-in and requiring MFA
The name should indicate the source of identity that the policy applies to
Select a Primary Identity Source using the arrows to display a list of available data source integrations.
The selected identity source will trigger workflows in the policy
For the identity source to appear in the menu list, the integration must have Lifecycle Management enabled and be available as a source of identity (SOI).
See Integrations for a list of supported providers and the steps to enable a Lifecycle Management data source.
Note: A Lifecycle Management data source can only be used to trigger workflows in one policy at a time. However, you can assign multiple Lifecycle Management data sources to a single policy as Primary Identity Sources. For example, Company A merges with Company B using Active Directory as its Primary Identity Source. The Primary Identity Source can be comprised of two integrations: Company A AD (from a CSV Upload integration) and Company B Employee Directory (from an OAA integration).
(Optional) Use the Additional Identity Source to add more data sources and correlating attributes.
Click Add Source.
Use the arrows to search for an Identity Source.
In Primary Attributes, select a primary attribute from the dropdown menu.
In Additional Attributes, select another attribute from the dropdown menu.
Click Add to add more Primary Attributes and/or Additional Attributes.
The Only enrich identity if existing in Primary Identity Source option controls identity creation:
Enabled: Only adds data to existing identities from the Primary Identity Source. Does not create new LCM identities.
Disabled: Creates new LCM identities when users exist in the Additional Identity Source but not in the Primary Identity Source.
The Skip Workflow Runs on Extraction option controls whether workflows are triggered when this identity source is extracted:
Enabled: Updates identity attributes from this source without running workflows. Use this when you want to enrich identities with supplementary data but don't need provisioning or deprovisioning actions to run.
Disabled (default): Workflows run normally when extractions occur from this source.
Click Save. The policy is automatically set to the Initial state.
Select one or more attributes to sync. You can modify attributes to simulate potential changes.
Click Show Results.
Review the results:
Check the Workflows Run section to see which workflows were triggered.
Check the Potential Changes section to see all job requests that would be generated (e.g., edits to user attributes, adding/removing access profiles).
Employment status updates
Location transfers
Role modifications
Test Edge Cases: Use Dry Run to test unusual scenarios or edge cases that might not occur frequently in your environment.
A Dry Run executes the workflow logic end-to-end, making no external changes. It evaluates conditions, decides which actions would run, and logs the decisions and payloads. That makes it ideal for probing unusual or risky situations without touching real accounts or entitlements. Here are some edge case examples:
Dry Run - In test mode
Click the overflow menu (three dots) and select Perform Dry Run to test your workflow.
If you are not satisfied with the results of the Dry Run simulation, then click Create Draft. Your workflow will be labeled with a new version number.
Click Edit Workflow to make changes to your workflow.
Continue to modify your workflow using the previous steps until your workflow displays the expected results. Click Publish.
You can view the history of your workflow versions and rollback any draft version for use.
Becomes visible in reporting, monitoring, and compliance views.
It can still be updated by moving it back into Policy Draft Mode first.
Click the three dots icon ⋮ in the rightmost column to expand the Actions menu
View Details - Displays the date (or timeframe) the policy was last updated and its integrations. Use this view to create a workflow, transformer, property, password complexity rules, or transformer functions.
Pause - Pause the Running state of the policy.
Delete - Deletes the policy.
High
Critical
Run only when trigger condition is first met -
If Enabled: The workflow executes only when the trigger condition is initially met, and on every subsequent transition from "not met" to "met."
If Disabled: The workflow runs on every check where the condition is true, regardless of its previous status.
Run only if specific properties change - This workflow is conditionally triggered for an identity when a change is detected in one or more of its specified properties. When enabled, the Properties field appears.
In the Properties field, select a property attribute from the dropdown menu. As the defining attributes of identities, accounts, and entitlements, properties furnish the data points upon which a policy can base its action-oriented logic.
In the Date Formatters, click Add Date Formatter.
Click on the Formatter field to display a dropdown menu of operator functions, the conditional expression function, and attributes.
Click on the Pipeline Functions field to display a dropdown menu of operator functions. The Pipeline Functions combine a series of attribute formatters with the pipe (|) character to run the value of an attribute in sequence. The output of one formatter becomes the input of the following formatter.
In the Minimum Delay Before Running field, set the delay in hours, minutes, and seconds. This option prevents actions from executing immediately when a trigger condition is met. The purpose of such a delay is usually to allow for propagation or to prevent repeated rapid changes that trigger unintended cycles.
Click Save Workflow.
Click the Integration field to display a dropdown menu of integrations of a target system.
Click the Entity Type field to display target entity types based on the integration that was previously selected.
In Attributes, click Add Attribute.
In Unique Identifier, click the Destination Attribute field to display a list of attributes.
Click the Formatter field to display a dropdown menu of operator functions, the Conditional Express function, and attributes.
Click the Pipeline Functions field to display a dropdown menu of operator functions. The Pipeline Functions combine a series of attribute formatters with the pipe (|) character, which runs the value of an attribute in sequential order. The output of one formatter becomes the input of the following formatter.
Optionally, click Add Attribute to add more attributes and repeat the attribute steps.
The Fallback Formatters option appears. Click this option to provide an alternative formatter when a conflict occurs if the primary formatter generates a value that is already in use.
Optionally, enable the Continuous Sync function to keep the target entity up-to-date with values from the source of truth.
Click Save.
Drag and drop a CSV file or navigate to a CSV file to upload. The CSV file must be 10MB or less.
After uploading the file, you can preview it.
Click Save.
Select one or more attributes for your property.
Click Save.
Enable the buttons for:
Allow lowercase characters
Allow uppercase characters
Allow numeric characters
Allow special characters
Note: At least numbers, lowercase, or uppercase characters must be allowed.
In the Disallow Character field, enter one or more characters that are not allowed in the password.
Select one or more attributes for your property.
Click Save.
Be tailored per integration or scenario using custom configurations.
Click the Function Express field to display a dropdown menu of operator functions.
Click Save.
Set a number of actions for a policy to prevent unexpected issues
Select an Additional Attribute from the dropdown menu. Note: The Only enrich identity if existing in Primary Identity Source option:
Enabled: Only enriches existing identities from the Primary Identity Source. Does not create new identities.
Disabled: Creates new LCM identities for users found in the Additional Identity Source but not in the Primary Identity Source.
(Optional) Enable Skip Workflow Runs on Extraction to update identity attributes from this source without triggering workflows. This is useful when you want to enrich identities with supplementary data (such as manager information from a departmental system) but don't need provisioning or deprovisioning actions to run each time this source is extracted.
Create Identity
Sync Identity
Add Relationship
Remove Relationship
Create Email
Change Password
Delete Identity
Disable Identity
Manage Relationships
Write Back Email
Access Request Complete
Custom Action
Action Failed
Workflow Task Failed
Extraction Event Failed
Create Entitlement
Create Guest Account
Rename Entitlement
Create Access Review
Reset Password
Create Access Review Queued
Safety Limit Reached
Sync Entitlement
Choose the status to trigger notifications (when an event is Successful, or On Failure).
Select an Existing Veza Action. A Veza Action is an integration with functionality for sending data to external systems, enabling downstream processes around Veza alerts, and access to reviewer actions. Use a Veza Action to configure generic webhooks or enable email notifications.
See Veza Actions on how to create and deploy a Veza Action.
To customize the Webhook setting, perform the following:
In the Webhook URL field, enter the endpoint configured to receive the webhook payload.
In the Webhook Auth Header field, enter the authorization header if the webhook endpoint requires authentication (e.g., Bearer token123 or API-Key abc456).
To customize the Email setting, perform the following:
In the Recipients field, add a recipient name. Use a comma when adding additional names.
In the Recipients From User’s Attributes field, use the arrows to display a list of user attributes. Select one or more attributes that contain email addresses for the email notification.
Click Save.


location_code,state_code,state,city
MN001,MN,Minnesota,Minneapolis
CA001,CA,California,Los Angeles
TX001,TX,Texas,Houston
TX002,TX,Texas,Austin✅
DISABLE_GUEST_ACCOUNT
Specifically handles deprovisioning of guest user accounts
✅
RESET_PASSWORD
Allows password reset operations for Azure AD users
✅
Directory.ReadWrite.All - Required for creating, updating, and managing directory objects
User.ReadWrite.All - Required to update user attributes in Entra ID
Group.ReadWrite.All - Required for creating and managing groups
GroupMember.ReadWrite.All - Required for managing group memberships
User.EnableDisableAccount.All - Required for enabling/disabling user accounts
mail_nickname
Yes
String
Mail nickname
display_name
Yes
String
Display name
account_enabled
No
Boolean
Enable/disable account
city
No
String
User's city
company_name
No
String
Company name
country_or_region
No
String
User's country or region
department
No
String
User's department
employee_hire_date
No
DateTime
Employee hire date
employee_id
No
String
Employee identifier
Can be unique identifier
employee_type
No
String
Employee type
first_name (given_name)
No
String
User's first name
job_title
No
String
Job title or position
manager_principal_name
No
String
Manager's principal name
nickname
No
String
User's nickname
office
No
String
Office location
other_mails
No
String List
Additional email addresses
password_policies
No
String
Password policy settings
password_profile_force_change_password_next_sign_in
No
Boolean
Force password change on next sign-in
password_profile_force_change_password_next_sign_in_with_mfa
No
Boolean
Force MFA on next password change
password_profile_password
No
String
Initial password setting
postal_code
No
String
Postal code
state
No
String
State or province
street_address
No
String
Street address
last_name (surname)
No
String
User's last name
usage_location
No
String
Usage location for licensing
user_type
No
String
Type of user
String
Mailbox identity
For example: [email protected]
mailbox_settings
No
String
Mailbox settings to sync
Space-separated key=value pairs (see examples below)
cas_mailbox_settings
No
String
Client Access Settings (CAS) to sync
Space-separated key=value pairs (see examples below)
Commonly Used Mailbox Settings:
The mailbox_settings attribute accepts parameters for the Exchange Online Set-Mailbox cmdlet. Common settings include:
AuditEnabled
Boolean
Enable mailbox auditing
true
AuditLogAgeLimit
TimeSpan
Audit log retention period
180.00:00:00
RecipientLimits
Integer
Maximum recipients per message
Example:
Commonly Used CAS Mailbox Settings:
The cas_mailbox_settings attribute accepts parameters for the Exchange Online Set-CASMailbox cmdlet. Common settings include:
OWAEnabled
Boolean
Enable Outlook on the Web access
true or false
ActiveSyncEnabled
Boolean
Enable Exchange ActiveSync
true or false
EwsEnabled
Boolean
Enable Exchange Web Services
Example:
Exact Value Matching Required: During the verification phase, Veza compares the requested values to the values returned by Exchange Online for exact matching. Use the same format that Exchange Online returns.
For example, when setting AuditLogAgeLimit, use the format 180.00:00:00 (days.hours:minutes:seconds), not just 180.
principal_name - User principal name (if not provided, generated from email)
display_name - Display name (if not provided, generated from email)
mail_nickname - Mail nickname (if not provided, generated from email)
Other standard user attributes as needed
Distribution Lists: Manage Exchange Online distribution list memberships
Assignee Types: Azure AD Users
Supports Removing Relationships: Yes
mail_enabled - Whether the group is mail-enabled
is_security_group - Whether it's a security group
visibility - Privacy setting (Public, Private, HiddenMembership)
description - Group description
Distribution Group Creation:
Required Attributes: name
Optional Attributes:
identity - Unique identifier
alias - Email alias
primary_smtp_address - Primary email address
group_type - Type of distribution group
User Logout - Force user to log out from all active sessions
Remove All Licenses - Remove all license assignments
Remove All Personal Devices - Remove device registrations
display_name - Display name of the guest user
Complex Password Support: Supports complex password requirements per Azure AD policy
mail_nickname
No*
String
Mail nickname
Can be used as unique identifier
invited_user_email_address
No*
String
Email address for guest users
Can be used as unique identifier for guest accounts
password_profile_force_change_password_next_sign_in
No
Boolean
Require user to change password at next login
password_profile_force_change_password_next_sign_in_with_mfa
No
Boolean
Require MFA when changing password at next login
password_profile_password
No
String
New password value
Must meet Azure AD complexity requirements; autogenerated if not provided
SYNC_IDENTITIES
Synchronizes identity attributes between systems, with options to create new identities and update existing ones
✅
MANAGE_RELATIONSHIPS
Controls entitlements such as group memberships, role assignments, and license assignments
✅
CREATE_GUEST_USER
Creates guest user accounts by sending invitations
✅
CREATE_ENTITLEMENT
Creates new entitlements in Azure AD, including groups and distribution lists
✅
CREATE_EMAIL
Creates or enables email functionality for users
✅
DEPROVISION_IDENTITY
principal_name
Yes
String
User Principal Name
identity
principal_name
No*
String
User Principal Name
Safely removes or disables access for identities, includes user logout support
Unique identifier
Yes
Can be used as unique identifier
AuditEnabled=true AuditLogAgeLimit="180.00:00:00" RecipientLimits=250 MaxSendSize="25 MB (26,214,400 bytes)"OWAEnabled=false ActiveSyncEnabled=false EwsEnabled=false MAPIEnabled=true PopEnabled=false ImapEnabled=true250
MaxSendSize
Size
Maximum outgoing message size
25 MB (26,214,400 bytes)
MaxReceiveSize
Size
Maximum incoming message size
25 MB (26,214,400 bytes)
ProhibitSendQuota
Size
Mailbox size limit for sending
49 GB (52,613,349,376 bytes)
IssueWarningQuota
Size
Mailbox size warning threshold
45 GB (48,318,382,080 bytes)
true or false
MAPIEnabled
Boolean
Enable MAPI (Outlook desktop)
true or false
PopEnabled
Boolean
Enable POP3 access
true or false
ImapEnabled
Boolean
Enable IMAP4 access
true or false
Configuring the Active Directory integration for Veza Lifecycle Management
The Veza integration for Active Directory enables automated user lifecycle management, including user provisioning and deprovisioning, group membership management, and attribute synchronization.
Non-Human Identity (NHI) Support: Active Directory Managed Service Accounts support a simplified action set designed for service account lifecycle needs. See below for details.
This document includes steps to enable the Active Directory integration for use in Lifecycle Management, along with supported actions and notes. See for more details.
You will need administrative access in Veza to configure the integration.
Ensure you have an existing in Veza or add a new one for use with Lifecycle Management.
Verify your Active Directory integration has completed at least one successful extraction.
To enable the integration:
In Veza, go to the Integrations overview
Search for or create an Active Directory integration
Check the box to Enable usage for Lifecycle Management
Configure the extraction schedule to ensure your Active Directory data remains current:
Go to Veza Administration > System Settings
In Pipeline > Extraction Interval, set your preferred interval
Optionally, set a custom override for Active Directory in the Active Overrides section
To verify the health of the Lifecycle Management data source:
Use the main Veza navigation menu to open the Lifecycle Management > Integrations page or the Veza Integrations overview
Search for the integration and click the name to view details
In the Properties panel, click the magnifying glass icon under Lifecycle Management Enabled
Create a dedicated AD user with the minimum required permissions:
Using Active Directory Users and Computers:
Open Active Directory Users and Computers
Navigate to the target Organizational Unit
Right-click > New > User
Using PowerShell:
Grant the service account permissions to manage users in the target OUs:
Using Active Directory Users and Computers:
Navigate to the target Organizational Unit
Right-click > Delegate Control
Click Add and enter the service account name
Using PowerShell:
Navigate to Configurations > Integrations
Either:
Create a new Active Directory integration
The AD user created for lifecycle management can be the same as the primary AD user created for extraction, provided that the user has all the required permissions listed above.
Active Directory can serve as a source for identity information in Lifecycle Management . User identity details are synchronized from Active Directory, with changes propagated to connected systems.
Active Directory can also be a target for identity management actions, based on changes in another external source of truth or as part of a workflow.
The integration supports the following lifecycle management :
Synchronizes identity attributes between systems, with options to:
Create new identities if they don't exist
Update attributes of existing identities
Enable continuous sync to keep attributes aligned with the source of truth
Unique Identifiers
Active Directory uses composite unique identifiers to locate users. Only one unique identifier can be specified per action:
account_name (sAMAccountName) - Default unique identifier
distinguished_name - Full LDAP path (e.g., CN=John Doe,OU=Users,DC=company,DC=com)
user_principal_name - Login format (e.g., [email protected])
The following attributes can be synchronized:
Controlling account state with user_account_control
The user_account_control attribute controls the account state during identity synchronization, enabling scenarios like creating pre-staged disabled accounts or setting custom account flags.
Supported flags:
Combine multiple flags with commas. For example, NORMAL_ACCOUNT,ACCOUNTDISABLE creates a disabled account (equivalent to integer value 514).
Input format requirements:
Use flag names only: Enter the exact flag names shown above (e.g., NORMAL_ACCOUNT). Integer values like 512 or 514
Common combinations:
If user_account_control is not specified in your transformer, the default value (512) is used and accounts are created in an enabled state.
Example use cases:
Pre-staged accounts: Create accounts in a disabled state before an employee's start date, then enable them via a separate workflow when the start date arrives
Approval workflows: Create disabled accounts that require manager approval before activation
Service accounts: Set specific flags like "password never expires" for service accounts
Updating existing accounts: The user_account_control attribute can also update existing users, not just new accounts. To enable a previously disabled account, sync user_account_control with NORMAL_ACCOUNT only (omitting ACCOUNTDISABLE). This is useful for workflows that activate pre-staged accounts on an employee's start date.
Graph visibility: Disabled users (accounts with ACCOUNTDISABLE flag set, such as value 514) are filtered out during Active Directory extraction and will not appear in the Veza graph. This is expected behavior—once the account is enabled, it will appear in the graph after the next extraction.
For a complete list of userAccountControl flag values and their meanings, see .
Password policy for new identities
When creating new Active Directory users through Sync Identities, you can configure a password policy to control the initial password and enforce a password change on first login.
Password policy options:
Enforce password change on login: When enabled, the newly created AD account requires the user to change their password at next logon. Veza sets the AD pwdLastSet attribute to 0, which is the standard Active Directory mechanism for forcing a password change.
Password complexity: Configure generated password requirements including minimum length, required character types (uppercase, lowercase, numbers, special characters), and disallowed characters. See for details.
When Sync Identities creates a new user with a password policy configured:
A random password is generated following the configured complexity rules
The password is set on the new AD user account
If "Enforce password change on login" is enabled, the account is flagged to require a password change at next logon
Sending the temporary password: To deliver the generated password to the appropriate recipient, configure an for the LIFECYCLE_MANAGEMENT_CHANGE_PASSWORD event on the Sync Identities action. The default email template includes the {{LOGIN_PASSWORD}} placeholder, which is replaced with the generated password. You can customize the notification template and recipients in the action's event notification settings.
The generated password is included in the notification email in plain text. Ensure that notification recipients are configured appropriately, and that "Enforce password change on login" is enabled so the temporary password is short-lived.
Controls relationships between users and Active Directory groups:
Entity Types: Active Directory Groups
Assignee Types: Active Directory Users
Supports Removing Relationships: Yes
Both adding and removing group memberships are supported. Group memberships can be managed individually or removed in bulk during deprovisioning.
When a user is deprovisioned in Active Directory:
Entity Type: Active Directory User
Method: Account Disabled (sets userAccountControl flags to NORMAL_ACCOUNT,ACCOUNTDISABLE)
Remove All Relationships: Yes (optional - group memberships can be removed)
What is preserved:
User account structure (not deleted)
All user attributes (name, email, title, etc.)
The following unique identifiers can be used to locate the user:
Creates new Active Directory groups:
Entity Type: Active Directory Group
Required Attributes: name
Optional Attributes: description, group_type, is_security_group, member_of, account_name, organizational_unit_dn
Resets a user's password in Active Directory:
Entity Type: Active Directory User
Idempotent: No (generates a new password with each execution)
Password Options:
The Reset Password action is non-idempotent. Each execution generates a new password, even if the action is run multiple times.
Password Complexity Options:
Length: Configurable minimum password length
Character Types: Uppercase, lowercase, numbers, special characters
Disallowed Characters: Specify characters to exclude from generated passwords
The following unique identifiers can be used to locate the user:
Permanently removes a user from Active Directory:
Entity Type: Active Directory User
Method: Permanent deletion (DROP USER equivalent)
Warning: This action cannot be undone
Delete Identity permanently removes the user account from Active Directory. Use Deprovision Identity instead if you need to preserve the account for audit or potential reactivation.
The following unique identifiers can be used to locate the user:
Automate user creation and group assignment when a new employee joins:
Create a Lifecycle Management policy with your HR system as the source of identity
Configure a workflow triggered when a new identity is detected
Add a Sync Identities action to create the AD user:
Update access when an employee changes roles:
Create a policy with your HR system as the source of identity
Configure a workflow triggered when attributes change (department, title, or manager)
Add a Sync Identities action to update user attributes
Disable access when an employee leaves:
Create a policy with your HR system as the source of identity
Configure a workflow triggered when termination date is set or employee status changes
Add a Deprovision Identity action:
Active Directory Lifecycle Management supports Managed Service Accounts (MSAs) for Non-Human Identity (NHI) provisioning. MSAs have a simplified action set compared to user accounts, reflecting the different lifecycle needs of service accounts.
Current NHI Support: Veza's Managed Service Account provisioning currently supports identity creation, attribute synchronization, and deletion. Group membership management and staged deprovisioning are not yet available for MSA entity types.
Managed Service Accounts support a limited attribute set compared to user accounts:
Automate service account creation and removal:
Create a Lifecycle Management policy with your CMDB or service catalog as the source of identity
Configure a workflow triggered when a new service is registered
Add a Sync Identities action to create the MSA:
Unlike user accounts, Managed Service Accounts do not support the Deprovision Identity action. When an MSA is no longer needed, use Delete Identity to permanently remove it. Plan your MSA lifecycle accordingly.
For more information about NHI governance beyond provisioning, see .
✅
❌
DELETE_IDENTITY
Permanently deletes the identity from Active Directory
✅
✅
SOURCE_OF_IDENTITY
Active Directory can act as a source system for identity lifecycle policies
✅
❌
Recommended name: "Veza AD Lifecycle Manager"
Set a strong password
Uncheck "User must change password at next logon"
Create, delete, and manage user accounts
Reset user passwords and force password change
Read all user information
Modify group membership
Enable Lifecycle Management:
Check Enable Lifecycle Management
Enter the Lifecycle Management Username (service account created above)
Enter the Lifecycle Management Password
Save the configuration
distinguished_name
Yes
String
Full LDAP distinguished name path
Can be used as unique identifier
user_principal_name
Yes
String
User's principal name (login format)
Can be used as unique identifier
account_expires
No
Date/Time
Account expiration date and time
city
No
String
City
company
No
String
Company name
country_code
No
String
ISO 3166 Alpha-2 country code
country_or_region
No
String
Country or region name
department
No
String
Organizational department
description
No
String
User description
display_name
No
String
Display name
No
String
Email address
Can be used as unique identifier
given_name
No
String
First name
manager_id
No
String
Manager's sAMAccountName
office
No
String
Office location
physical_delivery_office_name
No
String
Physical office name
postal_code
No
String
Postal/ZIP code
primary_group_dn
No
String
Distinguished name of primary group
state_or_province_name
No
String
State or province
street_address
No
String
Street address
sur_name
No
String
Last name/surname
title
No
String
Job title
user_account_control
No
String List
Account control flags
Comma-separated flag names (e.g., NORMAL_ACCOUNT,ACCOUNTDISABLE). See for details.
Include NORMAL_ACCOUNT explicitly: When setting custom flags, you must include NORMAL_ACCOUNT in the list to maintain standard account behavior. For example, use NORMAL_ACCOUNT,ACCOUNTDISABLE rather than just ACCOUNTDISABLE.
Invalid flags are silently ignored: Unrecognized flag names are skipped without warning. Always verify flag names match exactly (case-insensitive).
Audit history and account information
Account can be reactivated by re-enabling
What changes:
Account is disabled (login prevented)
Group memberships are removed (optional, based on workflow configuration)
User cannot authenticate or access AD resources
Full LDAP distinguished name path
Can be used as unique identifier
user_principal_name
String
User's principal name (login format)
Can be used as unique identifier
String
Email address
Can be used as unique identifier
account_name
No
String
Group account name (sAMAccountName)
Maximum 256 characters, must be unique
description
No
String
Group description
group_type
No
String
Type of group
Values: Domain, System, Global, Universal, App Basic, App Query
is_security_group
No
Boolean
Whether this is a security group
member_of
No
String
Distinguished name of parent group(s)
organizational_unit_dn
No
String
Distinguished name of target OU
Option to require password change on next login
Passwords must comply with Active Directory domain password policy
Full LDAP distinguished name path
Can be used as unique identifier
String
Email address
Can be used as unique identifier
user_principal_name
String
User's principal name (login format)
Can be used as unique identifier
Full LDAP distinguished name path
Can be used as unique identifier
user_principal_name
String
User's principal name (login format)
Can be used as unique identifier
String
Email address
Can be used as unique identifier
Set initial password with "require change on next login"
Add a Manage Relationships action to assign initial group memberships based on role/department
Remove old role-based group memberships
Add new role-based group memberships
Group memberships will be removed
Attributes preserved for audit
Optionally schedule a Delete Identity action after retention period (e.g., 90 days)
Reset Password
❌
Not applicable for service accounts
ActiveDirectoryManagedServiceAccountMap service attributes to MSA attributes (account_name, distinguished_name, description)
For service decommissioning, add a Delete Identity action to remove the MSA
SYNC_IDENTITIES
Synchronizes identity attributes between systems, with options to create new identities and update existing ones
✅
✅
MANAGE_RELATIONSHIPS
Controls entitlements such as group memberships and role assignments for identities
✅
❌
DEPROVISION_IDENTITY
Safely disables access for identities while preserving attributes for audit
✅
❌
CREATE_ENTITLEMENT
Creates entitlements such as Active Directory groups
✅
❌
RESET_PASSWORD
account_name
Yes
String
User's account name (sAMAccountName)
NORMAL_ACCOUNT
Standard user account (required for most scenarios)
ACCOUNTDISABLE
Disables the account
DONT_EXPIRE_PASSWORD
Password never expires
PASSWD_NOTREQD
No password required
PASSWD_CANT_CHANGE
User cannot change password
SMARTCARD_REQUIRED
Smart card required for login
NORMAL_ACCOUNT
512
Standard user provisioning (default)
NORMAL_ACCOUNT,ACCOUNTDISABLE
514
Pre-staging accounts before start date
NORMAL_ACCOUNT,DONT_EXPIRE_PASSWORD
66048
Service accounts
NORMAL_ACCOUNT,ACCOUNTDISABLE,DONT_EXPIRE_PASSWORD
66050
account_name
String
User's account name (sAMAccountName)
Can be used as unique identifier
distinguished_name
name
Yes
String
Group name
account_name
String
User's account name (sAMAccountName)
Can be used as unique identifier
distinguished_name
account_name
String
User's account name (sAMAccountName)
Can be used as unique identifier
distinguished_name
Sync Identities
✅
Create and update MSA attributes
Delete Identity
✅
Permanently remove MSAs
Manage Relationships
❌
MSAs cannot be assigned to groups via LCM
Deprovision Identity
❌
Only deletion is supported, not disabling
account_name
Yes
String
Service account name (sAMAccountName)
distinguished_name
Yes
String
Full LDAP distinguished name path
description
No
String
Allows password reset operations for Active Directory users
Can be used as unique identifier
Pre-staged service accounts
String
Maximum 64 characters
String
String
Service account description
Configure the conditions and actions that execute when workflows run.
When creating Lifecycle Management Policies, you can configure workflows that define actions to execute during different employment lifecycle scenarios, such as when an employee is onboarded, changes function or role, or is withdrawn from the organization. Actions can be executed in sequence based on specific conditions, enabling you to automate onboarding and offboarding actions within Lifecycle Management, across systems in your environment.
Policies and workflows define how Veza automates identity management tasks across your environment by describing conditional actions to execute for different employee populations.
Define the overall automation framework for managing identities throughout their lifecycle
Specify which source of identity triggers the automation
Can contain multiple workflows to handle different scenarios (joiner, mover, leaver)
Define specific sequences of actions that execute based on trigger conditions
Handle different lifecycle scenarios (e.g., new hire onboarding, role changes, terminations)
Support conditional execution based on user attributes (department, location, role, etc.)
Define when specific actions should occur within a workflow
Can be based on any attribute from the source of identity
Support SCIM filter expressions for precise targeting
Example Conditions for Lifecycle Management Actions:
Add to engineering groups based on department:
department eq "Engineering"Grant manager access based on role:
is_manager eq true
Represent specific tasks such as creating users, syncing attributes, or managing access
Types of actions include:
SYNC_IDENTITIES: Create/update user accounts
The following workflow configuration for a Lifecycle Management Policy enables provisioning actions for Active Directory users when workers are added in Workday:
Create an Active Directory user, synchronizing attributes with the source Workday Worker
Create email addresses for new employees in Exchange Server
Update the Workday Worker and AD User records to include the new email
When provisioning users, Veza synchronizes attributes for active employees and creates them during AD User provisioning. These attributes can be transformed from attributes in the source of identity (Workday):
To de-provision users, Veza moves accounts to a terminated users group and adds them to an OU for terminated employees:
Moving leavers into a "Terminated Users" group (via the primary_group_dn attribute) effectively restricts access to systems that rely on Active Directory for authentication and authorization
Updating the distinguished_name to place leavers in a specific organizational unit (OU) like "Evergreen Termination" separates active users from inactive ones and enables the application of policies, scripts, and queries that target inactive users without affecting active employees
Action Hierarchy Requirement: The Sync Identities action is the only action type that can be declared at the root condition level. All other actions must be defined within sub-conditions after establishing a root condition with Sync Identities. The UI enforces this hierarchy.
Synchronizes identity attributes between systems, with options to:
Create new identities if they don't exist
Update attributes of existing identities
Enable continuous sync to keep attributes aligned with the source of truth
Example Use Cases:
Create new user accounts in target systems when employees join
Update user attributes when information changes in HR systems
Ensure consistent user information across multiple platforms
Controls entitlements such as group memberships and role assignments for identities.
Example Use Cases:
Add users to appropriate security groups, roles, permission sets, or other access-grant entities
Remove users from groups during role changes
Update entitlements when employees move between departments
Integrates with an email provider to create email addresses for identities. This action is often used in combination with other actions in new hire and temp-to-hire workflows.
Example Use Cases:
Create corporate email accounts for new employees
Establish shared mailboxes for teams or projects
Safely removes or disables access for identities when they withdraw from the organization.
Example Use Cases:
Disable accounts when employees or contractors leave
Revoke access while maintaining audit records
Transition resources when owners depart
Note for Non-Human Identities: DEPROVISION_IDENTITY is not supported for NHI entity types such as Managed Service Accounts. Use instead to remove NHI accounts.
Permanently removes user accounts from target systems. Unlike the DEPROVISION_IDENTITY action which disables or suspends accounts while preserving audit records, DELETE_IDENTITY performs complete account removal.
Warning: DELETE_IDENTITY permanently removes accounts from target systems. Deleted data is typically unrecoverable. Consider using DEPROVISION_IDENTITY instead if you need to preserve audit trails or may need to reactivate accounts in the future.
Example Use Cases:
Database user cleanup after employee offboarding
Compliance with data deletion policies (e.g., GDPR right to be forgotten)
Removing test or temporary accounts
Non-Human Identity (NHI) Lifecycle: For service accounts and other NHI entity types, DELETE_IDENTITY is the primary decommissioning action since DEPROVISION_IDENTITY is not supported. See for details.
Supported Integrations:
Active Directory (Users and Managed Service Accounts)
Okta
PostgreSQL
MySQL
Executes integration-specific operations that extend beyond standard Lifecycle Management action types. CUSTOM_ACTION enables integrations to define specialized operations with flexible attribute schemas tailored to their unique capabilities.
CUSTOM_ACTION currently supports ServiceNow only. For generic HTTP requests to external APIs, use the action instead.
Example Use Cases:
Insert records into ServiceNow tables when employees join or change roles
Create ServiceNow incidents or requests as part of onboarding workflows
Update ServiceNow CMDB records during employee lifecycle events
Custom Actions are non-idempotent. Each execution creates a new record. Running the same action multiple times will create duplicate records.
Supported Integrations:
For detailed configuration examples including incident creation and audit logging, see .
Updates HRIS or other systems with email addresses created in other actions.
Example Use Cases:
Update employee records with newly created email addresses
Sync email information back to master HR systems
Ensure consistent email records across all platforms
Introduces a deliberate delay in the workflow execution.
Example Use Cases:
Allow time for system propagation between actions
Implement rate limiting in multi-step workflows
Coordinate timing with external processes
Makes HTTP requests to external APIs and services as part of provisioning workflows. This action enables integration with custom applications, webhooks, and REST-based services that support identity management operations.
Early Access: This feature is in Early Access and may require Veza support to enable. Contact your Customer Success Manager for availability.
Example Use Cases:
Notify external systems when users are created or updated in target systems
Trigger custom provisioning workflows in third-party applications
Send identity data to SCIM endpoints for user synchronization
Variable Substitution:
Both the webhook URL and JSON payload support attribute transformation using curly brace syntax. Identity attributes from the source system can be dynamically inserted into requests:
Available transformations include UPPER, LOWER, TRIM, and accessing nested attributes with dot notation, such as {Manager.email}. See for complete transformation syntax.
Note: If any placeholder in the URL or payload cannot be resolved (e.g., due to missing attributes), the entire transformation is skipped and the original URL is used without any substitution. The system logs a warning for troubleshooting. Ensure all referenced attributes exist in the source of identity to enable proper variable substitution.
Response Handling:
When "Add Response to Output Entities" is enabled, the action parses JSON responses and extracts specified entity data. This enables chaining actions where one API call creates a resource and returns an identifier that subsequent actions can reference.
For example, if a user creation API returns:
Configure the action with:
Response Entity Attribute: result
Response ID Attribute: user_id
Response Name Attribute: display_name
The extracted entity becomes available to downstream workflow actions.
HTTP Method Guidelines:
GET: Query operations, typically without payload; use for checking resource state or retrieving data. Does not set workflow change flags
POST: Create new resources; requires JSON payload; sets both AnyCreated and AnyChanges flags that can trigger downstream actions with "Only Send if Any Upstream Changes" enabled
Workflow Integration: The
AnyCreatedandAnyChangesflags enable conditional workflow execution. Actions configured with "Only Send if Any Upstream Changes" will only execute when a previous action has set these flags, allowing you to build sophisticated conditional workflows (e.g., only send a notification webhook if a user was actually created, not just updated).
Authentication Patterns:
The authorization header supports common authentication methods:
No Authentication: Leave the authorization header empty when connecting to endpoints that don't require credentials, such as internal services or pre-authenticated URLs
Bearer Token: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
API Key: X-API-Key: secret-key-123 or
The "No Auth" option is useful for internal microservices, pre-authenticated webhook URLs, or endpoints behind a VPN that handle authentication at the network level.
Limitations:
Only JSON payloads are supported (no XML, form-data, or other formats)
Authentication must be header-based (OAuth flows requiring user interaction are not supported)
Response parsing requires valid JSON if "Add Response to Output Entities" is enabled
The Send REST Request action can call Okta lifecycle APIs to suspend users, enabling workflows that handle leave of absence (LOA) scenarios before native Suspend action support is available.
Configuration:
Triggers email notifications and webhooks based on lifecycle events and action success or failure. Notifications can be added to any action type under Edit Action > Action Notification Settings.
Example Use Cases:
Alert IT staff when provisioning is complete
Notify managers of access changes
Create a service desk ticket for any manual steps
Email Template Selection:
When configuring email notifications (either as a Send Notification action or in Action Notification Settings), you can choose which template to use:
Default template: Uses the built-in event-specific template based on the lifecycle event being processed
Custom template: Uses a reusable custom email template you've created, allowing consistent messaging across multiple workflows
Custom templates support the same placeholders as event-specific templates, enabling dynamic content like identity names, workflow names, and action results. See for placeholder reference and template management.
Resets user passwords in target systems. Configuration options and behavior vary by integration.
Example Use Cases:
Reset passwords for new users who must change on first login
Enforce password rotation policies
Recover from account lockouts
Password complexity requirements, unique identifier options, and force-change-on-login settings vary by integration. See the integration-specific guides below for configuration details.
Supported Integrations:
Automatically creates access review campaigns during lifecycle events. This action bridges Lifecycle Management with Veza Access Reviews, enabling automated certification workflows triggered by identity lifecycle changes.
CREATE_ACCESS_REVIEW is a control-plane action that executes within the Veza platform. The action creates review campaigns asynchronously: first queuing the review, then creating it based on the defined certification plan.
Example Use Cases:
Review contractor access 30 days after onboarding to ensure appropriate permissions
Certify elevated permissions after role changes or promotions
Trigger periodic access reviews based on employment anniversaries
Certification Creation Plan Configuration:
The Certification Creation Plan is the core configuration element for CREATE_ACCESS_REVIEW:
Early Access: Multi-level approval (second and third level reviewers) is in Early Access and may require Veza support to enable.
How It Works:
A lifecycle event triggers a workflow containing the CREATE_ACCESS_REVIEW action
The action evaluates the Certification Creation Plan against the identity that triggered the event
A review campaign is queued in Veza Access Reviews
Event Notifications:
CREATE_ACCESS_REVIEW generates two notification events:
You can configure email notifications or webhooks for both events to track review creation progress. See for configuration details.
LCM-triggered reviews have special behaviors including automatic exclusion of unchanged results and entity type matching requirements. See for complete behavior documentation.
Related Topics:
: Behavior, filtering, entity matching, and troubleshooting
: Configuring certification plans and managing reviews
: Managing birthright entitlements included in reviews
New-ADUser -Name "Veza AD Lifecycle Manager" `
-Path "OU=<your_OU>,DC=<domain>,DC=<tld>" `
-GivenName "Veza" `
-Surname "AD Lifecycle Manager" `
-SamAccountName "veza-ad-lcm" `
-AccountPassword (ConvertTo-SecureString -AsPlainText "<password>" -Force) `
-ChangePasswordAtLogon $False `
-DisplayName "Veza AD Lifecycle Manager" `
-Enabled $TrueImport-Module ActiveDirectory
$OrganizationalUnit = "OU=<your_OU>,DC=<domain>,DC=<tld>"
$Users = [GUID]"bf967aba-0de6-11d0-a285-00aa003049e2"
Set-Location AD:
$User = Get-ADUser -Identity "veza-ad-lcm"
$UserSID = [System.Security.Principal.SecurityIdentifier] $User.SID
$Identity = [System.Security.Principal.IdentityReference] $UserSID
# Create permission for managing users
$RuleCreateDeleteUsers = New-Object System.DirectoryServices.ActiveDirectoryAccessRule $Identity, "CreateChild, DeleteChild", "Allow", $Users, "All"
# Create permission for password resets
$ResetPassword = [GUID]"00299570-246d-11d0-a768-00aa006e0529"
$RuleResetPassword = New-Object System.DirectoryServices.ActiveDirectoryAccessRule ($Identity,
"ExtendedRight", "Allow", $ResetPassword, "Descendents", $Users)
# Apply permissions
$ACL = Get-Acl -Path $OrganizationalUnit
$ACL.AddAccessRule($RuleCreateDeleteUsers)
$ACL.AddAccessRule($RuleResetPassword)
Set-Acl -Path $OrganizationalUnit -AclObject $ACLEnable email notifications and webhooks for action-related events
Execute actions in a defined order when conditions are met
Can trigger multiple actions when met
Can spawn additional conditions after successful action completion
cost_center eq "IT-1234"Add to contractor AD groups: employment_type eq "CONTRACTOR"
CREATE_EMAIL: Generate email addresses
DEPROVISION_IDENTITY: Disable/remove access
DELETE_IDENTITY: Permanently delete accounts
CUSTOM_ACTION: Integration-specific operations (e.g., ServiceNow table inserts)
WRITE_BACK_EMAIL: Update source system
PAUSE: Add workflow delays
SEND_REST_REQUEST: Make HTTP requests to external APIs
SEND_NOTIFICATION: Trigger alerts
RESET_PASSWORD: Reset existing user password
CREATE_ACCESS_REVIEW: Trigger access review campaigns
display_name
display_full_name
{display_full_name}
given_name
first_name
{first_name}
sur_name
last_name
{last_name}
country_code
work_location
{work_location}
job_title
job_title
{job_title}
primary_group_dn
-
CN=Domain Users,CN=Users,DC=evergreentrucks,DC=local
Update HRIS with newly created email addresses
Add delays between workflow actions
Make HTTP requests to external APIs
Trigger emails or webhooks on action events
Reset user passwords in target systems
Automatically create certification campaigns
Contractor account removal after project completion
OracleDB
GitHub
AWS RDS (MySQL, PostgreSQL, OracleDB)
Custom Application
Execute webhooks to coordinate multi-system workflows
Extract response data (like user IDs) from external systems for use in downstream actions
Add Response to Output Entities
Extract entity data from the API response to make available for downstream actions
Output Entity Type
Type of entity to create from response (required if "Add Response to Output Entities" is enabled)
Response Entity Attribute
JSON path to extract from response using dot notation (e.g., result extracts response.result, data.user extracts response.data.user)
Response ID Attribute
Attribute name containing the entity identifier in the response (defaults to id)
Response Name Attribute
Attribute name containing the entity display name in the response (defaults to name)
Execute from Insight Point
Optional datasource ID to execute the request from an Insight Point instead of the control plane (useful for internal network-only APIs)
AnyChangesPATCH: Partially update resources; requires JSON payload; sets AnyChanges flag
DELETE: Remove resources; payload optional; sets AnyChanges flag
HEAD: Metadata query without response body; payload optional; sets AnyChanges flag
OPTIONS: Describes communication options for the target resource; payload optional; sets AnyChanges flag
Authorization: ApiKey sk-prod-xyzCustom Headers: Any header format your API requires
POST, PUT, and PATCH methods require non-empty, valid JSON payloads
HTTP Method
POST
Authorization Header
SSWS {your-okta-api-token}
JSON Payload
{}
Key notes:
User identification: Okta's suspend API requires the user's Okta ID or login. Use the FROM_ENTITY_ATTRIBUTE transformer to look up the Okta login from the Authorization Graph based on a source attribute like employee_id.
Authorization format: Okta API tokens must be prefixed with SSWS (e.g., SSWS 00abcd1234...), not Bearer.
Empty payload: The suspend endpoint requires a POST with an empty JSON object {} as the payload.
Example workflow condition:
To suspend users when their SOI lifecycle status changes to a leave state:
Unsuspending users: To reactivate suspended users, create a separate workflow condition with the unsuspend endpoint:
This approach is used when the SOI lifecycle status changes back to an active state (e.g., lifecycle_status eq "Employed").
Create access reviews when users join specific departments or teams
Fallback Reviewers
No
Reviewers to assign if automatic assignment fails
Due Date Offset
No
Time from certification start when reviews are due
Creation Mode
No
Create and Publish (starts immediately) or Create Draft (requires manual publishing)
Reviewers receive notifications to certify or revoke the identified access
account_name
display_full_name
{display_full_name}
distinguished_name
first_name, last_name
CN={first_name} {last_name},OU=Minnetonka,OU=US,OU=Evergreen Staff,DC=evergreentrucks,DC=local
user_principal_name
username
{username}@evergreentrucks.com
username
account_name
display_full_name
{display_full_name}
distinguished_name
first_name, last_name
CN={first_name} {last_name},OU=Evergreen Termination,OU=Evergreen Staff,DC=evergreentrucks,DC=local
primary_group_dn
-
CN=Terminated Users,OU=Evergreen Groups,DC=evergreentrucks,DC=local
Create or update user accounts in target systems
Assign or remove group memberships, roles
Generate email addresses via email providers
Disable accounts while preserving audit trails
Permanently remove accounts (databases, cleanup)
Execute ServiceNow-specific operations
Entity Type
The data source and type of identity to sync (e.g., Okta User, Azure AD User)
Create Allowed
Whether new identities can be created if not found
Attribute Sync
Keep attributes in sync even after initial creation
Common Synced Attributes
Shared transformation rules across multiple sync actions
Action Synced Attributes
Create, format, and modify the specified target attributes. See Transformers for more details
Access Profiles
Static Access Profiles to assign to the identity. See Access Profiles for more details about managing birthright entitlements
Dynamic Access Profiles
Attribute transformer expressions that resolve to Access Profile names at runtime based on user attributes. See Dynamic Access Profiles for details
Remove Existing Relationships
Whether to remove current relationships created during other Lifecycle Management actions before adding new ones
Entity Type
The type of identity to create an email
Action Synced Attributes
Define how email attributes should be formatted. See Transformers for more details
Sync Action Name
Reference to sync action for conflict resolution
Entity Type
The data source and target entity type to disable, delete, or lock
Remove All Relationships
Whether to remove existing group memberships and role assignments
Relationships to Create
Access Profile to apply after deprovisioning (e.g., move to specific groups)
Common Synced Attributes
Shared transformation rules across multiple deprovisioning actions
Action Synced Attributes
Target attributes to create, format, and modify for de-provisioned entities
Entity Type
The data source and target entity type to permanently delete
Unique Identifiers
Attributes used to locate the user account for deletion (e.g., username, email, or account ID)
Attribute Transformers
Define how to identify and match the user for deletion. See Transformers for more details
Common Synced Attributes
Shared transformation rules across multiple delete actions
Sync Action Names
Reference to previous Sync Identities actions for unique identifier resolution
Entity Type
The target integration and entity type to operate on
Table
(ServiceNow) The table name to insert records into (e.g., incident, sc_request, u_custom_table)
Attribute Transformers
Map source attributes to target table fields. See Transformers for more details
ServiceNow
Insert records into any ServiceNow table
Entity Type
The type of entity to update with email information
Duration in seconds
Number of seconds to pause the workflow
Webhook URL
Target REST endpoint URL. Supports variable substitution using {attribute_name} syntax in URL path and query parameters
HTTP Method
Request method: GET, POST, PUT, PATCH, DELETE, HEAD, or OPTIONS. Methods are case-insensitive and automatically converted to uppercase. POST, PUT, and PATCH require a JSON payload
Authorization Header
Required authentication header (e.g., Bearer <token>, X-API-Key: <key>, or custom authorization format)
JSON Payload
Request body in JSON format. Supports transformer syntax for attribute substitution: {"user": "{name}", "email": "{email}"}
Timeout
Maximum wait time in seconds for the request to complete (default: 60 seconds)
Only Send if Any Upstream Changes
When enabled, the request is only executed if a previous action in the workflow modified or created resources
Webhook URL
https://{your-okta-domain}/api/v1/users/{employee_id | FROM_ENTITY_ATTRIBUTE,"OktaUser","employee_id","login"}/lifecycle/suspend
Notification Type
Select Email, Webhook, or Service Now
Email Template
(Email notifications only) Select the template to use for the notification. Choose "Default template" to use the event-specific template, or select a custom email template. See Custom Email Templates for details
Recipients
(Email notifications only) Specify email addresses to receive the notification, or select user attributes containing email addresses
Notification Settings
(Action notification settings) Configure email alerts on action success and/or failure for the specified recipients
Webhook Configuration
Configure webhooks to trigger on success and/or failure by specifying the URL to send the payload and optional auth header for the POST request
Veza Action
Select an existing Veza Action for pre-configured webhook or email settings
Entity Type
The target integration and entity type (e.g., AD User, Okta User)
Certification Creation Plan
Defines the review scope, certification criteria, and reviewer assignment. See configuration details below
Access Workflow
Yes
The Access Workflow ID where the certification is created
Name
No
Name of the certification. Supports attribute transformers (e.g., Review for {name}). Custom names appear in Dry Run results
Data Source
Yes
Specifies which data to use: Current Data, Most Recent Snapshot, or a specific snapshot
Reviewer Assignment
No
CREATE_ACCESS_REVIEW_QUEUED
Immediate
Sent when the review creation is queued
CREATE_ACCESS_REVIEW
Asynchronous
Sent when the review campaign is created
{username}@evergreentrucks.com
Primary level reviewer assignment (manager, resource owners, or designated reviewers)
Guide for implementing automated user lifecycle management across Workday, Okta, and Active Directory
A well-designed identity Lifecycle Management solution automates the provisioning, synchronization of attributes and metadata, and deprovisioning of user accounts across your application and systems ecosystem.
This guide demonstrates how to implement a worker (employees and contractors) Lifecycle Management solution using Workday as the source of identity with downstream user account provisioning and synchronization platforms of Okta and Active Directory (AD). This represents a common enterprise architecture where worker records originate in an HR system and are provisioned to identity and access management systems, while maintaining a seamless, secure, and compliant user lifecycle process.
The following diagram shows the complete identity provisioning and synchronization architecture from Workday, a human capital management platform, to Okta and Active Directory, which are identity management systems:
The "Joiner Mover Leaver" (JML) process is a framework for managing users' employment lifecycle access within an organization. Provisioning access begins with onboarding new employees (Joiners), then managing internal transitions (Movers), and finally offboarding departing employees (Leavers).
Lifecycle Management is based on the JML paradigm, where Workday is the authoritative source of identity, which is monitored for the status of the worker based on attributes in their record to determine whether the user is a joiner, mover, or leaver.
The joiner, mover, leaver (JML) process flows through the systems as follows:
Before starting this implementation, ensure you have:
Completed at least one successful extraction for each integration
First, create Access Profiles that define which application entitlements a group of users will be assigned:
Go to Lifecycle Management > Access Profiles
Click Create Access Profile
Configure a profile for each department or role:
Create additional profiles as needed based on your organizational structure.
Next, create a Lifecycle Management policy using Workday as the source of identity:
Navigate to Lifecycle Management > Policies
Click Create Policy
Configure the policy:
Now add a workflow for new employee onboarding:
Edit your Workday Employee Lifecycle policy
Click Add Workflow
Configure the workflow:
Add a workflow for handling employee role changes:
Edit your Workday Employee Lifecycle policy
Click Add Workflow
Configure the workflow:
Finally, add a workflow for employee termination:
Edit your Workday Employee Lifecycle policy
Click Add Workflow
Configure the workflow:
After configuring your workflows for joiners, movers, and leavers, you can test your policy using Simulated Dry Runs to check the expected actions when executed.
Another approach to test your policy is to create draft versions. You can make changes to your policy as an iterative draft until you are satisfied with the results. You can then publish the final version and enable it.
As a final verification, make modifications to the Workday application to test your policy's expected performance. Ensure that the downstream applications, Okta and Active Directory, are correct with the modifications.
Select Workday Employee Lifecycle policy.
Click the overflow menu (three dots icon) at the top of the page.
Select Perform Dry Run.
Select Workday Employee Lifecycle policy.
Click Create Draft.
Select Edit Workflow.
In your Workday application, update the source of identity to test your policy. The following is a list of suggested changes:
Change the employee’s employee type (ie, from regular to contractor)
Verify account creation in Okta and Active Directory
Change the employee's department and verify group membership updates
Identity Synchronization is implemented during Lifecycle Management provisioning workflows. It is used to prevent provisioning errors due to duplication of username and/or email address. It supports robust identity sync across downstream applications (Okta and Active Directory) with different naming constraints or enforces unique identifiers.
Use Identity Synchronization if your target system already has an identity with a given attribute (e.g., a username or email is already in use).
In the Policy page, select your policy, Workday Employee Lifecycle policy.
Select Policy Settings.
Scroll down to Advanced Settings.
Synchronizes employee records to Okta user accounts, creating and updating user profiles with mapped worker attributes from Workday.
Configuration:
Description: Synchronizes identities to Okta
Target: OktaUser
Create Allowed: Yes
All Employees
Assigns "All Okta Employee Access" profile
Does not remove existing relationships
US Developers
Condition: wd_location eq "US" and department eq "developer"
Assigns developer-specific access profiles
Does not remove existing relationships
Creates and updates on-premises Active Directory accounts with location-specific group assignments and standardized naming conventions for different employee categories.
Configuration:
Description: Synchronizes identities to Active Directory
Target: ActiveDirectoryUser
Create Allowed: Yes
US Location
Condition: work_location eq "US"
Assigns US Groups
Removes existing relationships
Executive Group
Condition: employee_group eq "Executive"
Assigns the Executive Employee group
Removes existing relationships
China Location
Condition: work_location eq "China"
Assigns China Groups
Removes existing relationships
Defines the procedures for safely removing access when employees leave the organization, including specific handling for each identity provider.
Handles employee offboarding in Okta by disabling accounts while preserving access history and configurations.
Configuration:
Description: Disables identities in Okta
Target: OktaUser
Remove Relationships: No
Controls the offboarding process for on-premises Active Directory, including moving accounts to a terminated user's organizational unit.
Configuration:
Description: Disables identities in Active Directory
Target: ActiveDirectoryUser
Remove Relationships: No
Below are more detailed examples of joiner, mover, and leaver scenarios that you can implement using Veza's Lifecycle Management.
To handle edge cases where standard attribute formatting is not effective, use to define special exceptions. For example:
Contractors vs. Employees: Use different username formats based on employment type
Username Conflicts: Configure fallback formatters for handling duplicate usernames
Location-Specific Naming: Apply different naming conventions based on location or region
Ensure your email addresses remain consistent by configuring email write-back to Workday:
In your Joiner workflow, after the Sync Identities actions, add:
Add Action > Create Email
Configure for your email system
This ensures the email created in your systems is written back to Workday as the source of truth.
When implementing conditional actions, consider these patterns for robust lifecycle management:
Monitor your lifecycle management workflows using the :
Navigate to Lifecycle Management > Activity Log
Filter by policy name to see all actions for your Workday policy
Look for failed actions and investigate error messages
If usernames are already taken in target systems:
Configure to handle conflicts
Use employee ID or other unique identifiers as backup username formats
If required attributes are missing from Workday:
Use DEFAULT transformers to provide fallback values
Configure conditional logic to handle missing data gracefully
If group assignments fail:
Verify that referenced groups exist in target systems
Check that service accounts have sufficient permissions
Use conditional logic to assign groups only when they exist
URL: https://api.example.com/users/{email}/provision?dept={department}
Payload: {"name": "{first_name} {last_name}", "role": "{job_title | UPPER}"}{
"result": {
"user_id": "12345",
"display_name": "John Doe"
}
}lifecycle_status eq "Leave" or lifecycle_status eq "Parental Leave" or lifecycle_status eq "Garden Leave"https://{your-okta-domain}/api/v1/users/{employee_id | FROM_ENTITY_ATTRIBUTE,"OktaUser","employee_id","login"}/lifecycle/unsuspendNote: An extraction is the metadata ingestion process that pulls identity and permission data from target systems into Veza, enabling it to act across access policies, governance, and provisioning workflows.
Administrative access to Veza to create Lifecycle Management policies
Source of Identity: Workday
Data Source: Your Workday integration
Entity Type: Workday Worker
Click Create Policy to save the basic configuration
Condition: is_active eq true AND hire_date eq "2025-08-04T00:00:00" This condition is triggered when, in Workday, the employee is active and a defined hiring date is "2025-08-04T00:00:00". Therefore, any active employee hired on or after the specified date is considered a joiner.
Continuous Sync: Enabled Continuous Sync is enabled, allowing updates to a user's source attributes—such as email, department, manager, or role—to be automatically synchronized to the target application on an ongoing basis after the user is provisioned.
Add actions to the workflow as detailed in the Configuration Reference section.
Condition: is_active eq true AND first_name eq “Sarah” AND last_name eq “Johnson” AND position eq “Regional Sales Manager”
Continuous Sync: Enabled
Add actions similar to the Joiner workflow, but ensure Remove Existing Relationships is enabled in the Manage Relationships actions to update group memberships when departments change When a user’s role changes (mover), you often need to revoke existing entitlements—like group memberships, role assignments, and permission set grants—not just avoid adding new ones. Enabling Remove Existing Relationships ensures that previously granted relationships are actively removed to prevent privilege creep or orphaned access.
Condition: is_active eq false OR termination_date eq "2025-08-08T00:00:00"
This condition is triggered when the employee is no longer active and a defined termination date is "2025-08-08T00:00:00". Therefore, any non-active employee terminated on or after the specified date is considered a leaver.
Add deprovisioning actions, such as Deprovision Okta Identities and Deprovision AD Identities
The Dry Run takes seconds to execute. Click Show results.
Ensure that Okta and Active Directory contain the correct identity information for the employee.
Click Save Workflow. The workflow is now a draft version.
Continue to iterate on changes to the workflow until it is ready.
Click Publish when the policy performs satisfactorily.
Click Settings at the top of the page.
Click Policy Settings.
Enable the Enable Policy Draft Mode radio button.
In the Policy page, select your policy and click Actions.
In the Actions menu, select Start.
country_code
{work_location}
Yes
login
{username}@sigmacorpx.com
No
Common transformer
display_name
{display_full_name}
Yes
given_name
{first_name}
Yes
sur_name
{last_name}
Yes
country_code
{work_location}
Yes
job_title
{job_title}
Yes
primary_group_dn
CN=Domain Users,CN=Users,DC=evergreentrucks,DC=local
Yes
account_name
{display_full_name}
No
Common transformer
Logout User: No
Remove Personal Devices: No
Add Action > Write Back Email
Integration: Your Workday integration
Entity Type: Workday Worker
{username}@sigmacorpx.com
Yes
first_name
{first_name}
Yes
last_name
{last_name}
Yes
distinguished_name
CN={first_name} {last_name},OU=Minnetonka,OU=US,OU=Evergreen Staff,DC=evergreentrucks,DC=local
Yes
See Microsoft Lightweight Directory Access Protocol for more information on distinguished_name.
user_principal_name
{username}@evergreentrucks.com
Yes
{username}@evergreentrucks.com
Yes
distinguished_name
CN={first_name} {last_name},OU=Evergreen Termination,OU=Evergreen Staff,DC=evergreentrucks,DC=local
No
primary_group_dn
CN=Terminated Users,OU=Evergreen Groups,DC=evergreentrucks,DC=local
No


Name: Engineering Department Access
Profile Type: Application Entitlements
Description: Standard access for Engineering department employees
Label: Developers
Entitlements:
- Active Directory Group: Engineering
- Okta Group: EngineeringName: Marketing Department Access
Profile Type: Application Entitlements
Description: Standard access for Marketing department employees
Entitlements:
- Active Directory Group: Marketing
- Okta Group: MarketingTrigger: New employee record created in Workday with status="Active" and worker_type="Full_Time"
Actions:
1. Create Okta user with attributes from Workday transformer
2. Assign to department-specific groups in Okta
3. Create AD user with attributes from Workday transformer
4. Add to appropriate security groups in AD based on job role
5. Send welcome email with account informationTrigger: New worker record created in Workday with status="Active" and worker_type="Contractor"
Actions:
1. Create Okta user with limited attribute set and "Contractor-" prefix in username
2. Assign to contractor-specific groups in Okta
3. Create time-limited AD account with expiration date set to contract end date
4. Add to contractor security groups with restricted access
5. Send welcome email with temporary password and access instructionsTrigger: Employee department changed in Workday
Actions:
1. Update department attribute in Okta and AD
2. Remove previous department group memberships in both systems
3. Add new department group memberships in both systems
4. Update OU placement in AD
5. Send notification to new managerTrigger: Employee job level changed to include management flag
Actions:
1. Update job title in all systems
2. Add to manager-specific groups in Okta and AD
3. Add to approval workflows in relevant systems
4. Send manager training notificationTrigger: Employee status changed to "Terminated" in Workday
Actions:
1. Disable user in Okta and AD (do not delete)
2. Remove all group memberships
3. Revoke all application access
4. Move AD account to "Terminated Users" OU
5. Generate access termination report for complianceTrigger: Employee terminated with reason="Security Risk"
Actions:
1. Immediately disable all accounts (high priority)
2. Force logout from all active sessions
3. Reset all passwords
4. Remove all access rights and group memberships
5. Generate security incident report# Okta User Attributes
login: {worker_id}@company.com
email: {work_email | DEFAULT, "{worker_id}@company.com"}
first_name: {first_name}
last_name: {last_name}
display_name: {first_name} {last_name}
department: {department_name}
title: {job_title}
manager_id: {manager_worker_id}@company.com
# Handle different user types
user_type: {worker_type | LOWERCASE | REPLACE, "full_time", "Employee" | REPLACE, "contractor", "Contractor" | DEFAULT, "Employee"}
employee_id: {employee_id}
# Custom attributes
customField1: {location_code}
customField2: {hire_date | DATE_FORMAT, "yyyy-MM-dd"}
customField3: {termination_date | DATE_FORMAT, "yyyy-MM-dd" | DEFAULT, ""}# AD User Attributes
account_name: {worker_id}
# Build distinguished name based on employment type and department
distinguished_name: {worker_type | EQUALS, "contractor" | IF_TRUE, "CN={first_name} {last_name},OU=Contractors,OU={department_name},DC=company,DC=local" | IF_FALSE, "CN={first_name} {last_name},OU=Employees,OU={department_name},DC=company,DC=local"}
user_principal_name: {worker_id}@company.local
email: {work_email | DEFAULT, "{worker_id}@company.com"}
display_name: {first_name} {last_name}
given_name: {first_name}
sur_name: {last_name}
department: {department_name}
job_title: {job_title}
description: {job_title} - {department_name}
company: Company Inc.
# Set account expiration for contractors
account_expires: {worker_type | EQUALS, "contractor" | IF_TRUE, {contract_end_date} | IF_FALSE, ""}
# Custom attributes
extension_attribute_1: {cost_center}
extension_attribute_2: {business_unit}
extension_attribute_3: {hire_date | DATE_FORMAT, "yyyy-MM-dd"}
extension_attribute_4: {employee_id}# US-based employees
work_location eq "US"
# International employees requiring different treatment
work_location eq "China" OR work_location eq "EMEA"
# Remote workers
work_location eq "Remote" OR office_location contains "Remote"# Technical roles requiring elevated access
department eq "Engineering" OR department eq "DevOps" OR job_title contains "Developer"
# Management roles
job_level eq "Manager" OR job_level eq "Director" OR job_level eq "VP"
# Sensitive roles requiring additional security
department eq "Finance" OR department eq "Legal" OR department eq "HR"# Full-time employees
worker_type eq "Full_Time" AND status eq "Active"
# Contractors with time-limited access
worker_type eq "Contractor" AND contract_end_date is not null
# Temporary workers
worker_type eq "Temporary" OR employment_status eq "Temp"Configuring SCIM integrations for Veza Lifecycle Management.
The Veza SCIM integration enables automated user lifecycle management for any application that supports the System for Cross-domain Identity Management (SCIM) protocol. SCIM provides a standardized approach for provisioning, updating, and deprovisioning users and groups across diverse applications including Atlassian products, Egnyte, Sigma Computing, and many others.
Direct SCIM vs. OAA SCIM Integration
This guide covers direct SCIM integrations where Veza connects directly to an application's SCIM endpoints. For custom applications built with the Open Authorization API (OAA) that expose SCIM endpoints, see .
Use direct SCIM when connecting to standard SaaS applications with native SCIM support, and you only need user and group provisioning without complex entity modeling.
You can use OAA SCIM for integrating custom or home-grown applications via OAA, and need comprehensive visibility beyond users and groups (permissions, resources, etc.)
This document includes steps to enable SCIM integrations for use in Lifecycle Management, along with supported actions and notes. See for more details.
You will need administrative access in Veza to configure the integration and appropriate permissions in the target SCIM application.
Ensure you have an existing in Veza or add a new one for use with Lifecycle Management.
Verify your SCIM integration has completed at least one successful extraction
Important: SCIM applications have varying permission models. Consult your specific application's documentation for the exact scopes or permissions required for SCIM operations.
To enable the integration:
In Veza, go to the Integrations overview
Search for or create a SCIM integration
Check the box to Enable usage for Lifecycle Management
Configure the extraction schedule to ensure your SCIM data remains current:
Go to Veza Administration > System Settings
In Pipeline > Extraction Interval, set your preferred interval
Optionally, set a custom override for your SCIM integration in the Active Overrides section
To verify the health of the Lifecycle Management data source:
Use the main Veza navigation menu to open the Lifecycle Management > Integrations page or the Veza Integrations overview
Search for the integration and click the name to view details
In the Properties panel, click the magnifying glass icon under Lifecycle Management Enabled
SCIM integrations can be targets for identity management actions, receiving provisioning commands from Veza based on changes in external sources of truth or as part of automated workflows.
The integration supports the following lifecycle management :
Primary action for user management (creating or updating users):
Username (user_name) is required and serves as the unique identifier
Email addresses are managed through the SCIM emails array
User activation/deactivation is controlled via the active attribute
Veza supports comprehensive SCIM 2.0 user attributes for both read-only data extraction (Access Graph) and bidirectional synchronization (Lifecycle Management). The tables below indicate which attributes support LCM synchronization (✅) versus read-only extraction (📖).
Veza supports all standard SCIM 2.0 core user attributes, organized by functional category:
Identity & Authentication
Veza supports the SCIM Enterprise User Extension schema (urn:ietf:params:scim:schemas:extension:enterprise:2.0:User) for both extraction and LCM synchronization:
Veza automatically discovers and extracts all custom vendor-specific SCIM extension attributes for read-only purposes:
Extraction Capabilities:
Veza calls the SCIM /Schemas endpoint to discover all available schemas (requires SCIM Extension Schemas enabled in integration configuration)
Extension attributes must be referenced by their normalized names in LCM attribute transformers.
Core SCIM attributes use simplified names:
user_name, display_name, email, title, department, division, etc.
Extension attributes require full normalized names:
Example: Enterprise Extension Attributes
Example: Custom Vendor Extensions
Group membership management with full add/remove capabilities:
Add users to groups for role-based access control
Remove users from groups during role changes or de-provisioning
Support for nested group structures where the SCIM provider allows
When a user is deprovisioned:
User account is deactivated (sets active: false)
Group memberships are automatically removed
Account can be reactivated if needed
Note: Some SCIM implementations support hard deletion while others only support deactivation. The SCIM integration uses deactivation by default for data preservation.
Entity Types: SCIM Groups
Assignee Types: SCIM Users
Supports Relationship Removal: Yes
Within SCIM applications, groups can be associated with:
Application-specific permissions and roles
Resource access controls
Team or organizational structures
Veza supports all standard SCIM 2.0 group attributes for both extraction and LCM operations:
The following applications are validated to work with Veza's SCIM Lifecycle Management:
Atlassian Products (Jira Cloud, Confluence Cloud, Bitbucket Cloud)
SCIM Endpoint: https://{domain}.atlassian.net/scim/directory/{directory-id}
Full user and group provisioning support
Fivetran
SCIM Endpoint: https://api.fivetran.com/scim/v2
User and group provisioning
Twingate
SCIM Endpoint: https://{domain}.twingate.com/api/scim/v2
User provisioning and group assignment
When a new employee joins (triggered by HR system changes):
Identity Sync: Create user account in SCIM application with basic attributes
Email Setup: Configure primary email and secondary contacts
Group Assignment: Add user to department and role-based groups automatically
When an employee changes roles or departments:
Attribute Update: Sync new job title, department, and manager information
Group Reassignment: Remove old role groups, add new role groups
Access Review: Verify appropriate access levels for new position
When an employee leaves the organization:
Account Deactivation: Set user status to inactive in SCIM application
Group Removal: Remove all group memberships and access rights
Data Preservation: Maintain account record for audit and compliance
For large-scale provisioning operations:
Batch Processing: Create multiple users efficiently through SCIM bulk operations
Group Pre-creation: Establish organizational groups before user assignment
Validation: Verify all users are created with correct attributes and memberships
Customizing email notifications and Webhook configuration for Lifecycle Management events and Access Requests.
Administrators can customize email notifications sent during Lifecycle Management and Access Request workflows. These emails can include instructions, unique branding, and placeholders for metadata specific to the event (such as entity names, action types, or request details). Each notification type (usage) can have its own customized template.
Notification templates support HTML and CSS. They can include links to external images or you can upload small files to Veza. This document includes steps to configure templates in Veza using the notifications API, and a reference for event types, default templates, and supported placeholders.
Read permissions: scim:read or equivalent for user and group discovery
Write permissions: scim:write or equivalent for provisioning operations
Specific endpoints: Access to /Users and /Groups endpoints
Schema endpoint (optional): Access to /Schemas for extension attribute discovery
For Enterprise Extension attributes: Enable SCIM Extension Schemas in your SCIM integration configuration to extract and synchronize attributes like department, division, employeeNumber, and manager.
Custom attributes are mapped according to SCIM schema extensions
userName
Yes
String
✅
Primary login identifier, unique across the system
id
No
String
✅
SCIM system identifier (auto-generated, read-only after creation)
externalId
No
String
✅
External system identifier for cross-system identity mapping
active
No
Boolean
✅
User account status (controls activation/deactivation)
Contact Information
emails
No
Array
✅
Email addresses (can include multiple with type indicators)
phoneNumbers
No
Array
✅
Phone numbers (supports multiple with type indicators)
Personal Information
displayName
No
String
✅
User's display name (full name for UI presentation)
name.givenName
No
String
✅
First name
Professional Information
title
No
String
✅
Job title or professional role
userType
No
String
✅
User classification (e.g., Employee, Contractor)
System Metadata
meta.created
No
DateTime
📖
Account creation timestamp (read-only)
meta.lastModified
No
DateTime
📖
Last modification timestamp (read-only)
Multi-valued Attributes: Attributes like emails, phoneNumbers, and addresses support multiple values with type indicators (e.g., work, home, other). Veza supports full create, update, and delete operations for these multi-valued fields.
✅
Organization's employee identifier
costCenter
String
✅
Cost center assignment
organization
String
✅
Organization name
division
String
✅
Division within the organization
department
String
✅
Department assignment
manager
Complex
✅
Manager reference (contains value, $ref, displayName)
To extract and synchronize Enterprise Extension attributes, you must enable SCIM Extension Schemas in your SCIM integration configuration. This option enables Veza to call the /Schemas endpoint and discover extension attributes.
Custom extension schemas are automatically identified and extracted
Extension attributes appear in the Veza Access Graph for search and analysis
All data types are supported (string, boolean, number, dateTime, complex)
LCM Synchronization:
Custom vendor extensions can be synchronized through LCM workflows when SCIM Extension Schemas is enabled by referencing the normalized attribute name (visible as a custom property in Access Graph).
Veza automatically maps the normalized name back to the proper SCIM extension structure using the reverse index
For example, targeting scim_extension_vendor_customfield in an attribute transformer will transmit the corresponding SCIM extension via the API.
Example Custom Extensions:
Vendor-specific user attributes (e.g., Atlassian organization roles)
Custom application properties
Industry-specific fields (e.g., healthcare credentials, financial certifications)
Custom extension synchronization requires SCIM Extension Schemas to be enabled. This builds an index that maps normalized attribute names to their original SCIM schema structure.
✅
Group display name (unique identifier)
id
No
String
✅
SCIM system identifier (auto-generated, read-only after creation)
externalId
No
String
✅
External system identifier for cross-system group mapping
groupType
No
String
✅
Group classification or category
description
No
String
✅
Group purpose or description
members
No
Array
✅
Group members (contains user references with value and display properties)
Group Membership Management: Veza supports both adding and removing members from groups through the Manage Relationships action. The members attribute contains an array of user references, each with a value (user ID) and optional display (user's display name) property.
Egnyte
SCIM Endpoint: https://{domain}.egnyte.com/pubapi/scim/v2
User provisioning and group management
Sigma Computing
SCIM Endpoint: https://aws-api.sigmacomputing.com/scim/v2
User lifecycle and team assignment
Harness
SCIM Endpoint: https://app.harness.io/gateway/ng/api/scim/account/{accountid}
User management and role assignment
Zapier
SCIM Endpoint: https://zapier.com/scim/v2
User provisioning and team management
ThousandEyes
SCIM Endpoint: https://api.thousandeyes.com/scim
User management (groups via custom implementation)
SYNC_IDENTITIES
Synchronizes identity attributes between systems, with options to create new identities and update existing ones
✅
MANAGE_RELATIONSHIPS
Controls entitlements such as group memberships and role assignments for identities
✅
DEPROVISION_IDENTITY
Safely removes or disables access for identities
✅
CREATE_ENTITLEMENT
Creates entitlements such as groups
employeeNumber
displayName
Yes
✅
String
String
Template Management: Currently, notification templates can only be managed via the Notification Templates API. Template management through the Veza UI is not yet available.
Access Reviews Notification Templates: For access review workflow notifications, see Access Reviews Notification Templates.
In addition to event-specific templates, you can create custom email templates that are not tied to specific lifecycle events. These reusable templates allow you to define notification content once and use it across Send Notification actions and action notification settings. Custom email templates are:
Reusable: Single template for multiple workflows and actions
Event-independent: Not associated with a specific lifecycle event type
Flexible: Can be used in both Send Notification actions and action notification settings (on_success/on_failure)
Standard placeholder support: Supports all the same placeholders as event-based templates
To create a custom email template:
Navigate to Lifecycle Management > Settings > Notifications
Click Create Template
Select For Custom Email (as opposed to "For Event")
Define your template name, subject, and body using HTML and placeholders
Save the template
To use a custom template, select it when configuring the Send Notification action, or in Action Notification Settings:
Send Notification action: Choose from the "Select Email Template" dropdown when configuring the action
Action Notification Settings: Select the template for on_success or on_failure email notifications on any action
When you select "Default template" in these dropdowns, the system uses the event-based template appropriate for the event. When you select a custom template, that template is used regardless of the specific event being processed.
Custom templates support all standard placeholders documented in the Placeholders section. The available values depend on the context in which the template is used (e.g., action notifications have action-related placeholders, event notifications have event-related placeholders).
The system provides built-in templates for all Lifecycle Management and Access Request events. These templates use placeholders that are automatically replaced with actual values when notifications are sent.
Generic Failure Template
When specific event templates aren't available or when events fail, the system uses a generic failure template:
Subject: Lifecycle job {{EVENT_TYPE}} has failed
Body:
See Default Template Content for all default messages.
Lifecycle Management Events
Each template you create is associated with a specific notification event (referred to as usage in the API). The following event types are available for Lifecycle Management workflows, organized by functional area:
Safety Limit Reached
LIFECYCLE_MANAGEMENT_SAFETY_LIMIT_REACHED
Sent when a hard safety limit is reached during processing
Predictive Safety Limit Exceeded
LIFECYCLE_MANAGEMENT_PREDICTED_SAFETY_LIMIT_EXCEEDED
Sent when a predictive safety limit blocks changes before processing
Veza provides built-in email templates for all event types, organized by functional area below. These templates include standard placeholders and can be customized or replaced with your own templates.
CREATE_IDENTITY
Subject: New Hire Notification: {{ENTITY_TYPE}} account created
Body:
CREATE_GUEST_ACCOUNT
Subject: New {{ENTITY_TYPE}} Guest Account Created: {{ENTITY_NAME}}
Body:
SYNC_IDENTITY
Subject: Sync Identity Notification: {{ENTITY_TYPE}} account synced
Body:
DELETE_IDENTITY
Subject: Identity Deleted Notification: {{ENTITY_TYPE}} has an account deleted
Body:
DISABLE_IDENTITY
Subject: Identity Disabled Notification: {{ENTITY_TYPE}} has an account disabled
Body:
ADD_RELATIONSHIP
Subject: New Relationship Added Notification: {{ENTITY_TYPE}} has an account with new relationship to a {{RELATIONSHIP_ENTITY_TYPE}}
Body:
REMOVE_RELATIONSHIP
Subject: Relationship Removed Notification: {{ENTITY_TYPE}} has an account whose relationship was remove from a {{RELATIONSHIP_ENTITY_TYPE}}
Body:
CREATE_ENTITLEMENT
Subject: Create entitlement notification: an entry of {{ENTITY_TYPE}} is created
Body:
RENAME_ENTITLEMENT
Subject: Rename entitlement notification: an entry of {{ENTITY_TYPE}} is renamed
Body:
SYNC_ENTITLEMENT
Subject: Sync entitlement notification: an entry of {{ENTITY_TYPE}} is renamed
Body:
ACCESS_REQUEST_COMPLETE
Subject: Access Request {{ACCESS_REQUEST_TYPE}} for {{ACCESS_REQUEST_ENTITY_NAME}} has {{SUCCEED_OR_FAILED}}
Body:
ACCESS_REQUEST_CREATED
Subject: {{ACCESS_REQUEST_SOURCE_TYPE}} for {{ACCESS_REQUEST_ENTITY_NAME}} is {{ACCESS_REQUEST_STATE}}
Body:
ACCESS_REQUEST_FAILED
Subject: {{ACCESS_REQUEST_SOURCE_TYPE}} for {{ACCESS_REQUEST_ENTITY_NAME}} is failed
Body:
ACCESS_REQUEST_STATE_CHANGED
Subject: {{ACCESS_REQUEST_SOURCE_TYPE}} for {{ACCESS_REQUEST_ENTITY_NAME}} is {{ACCESS_REQUEST_STATE}}
Body:
ACCESS_REQUEST_APPROVER_ASSIGNED
Subject: {{ACCESS_REQUEST_SOURCE_TYPE}} for {{ACCESS_REQUEST_ENTITY_NAME}} in {{ACCESS_REQUEST_STATE}} as new assigned approvers
Body:
ACTION_FAILED
Subject: Action Failed: {{ACTION_NAME}} for identity {{IDENTITY_NAME}}
Body:
WORKFLOW_TASK_FAILED
Subject: Workflow Failed: {{WORKFLOW_NAME}} for identity {{IDENTITY_NAME}}
Body:
EXTRACTION_EVENT_FAILED
Subject: Lifecycle Management extraction processing failed for {{DATASOURCE_ID}}
Body:
SAFETY_LIMIT_REACHED (Hard Limit)
Subject: Safety Limit Reached Notification: Policy {{POLICY_NAME}} has stopped processing identity changes
Body:
PREDICTED_SAFETY_LIMIT_EXCEEDED (Predictive Safety Limit)
Subject: Predictive Safety Limit Exceeded: Policy {{POLICY_NAME}} has blocked changes before processing
Body:
WORKFLOW_PREDICTED_SAFETY_LIMIT_EXCEEDED (Workflow-Level Predictive Safety Limit)
Subject: Workflow Predictive Safety Limit Exceeded: A workflow in policy {{POLICY_NAME}} has blocked changes before processing
Body:
CUSTOM_ACTION
Subject: New Custom Action Notification: {{ENTITY_TYPE}} has performed a custom action
Body:
From the Veza UI, you can add images directly through the "Add images" option. These will be automatically encoded and included in your template.
Image Requirements: For API-based template management, small images under 64kb can be attached when configuring a template. The image must be base64-encoded and specified in the attachments field of the API request.
To use an attachment you have uploaded in a template, specify it by attachment.name, for example:
To embed high-resolution images in your templates, you should serve the content from a public URL, and use HTML to link and style it.
Use placeholders to include dynamic information in templates, such as entity names, action types, timestamps, and other event metadata. Placeholders are automatically replaced with actual values when notifications are sent.
Placeholder Case Sensitivity: Placeholders are case-sensitive and must match the exact casing shown in the documentation. For example, {{ENTITY_TYPE}} will work, but {{entity_type}} or {{EntityType}} will not be replaced unless those exact attribute names exist in your data.
Veza notification templates support two types of placeholders:
1. Static Placeholders (Predefined)
These are uppercase constants documented in the tables below (e.g., {{ENTITY_TYPE}}, {{ENTITY_NAME}}). They are replaced first during template processing and work with all notification templates.
Example:
2. Dynamic Attribute Placeholders
You can also reference any attribute from the entities being processed using two formats:
Untyped format: {{attribute_name}} - References an attribute by name alone
Typed format: {{EntityType.attribute_name}} - References an attribute from a specific entity type
The attribute name must exactly match the casing used by your integration. For example:
If your integration provides an attribute named email, use {{email}}
If it provides Email, use {{Email}}
If it provides employee_id, use {{employee_id}}
Examples:
When to Use Typed Format: Use {{EntityType.attribute}} format when your workflow processes multiple entity types and you need to reference a specific entity's attributes. For example, if your workflow processes both OktaUser and ActiveDirectoryUser, use {{OktaUser.email}} to specifically reference the Okta user's email address.
The following static placeholders are available in all notification templates:
Placeholder Not Being Replaced?
If a placeholder appears in your notification email instead of being replaced with a value, check the following:
Verify exact casing: Placeholders are case-sensitive
✅ Correct: {{ENTITY_TYPE}}
❌ Wrong: {{entity_type}}, {{EntityType}}, {{Entity_Type}}
Check placeholder format: Ensure proper syntax with double curly braces
✅ Correct: {{ENTITY_NAME}}
❌ Wrong: {ENTITY_NAME}, {{ENTITY_NAME},
Verify attribute exists: For dynamic attributes, confirm the attribute is provided by your integration
Use the typed format to specify the entity type: {{OktaUser.email}}
Check your integration documentation for available attribute names and their casing
Check event context: Some placeholders are only available for specific events
For example, {{LOGIN_PASSWORD}} is only available for password-related events
{{ACCESS_REQUEST_URL}} is only available for Access Request events
Best Practices:
Start with predefined placeholders: Use the documented static placeholders (uppercase) whenever possible
Test templates: Send test notifications to verify placeholder replacement before deploying to production
Document custom attributes: Keep a reference of the attribute names and casing used by your integrations
Use typed format for clarity: When working with multiple entity types, use {{EntityType.attribute}} to avoid ambiguity
Webhook notifications are triggered upon execution of actions during the LCM Policy workflow process. Webhooks inform stakeholders or integrate with external systems of events that are processed within the workflow. Webhook notifications can be optionally configured as their own discrete action in a workflow or as an option when another action is executed.
For example, a webhook is sent to the company's learning management system to initiate online onboarding training once each new hire's Active Directory account is provisioned, following a successful Sync Identity operation.
To create and manage a webhook, perform the following:
Go to Policies and select a policy.
Click Edit Policy.
Click Policy Settings.
Scroll down to Notifications and click Add Notification.
Choose the Webhook notification type.
Choose an event to trigger notifications:
Create Identity
Sync Identity
Choose the status to trigger notifications (when an event is Successful, or On Failure).
Select an Existing Veza Action.
A Veza Action is an integration with functionality for sending data to external systems, enabling downstream processes around Veza alerts, and access to reviewer actions. Use a Veza Action to configure generic webhooks or enable email notifications.
See Veza Actions on how to create and deploy a webhook.
To customize the Webhook setting, perform the following:
In the Webhook URL field, enter the endpoint configured to receive the webhook payload.
In the Webhook Auth Header field, enter the Auth Header if the webhook listener requires authentication.
When configured, webhook requests include an Authorization header containing the credentials specified in the
Click Save.
{
"attribute_name": "urn_ietf_params_scim_schemas_extension_enterprise_2_0_user_department",
"source": "identity_attribute",
"value": "department"
}{
"attribute_name": "urn_scim_schemas_extension_myvendor_1_0_customfield",
"source": "static_value",
"value": "Engineering"
}<html><body>
<br>
<br> Here is the notification that lifecycle job has failed. <br>
Error message: {{EVENT_ERROR_MESSAGE}}<br>
<br>
For reference:
<br> job_id: {{JOB_ID}}<br>
<br> identity_id: {{EVENT_IDENTITY_ID}}
<br> identity_name: {{EVENT_IDENTITY_NAME}}
<br> entity_type: {{ENTITY_TYPE}}
<br> entity_name: {{ENTITY_NAME}}
</body></html><img src="cid:<name_of_attachment>"Hello,
New account created for {{ENTITY_NAME}} with type {{ENTITY_TYPE}}.<!-- Untyped - uses attribute from any entity -->
User email: {{email}}
Department: {{department}}
<!-- Typed - uses attribute from specific entity type -->
Okta email: {{OktaUser.email}}
AD username: {{ActiveDirectoryUser.sAMAccountName}}addresses
No
Array
✅
Physical addresses (supports multiple with type indicators)
ims
No
Array
✅
Instant messaging addresses
photos
No
Array
✅
Photo URLs
name.familyName
No
String
✅
Last name
name.middleName
No
String
✅
Middle name
name.formatted
No
String
✅
Formatted full name
nickName
No
String
✅
User's nickname or informal name
locale
No
String
✅
User's locale preference (e.g., en-US)
timezone
No
String
✅
User's timezone (e.g., America/New_York)
preferredLanguage
No
String
✅
Preferred language code (e.g., en, es)
profileUrl
No
String
✅
URL to user's profile
ENTITY_NAMERemove Relationship
Create Email
Change Password
Delete Identity
Disable Identity
Manage Relationships
Write Back Email
Access Request Complete
Custom Action
Action Failed
Workflow Task Failed
Extraction Event Failed
Create Entitlement
Create Guest Account
Rename Entitlement
Create Access Review
Reset Password
Create Access Review Queued
Safety Limit Reached
Predictive Safety Limit Exceeded
Workflow Predictive Safety Limit Exceeded
Sync Entitlement
Sync Identity
LIFECYCLE_MANAGEMENT_SYNC_IDENTITY
Sent when an identity is synchronized
Sync Identity Failed
LIFECYCLE_MANAGEMENT_SYNC_IDENTITY_FAILED
Sent when identity sync fails
Delete Identity
LIFECYCLE_MANAGEMENT_DELETE_IDENTITY
Sent when an identity is deleted
Delete Identity Failed
LIFECYCLE_MANAGEMENT_DELETE_IDENTITY_FAILED
Sent when identity deletion fails
Disable Identity
LIFECYCLE_MANAGEMENT_DISABLE_IDENTITY
Sent when an identity is disabled
Disable Identity Failed
LIFECYCLE_MANAGEMENT_DISABLE_IDENTITY_FAILED
Sent when identity disabling fails
Create Guest Account
LIFECYCLE_MANAGEMENT_CREATE_GUEST_ACCOUNT
Sent when a guest account is created
Create Guest Account Failed
LIFECYCLE_MANAGEMENT_CREATE_GUEST_ACCOUNT_FAILED
Sent when guest account creation fails
Remove Relationship
LIFECYCLE_MANAGEMENT_REMOVE_RELATIONSHIP
Sent when a relationship is removed
Remove Relationship Failed
LIFECYCLE_MANAGEMENT_REMOVE_RELATIONSHIP_FAILED
Sent when removing relationship fails
Write Back Email
LIFECYCLE_MANAGEMENT_WRITE_BACK_EMAIL
Sent when email is synced back
Write Back Email Failed
LIFECYCLE_MANAGEMENT_WRITE_BACK_EMAIL_FAILED
Sent when email sync back fails
Reset Password
LIFECYCLE_MANAGEMENT_RESET_PASSWORD
Sent when a password is reset
Reset Password Failed
LIFECYCLE_MANAGEMENT_RESET_PASSWORD_FAILED
Sent when password reset fails
Rename Entitlement
LIFECYCLE_MANAGEMENT_RENAME_ENTITLEMENT
Sent when an entitlement is renamed
Rename Entitlement Failed
LIFECYCLE_MANAGEMENT_RENAME_ENTITLEMENT_FAILED
Sent when entitlement renaming fails
Sync Entitlement
LIFECYCLE_MANAGEMENT_SYNC_ENTITLEMENT
Sent when an entitlement is synced
Sync Entitlement Failed
LIFECYCLE_MANAGEMENT_SYNC_ENTITLEMENT_FAILED
Sent when entitlement sync fails
Action Succeed
LIFECYCLE_MANAGEMENT_ACTION_SUCCEED
Sent when an action succeeds
Action Failed
LIFECYCLE_MANAGEMENT_ACTION_FAILED
Sent when an action fails
Workflow Task Failed
LIFECYCLE_MANAGEMENT_WORKFLOW_TASK_FAILED
Sent when a workflow task fails
Extraction Event Failed
LIFECYCLE_MANAGEMENT_EXTRACTION_EVENT_FAILED
Sent when extraction processing fails
Workflow Predictive Safety Limit Exceeded
LIFECYCLE_MANAGEMENT_WORKFLOW_PREDICTED_SAFETY_LIMIT_EXCEEDED
Sent when a workflow-level predictive safety limit blocks changes
Access Request State Changed
LIFECYCLE_MANAGEMENT_ACCESS_REQUEST_STATE_CHANGED
Sent when Access Request state changes
Access Request Approver Assigned
LIFECYCLE_MANAGEMENT_ACCESS_REQUEST_APPROVER_ASSIGNED
Sent when new approvers are assigned
Access Request Succeed
LIFECYCLE_MANAGEMENT_ACCESS_REQUEST_SUCCEED
Sent when Access Request succeeds
Access Request Failed
LIFECYCLE_MANAGEMENT_ACCESS_REQUEST_FAILED
Sent when Access Request fails
The password (for password-related notifications)
{{EMAIL}}
Email address associated with the identity
Status indicator ("succeeded" or "failed")
{{SENT_INVITE}}
Whether an invite was sent (for guest accounts)
Type of the target resource
{{ACCESS_REQUEST_TARGET_NAME}}
Name of the target resource
{{ACCESS_REQUEST_URL}}
URL to view the Access Request details
{{ACCESS_REQUEST_STATE}}
Current state of the Access Request
{{ACCESS_REQUEST_SOURCE_TYPE}}
Source type of the Access Request
Identity ID associated with the event
{{EVENT_IDENTITY_NAME}}
Identity name associated with the event
Workflow identifier
{{DATASOURCE_ID}}
Datasource identifier
<html><body>
Hello,<br>
<br>
Here is the information for your new-hire: {{ENTITY_NAME}} <br>
<br>
Account Type: {{ENTITY_TYPE}} <br>
Login Name: {{LOGIN_NAME}} <br>
<br>
</body></html><html><body>
Hello,<br>
<br>
New {{ENTITY_TYPE}} Guest Account Created <br>
<br>
Account Type: {{ENTITY_TYPE}} <br>
Name: {{ENTITY_NAME}} <br>
Login Name: {{LOGIN_NAME}} <br>
Invite Sent: {{SENT_INVITE}} <br>
<br>
</body></html><html><body>
Hello,<br>
<br>
{{ENTITY_NAME}} attributes have been synced <br>
<br>
Account Type: {{ENTITY_TYPE}} <br>
<br>
</body></html><html><body>
Hello,<br>
<br>
{{ENTITY_NAME}} has been deleted <br>
<br>
Account Type: {{ENTITY_TYPE}} <br>
<br>
</body></html><html><body>
Hello,<br>
<br>
{{ENTITY_NAME}} has been disabled <br>
<br>
Account Type: {{ENTITY_TYPE}} <br>
<br>
</body></html><html><body>
Hello,<br>
<br>
{{ENTITY_NAME}} has a new relationship to {{RELATIONSHIP_ENTITY_NAME}} <br>
<br>
Account Type: {{ENTITY_TYPE}} <br>
Relationship Type: {{RELATIONSHIP_ENTITY_TYPE}} <br>
<br>
</body></html><html><body>
Hello,<br>
<br>
{{ENTITY_NAME}} has a relationship removed from {{RELATIONSHIP_ENTITY_NAME}} <br>
<br>
Account Type: {{ENTITY_TYPE}} <br>
Relationship Type: {{RELATIONSHIP_ENTITY_TYPE}} <br>
<br>
</body></html><html><body>
Hello,<br>
<br>
{{ENTITY_NAME}} has a new email address <br>
<br>
Account Type: {{ENTITY_TYPE}} <br>
Email: {{EMAIL}} <br>
<br>
</body></html><html><body>
Hello,<br>
<br>
{{ENTITY_NAME}} has the newly created email synced back to it <br>
<br>
Account Type: {{ENTITY_TYPE}} <br>
Email: {{EMAIL}} <br>
<br>
</body></html><html><body>
Hello,<br>
<br>
{{ENTITY_NAME}} has a password <br>
<br>
Account Type: {{ENTITY_TYPE}} <br>
Login Name: {{LOGIN_NAME}} <br>
New Password: {{LOGIN_PASSWORD}} <br>
<br>
</body></html><html><body>
Hello,<br>
<br>
{{ENTITY_NAME}} has had their password reset <br>
<br>
Account Type: {{ENTITY_TYPE}} <br>
Login Name: {{LOGIN_NAME}} <br>
Temporary Password: {{LOGIN_PASSWORD}} <br>
<br>
</body></html><html><body>
Hello,<br>
<br>
An entry of {{ENTITY_TYPE}} is created: {{ENTITY_NAME}} <br>
<br>
</body></html><html><body>
Hello,<br>
<br>
An entry of {{ENTITY_TYPE}} is renamed with new name: {{ENTITY_NAME}} <br>
<br>
</body></html><html><body>
Hello,<br>
<br>
An entry of {{ENTITY_TYPE}} has been re-synced with the target system: {{ENTITY_NAME}} <br>
<br>
</body></html><html><body>
Hello,<br>
<br>
{{ACCESS_REQUEST_ENTITY_NAME}} has been {{ACCESS_REQUEST_TYPE}} with: {{ACCESS_REQUEST_TARGET_NAME}}.<br>
<br>
User Type: {{ACCESS_REQUEST_ENTITY_TYPE}} <br>
Target Type: {{ACCESS_REQUEST_TARGET_TYPE}} <br>
<br>
</body></html><html><body>
Hello,<br>
<br>
The request is currently in {{ACCESS_REQUEST_STATE}} state.
<br>
For details: {{ACCESS_REQUEST_URL}}
<br>
</body></html><html><body>
Hello,<br>
<br>
The request is failed, with an error message: {{EVENT_ERROR_MESSAGE}}
<br>
For details: {{ACCESS_REQUEST_URL}}
<br>
</body></html><html><body>
Hello,<br>
<br>
The request is currently in {{ACCESS_REQUEST_STATE}} state.
<br>
For details: {{ACCESS_REQUEST_URL}}
<br>
</body></html><html><body>
Hello,<br>
<br>
The request currently in {{ACCESS_REQUEST_STATE}} state has new been assigned new approvers.
<br>
For details: {{ACCESS_REQUEST_URL}}
<br>
</body></html><html><body>
Hello,<br>
<br>
Action has failed.<br>
<br>
Identity: {{IDENTITY_NAME}}<br>
Action Name: {{ACTION_NAME}}<br>
Action Type: {{ACTION_TYPE}}<br>
Workflow Name: {{WORKFLOW_NAME}}<br>
Error Message: {{EVENT_ERROR_MESSAGE}}<br>
<br>
</body></html><html><body>
Hello,<br>
<br>
Workflow has failed.<br>
<br>
Identity: {{IDENTITY_NAME}}<br>
Workflow Name: {{WORKFLOW_NAME}}<br>
Error Message: {{EVENT_ERROR_MESSAGE}}<br>
<br>
</body></html><html><body>
Hello,<br>
<br>
Extraction processing has failed.<br>
<br>
Datasource: {{DATASOURCE_ID}}<br>
Error Message: {{EVENT_ERROR_MESSAGE}}<br>
<br>
</body></html><html><body>
Hello,<br>
<br>
An access review has been queued for {{IDENTITY_NAME}} <br>
<br>
</body></html><html><body>
Hello,<br>
<br>
An access review has been created for {{IDENTITY_NAME}} <br>
<br>
</body></html><html><body>
Hello,<br>
<br>
The hard safety limit for policy {{POLICY_NAME}} has been reached. No further identity changes were processed.<br>
</body></html><html><body>
Hello,<br>
<br>
The predictive safety limit for policy {{POLICY_NAME}} has been exceeded. The predicted number of workflow runs exceeds the configured threshold. All changes have been blocked before processing. Review the blocked tasks and take action to proceed.<br>
</body></html><html><body>
Hello,<br>
<br>
A workflow-level predictive safety limit in policy {{POLICY_NAME}} has been exceeded. The predicted number of workflow runs for the workflow exceeds its configured threshold. Review the blocked tasks and take action to proceed.<br>
</body></html><html><body>
Hello,<br>
<br>
{{ENTITY_NAME}} has performed a custom action <br>
<br>
Account Type: {{ENTITY_TYPE}} <br>
Message: {{EVENT_ERROR_MESSAGE}} <br>
<br>
</body></html>Configure how user attributes from a source of identity are transformed for target user accounts
When creating workflows in Lifecycle Management policies to create, sync, or deprovision identities, you will use attribute transformers to specify how user attributes for target accounts should be structured.
Terminology: For definitions of transformer, formatter, pipeline function, and condition, see Understanding Conditions and Transformers.
An attribute transformer is the complete configuration for mapping a source attribute to a destination attribute. It consists of:
The target attributes to create or update are typically mapped and, optionally, transformed from user metadata in the source of identity, such as an identity provider, HR system, or CSV upload. Attributes can be synchronized once or kept continuously in sync as changes occur throughout the user's employment lifecycle.
Attribute transformers are also available when mapping columns in . This enables you to combine columns, reformat dates, standardize case, and apply other transformations during CSV import—without requiring Lifecycle Management workflows.
For example, attribute mapping and transformation can be used across Joiner, Mover, and Leaver scenarios:
Joiner: Set new Azure AD User Principal Name to {source username}@your-email-domain.com. This is an example of mapping multiple attributes and performing a transformation. More specifically, you use the attribute transformer to generate an email address for new joiners. Use the source username (user_principal_name) from the source of identity (Azure AD UPN) for the first part (user attribute), while your-email-domain.com is used for the last part (target attribute).
Mover: Always update a user’s “Manager” and “Department” attributes in Okta to match the user’s manager and department in Workday, a source of identity, whenever a department change or other employee mobility event occurs. This is an example of attribute mapping with continuous synchronization.
When synchronizing a user’s attributes, Veza may apply many transformations to convert the source attribute values into a more suitable format intended for the target application as a user account attribute.
For example, a transformer might remove the domain from an email address, replace special characters, or convert a string with uppercase letters to lowercase letters.
See for detailed information.
Common transformers define one or more rules to apply when synchronizing the attributes of a target identity. Use them at the Policy level where you want to create or update attributes using the same conventions across multiple sync or deprovision actions. When you need to configure a one-time individual action in a workflow, such as a specific attribute, then you use the transformer at the Action level.
At the Policy level, you configure a transformer with basic details, including how to source the value of each attribute:
Assign a name and description to the transformer, and specify the data source to which it applies.
Entity Type: Choose the target entity type in the destination system.
Click Add Attribute. The Destination Attribute dropdown will list available attributes for the chosen entity type.
After creating a common transformer, you can select it when editing a workflow action. You can edit or delete common transformers on the Edit Policy > Common Transformers tab. Remember that “Sync Identity” and “De-Provision Identity” actions can have action-level transformers override common transformers. If the same destination attribute is defined in both, the action-level transformer will take precedence.
The Formatter field in a transformer specifies how to construct the attribute value. It can be set to a specific value, synchronized with a source attribute, transformed using a function, or a combination of these.
Some formatters should enable continuous synchronization for the attribute, while others should not. For example, the value of "Created By" should be immutable once a user account is provisioned. Other attributes that represent a state or status should be synchronized throughout the user's or account's lifecycle.
To create a destination attribute with a fixed value, enter the desired value when configuring the formatter. For setting the creator attribute:
For activating a re-hired employee:
To set empty values (common for de-provisioning flows):
Target attributes can be updated based on attributes belonging to the source of identity. To reference the value of a source entity attribute in your formatter, use the format {<source_attribute_name>}.
Examples:
Early Access: Alias Definitions is currently in early access. Contact your Veza representative to enable this feature for your tenant.
By default, when you reference an attribute such as {department} in a formatter, the system searches through your configured identity sources in order (primary first, then secondary sources). This works well for simple policies with a single source of identity.
Aliases become useful when:
Multiple integrations share the same entity type (e.g., two Active Directory instances, or when your source of identity and sync target use the same entity type)
A policy involves multiple integrations that have attributes with the same name
You need to explicitly control which system's attribute value is used
Alias Naming: The system automatically adds a $ prefix to all alias names. For example, if you create an alias named workday in the UI, it becomes $workday when used in formatters and conditions.
Example: HR System to Directory Sync
A policy syncs identities from an HR system (Workday) to a directory (Active Directory). Both have a department attribute. Without aliases, {department} resolves from whichever system appears first in the search order. With configured aliases hr and directory (which become $hr and $directory), you can explicitly reference {$hr.department} to ensure you're using the authoritative HR value.
Aliases can be used in:
Attribute formatters
Workflow trigger conditions
Action conditions
Mover property definitions
Aliases provide shorthand references to specific integrations and entity types, making transformers and conditions more readable in complex policies.
To configure aliases, open a Lifecycle Management policy, click Edit, and navigate to the Alias Definitions tab. Each alias requires:
Alias Name: Must start with $ followed by at least one lowercase letter, number, or underscore. Additional $ characters can appear after the first character. The $ prefix is added automatically if omitted. Valid examples: $workday, $hr_system, $ad$corp. Invalid examples: $, $AD (uppercase), $$double (multiple leading
Validation Rules: Alias names allow only lowercase alphanumeric characters, underscores, and $. They must start with exactly one $ (not zero, not multiple), and cannot be $target (reserved for action-level attribute references).
Testing and Validation: Aliases work in test formatters, allowing you to validate your formatter expressions before deployment. Additionally, alias-resolved attribute values appear in dry run results, so you can preview exactly which values will be synced.
Aliases can resolve attributes from two contexts:
Input: Values from the source system before any sync action runs (the authoritative data)
Output: Values currently in the target system (what's already provisioned)
By default, the system checks output first, then falls back to input. Use suffixes to explicitly control resolution:
When to Use Suffixes: Use $in when you need the authoritative value from the source system (e.g., HR system). Use $out when you need to compare against what's currently provisioned in the target. Without a suffix, the system checks the target first—useful when you want the most recent value regardless of source.
Use these operators in IF conditions to compare attribute values:
Combine conditions with and, or, or negate with not.
String List Attributes: For multi-value attributes (string lists), only the co (contains) operator is supported. Use it to check if the list includes a specific value, for example: IF $workday.roles co "Manager".
In attribute formatters:
In LCM Workflow Conditions (comparing source and target values):
Multiple integrations with the same entity type:
For organizations with multiple Active Directory domains (e.g., corporate employees and contractors), you can create distinct aliases to control which AD integration is used:
Configure alias corp_ad → Integration: AD_Corporate, Entity Type: ActiveDirectoryUser
Configure alias contractor_ad → Integration: AD_Contractors, Entity Type: ActiveDirectoryUser
Then explicitly reference the correct domain in your formatters:
This ensures you're using the department attribute from the corporate AD integration rather than the contractor AD integration, even though both use the same ActiveDirectoryUser entity type.
Based on the user metadata available from your source of identity (SOI), you may need to convert a full email address to a valid username, standardize a date, or generate a unique identifier for users provisioned by Veza. Suppose an attribute value needs to be altered to be compatible with the target system. In that case, you can transform the value of a source attribute or apply a range of other functions to generate the target value.
Formatter expressions use the following syntax: {<source_attribute_name> | <FUNCTION_NAME>,<param1>,<param2>}
For example:
Refer to the page for complete documentation of all supported functions, parameters, and usage examples. The reference includes:
Contact Veza if you require additional transformations for your use case.
You can pipeline multiple transformation functions together, separated by a vertical bar (|). Each will apply in sequence, allowing for complex attribute formatters that use the output of one function as the input of another.
{name | UPPER}
If name = Smith, the result is SMITH.
{first_name | SUB_STRING,0,1 | LOWER}.{last_name | LOWER}
Before deploying transformers in production policies, you can validate formatter expressions directly in the Veza UI. This allows you to verify that your transformation logic produces the expected output without affecting live data.
When adding or editing a transformer in a policy, look for the Test Formatter button next to the transformer field. Clicking it opens a test dialog:
Enter your transformer expression in the Attribute Transformer field
Click the Test Formatter button to open the test dialog
The dialog shows input fields for each attribute referenced in your expression (e.g., {first_name}, {email})
The test dialog is available wherever transformers are configured, including:
Action synced attributes
Unique identifiers
Common transformers
Date formatters
For complex pipelines, test incrementally:
Test the first function alone to verify it handles the input correctly
Add each subsequent pipe and verify intermediate results
Validate the complete pipeline produces the final expected value
This step-by-step approach helps isolate issues when a transformation doesn't produce the expected output.
The test interface uses sample data you provide. Ensure your test values accurately represent the source attribute data types and formats you'll encounter in production.
Use inline testing during transformer development, then validate the complete policy with a dry run before deploying to production.
As part of implementing Lifecycle Management (LCM) processes with Veza, you should create sets of common transformers to define how values such as username, login, or ID are sourced for each LCM Policy. These transformers can then be reused across all identity sync and deprovision policy workflows.
Create common transformers to consistently form attributes for specific entity types, and reuse them to avoid errors and save time when creating actions for that entity type. The order of common transformers matters when multiple transformers set the same destination attribute. Drag-and-drop to reorder common transformers and control precedence.
For example, defining a common synced attribute to describe how to format Azure AD account names {username}@evergreentrucks.com enables reuse across multiple workflow actions. You can also define synced attributes at the action level when they are used only once within a policy, such as setting the primary group DN and OU of de-provisioned identities to a group reserved for terminated accounts.
Common Transformer Examples:
The $target attribute transformer function is used when a value consists of one or more attributes that require an operation(s), making it too complex to transform, but it needs to be reused.
Important: The $target function can only be used within the same Action.
For example, an email address consists of [email protected]. However, you must use the format . By using the $target function, you reuse only one attribute, username, while not changing the other two attributes (firstname_lastname).
Example:
Destination Attribute
Formatter
Formatter
The Custom Attribute Transformer function allows you to define a custom transformer that acts as an alias for applying one or more transformer functions.
For example, you can define a custom function named $CLEAN, which is used as {first_name | $CLEAN}. This function can consist of a series of transformer functions such as | ASCII | LOWER | REMOVE_CHAR |.
To define a custom attribute transformer, use the following guidelines:
Policy Version Definitions
Custom functions must be defined as part of the policy version.
These definitions are structured similarly to hard-coded definitions and are returned in the same format, allowing the Veza UI to handle them without modification.
The API for updating and retrieving a policy version must also support these custom function definitions.
Naming Convention: Custom functions must be in ALL CAPS and prefixed with a $ to avoid conflicts with built-in functions.
Custom Attribute Transformer Limitations
The following custom definitions are not supported:
Transformer functions with included transformer parameters
Nested transformer functions
Transformer functions with parameters
As part of the Identity Sync action, you can append values to multi-value Active Directory attributes without replacing existing values. This ensures that existing attribute values are preserved when adding new ones.
This feature is specific to Active Directory and is not available for other integrations.
Supported Multi-Value Attributes:
Active Directory supports appending for the following multi-value attributes:
organizationalStatus, departmentNumber, employeeType
servicePrincipalName, proxyAddresses
Syntax:
Use the >> prefix before the array to append values:
Appending syntax supports two array formats:
With quotes (JSON format): >>[``"Active", "Permanent"]
Without quotes (simple format): >>[Active, Permanent]
When you use this syntax:
New values are added to the end of the existing attribute values
Duplicate values are automatically removed
The order of existing values is preserved
For example, ff an Active Directory user has:
And you apply the transformer:
The resulting value is:
Note that "Employee" was already present and not duplicated.
Setting vs. Appending:
To Replace existing values: Use [value1, value2] (without >>)
To Append to existing values: Use >>[value1, value2] (with >>)
Additional Notes:
The append prefix (>>) only works for multi-value attributes. It is ignored for single-value attributes
If the attribute has no existing values, the values are simply set (no difference from non-append behavior)
Both the appending syntax and the standard array syntax support arrays with or without quotes around values
Leaver: Move a user’s Active Directory account to an Organizational Unit (OU) reserved for terminated accounts.
Destination Attribute: Choose the attribute that Veza will create or update for the target entity.
Formatter: Choose how the destination attribute should be formatted. Specify the value, a {source_attribute}, or apply Transformation Functions.
Pipeline Functions: Chains transformation functions together using the pipe (|) character. Each function runs in sequence, with the output of one becoming the input of the next.
See Pipeline Functions for more examples.
Continuous Sync: Enabling this option ensures that the attribute is always synced, while applying any defined transformations. By default, attributes will not be synced if the target identity already exists.
You want to compare values between source and target systems while defining LCM Workflow Conditions
You need to detect movers based on changes in a specific system
Test formatters (for validation before deployment)
$Integration: The data source containing the entity type.
Entity Type: The entity type to reference (e.g., WorkdayWorker, OktaUser).
ew
Ends with
String
lt
Less than
Number, timestamp
le
Less than or equals
Number, timestamp
gt
Greater than
Number, timestamp
ge
Greater than or equals
Number, timestamp
Date/time
DATE_FORMAT, DATE_ADJUST, DATE_ADJUST_DAY, ASSUME_TIME_ZONE, UTC_TO_TIME_ZONE, NOW
Convert and manipulate dates
Character encoding
ASCII, REMOVE_DIACRITICS
Handle international characters
Lookup
LOOKUP, FROM_ENTITY_ATTRIBUTE, FROM_MANY_ENTITIES_ATTRIBUTE
Cross-reference data from tables or entities
Generation
NEXT_NUMBER, UUID_GENERATOR, RANDOM_INTEGER, RANDOM_STRING_GENERATOR, RANDOM_ALPHANUMERIC_GENERATOR, RANDOM_NUMBER_GENERATOR
Create unique values
Domain
REMOVE_DOMAIN
Extract usernames from email addresses
Formatting
COUNTRY_CODE_ISO3166, LANGUAGE_RFC5646, PHONE_NUMBER_E164
Standardize to international formats
If first_name = John and last_name = Smith, the result is j.smith.
{email | REMOVE_DOMAIN}
If email = [email protected], the result is john.smith.
{email | REPLACE_ALL, " ", "."}
If email = john [email protected], the result is [email protected].
{location | LOOKUP locationTable, location_code, city}
If location = IL001, the result is Chicago (using a lookup table named locationTable).
{start_date | DATE_FORMAT, "01/02/2006" | UPPER}
If start_date = 2023-03-15, the result is 03/15/2023 (DATE_FORMAT doesn't typically need UPPER, but shows pipeline capability).
{hire_date | DATE_FORMAT, "Jan 2, 2006" | REPLACE_ALL, " ", "_"}
If hire_date = 2023-03-15, the result is Mar_15,_2023.
{office_code | TRIM_CHARS_LEFT, ".0" | TRIM_CHARS_RIGHT, ".USCA"}
If office_code = 000.8675309.USCA, the result is 8675309.
{username | REMOVE_CHARS, ".-_" | TRIM | UPPER}
If username = "–john.doe_–", the result is JOHNDOE.
{employee_id | REMOVE_CHARS, "#" | TRIM_CHARS, "0" | LEFT_PAD, 6, "0"}
If employee_id = "##001234##", the result is 001234.
{department | REMOVE_WHITESPACE | LOWER | REPLACE_ALL, "&", "and"}
If department = "Sales & Marketing", the result is salesandmarketing.
TEST{| RANDOM_INTEGER, 1000, 9999}
Generates test IDs like TEST4827, TEST8391 (see RANDOM_INTEGER for details).
Enter sample values for each attribute
Click Test Formatter in the dialog to evaluate the expression
View the result to verify the transformation produces expected output
Click Save to close the dialog, or Cancel to discard changes
user_principal_name
`{first_name
SUB_STRING,0,1
LOWER}.{last_name
{first_name}{last_name}@company.com
Yes
Email address
OktaAccountTransformer OktaUser
login
`{first_name
SUB_STRING,0,1
LOWER}.{last_name
{first_name}{last_name}@company.com
Yes
Email address
username_prefix
`{first_name
SUB_STRING,0,1
LOWER}.{last_name
AzureADTransformer AzureADUser
principal_name
{first_name}{last_name}
No
Primary identifier
mail_nickname
`{first_name
SUB_STRING,0,1
LOWER}{last_name
display_name
{first_name} {last_name}
Yes
Display name
GoogleAccountTransformer GoogleWorkspaceUser
{first_name}{last_name}@company.com
No
Primary email
email_addresses
{username}@company.com
No
Email list
recovery_email
{personal_email}
Yes
Backup email
ContractorTransformer ActiveDirectoryUser
account_name
c-{username}
No
Contractor prefix
distinguished_name
CN={first_name} {last_name},OU=Contractors,OU={department},DC=company,DC=local
Yes
Contractor OU
description
Contractor - {vendor_company} - Start Date: {start_date}
Yes
Metadata
RegionalEmailTransformer ExchangeUser
email_address
{username}@{region}.company.com
No
Regional email
alias
{first_name}.{last_name}@{region}.company.com
Yes
Regional alias
member, memberOf, roleOccupanturl, wWWHomePage
otherTelephone, otherMobile, otherIpPhone, otherFacsimileTelephoneNumber, otherHomePhone, otherPager, otherMailbox
And additional multi-value attributes including: objectClass, postalAddress, postOfficeBox, seeAlso, userCertificate, userSMIMECertificate, userPKCS12, securityIdentifierHistory, altSecurityIdentities, businessCategory, carLicense, homePostalAddress
Destination attribute
The target attribute to set
email, username, distinguished_name
Formatter
The template that constructs the value
See Terminology
Continuous sync
Whether to update on existing users
Enabled/Disabled
Fallback formatters
Alternative templates if the primary causes conflicts
{first_name}.{last_name}[email protected]
Source of Identity (SOI)
The system holding authoritative user data—the "source of truth"
HR systems (Workday, BambooHR), identity providers (Azure AD, Okta), CSV uploads
Target Application
The system where user accounts are created or updated using SOI data
Active Directory, Okta, Google Workspace, SaaS applications
created_by
“Veza”
Disabled
isActive
true
Enabled
manager_id
" "
Enabled
isActive
false
Enabled
first_name
{first_name}
Enabled
last_name
{last_name}
Enabled
{first_name}.{last_name}@domain.com {first_name}_{last_name}@domain.com {last_name}@domain.com {firstname_initial}{last_name}@domain.com {firstname_initial}-{last_name}@domain.com {firstname_initial}{middlename_initial}{last_name}@domain.com {last_name}-{firstname_initial}@domain.com
-
(none)
Output, then input
{$workday.department}
General attribute access
$in
Source only
{$workday$in.department}
Get the authoritative source value
$out
Target only
{$workday$out.department}
eq
Equals
Boolean, string, number, timestamp
ne
Not equals
Boolean, string, number, timestamp
co
Contains
String, string list
sw
Starts with
username
`{email | REMOVE_DOMAIN}`
Removes the domain from the email to create username
"jsmith" is the output derived from [email protected]
user_id
`f{id | UPPER}`
Converts ID to uppercase
JSMITH" is the output derived from the userid, "jsmith"
String case
UPPER, LOWER, TITLE_CASE, SENTENCE_CASE, LOWER_CAMEL_CASE, UPPER_CAMEL_CASE, LOWER_SNAKE_CASE, UPPER_SNAKE_CASE
Standardize naming conventions
String manipulation
TRIM, TRIM_CHARS, REMOVE_CHARS, REMOVE_WHITESPACE, REPLACE_ALL, APPEND, PREPEND
Clean and format string data
Substring
FIRST_N, LAST_N, SUB_STRING, SPLIT
Extract portions of values
Padding
LEFT_PAD, RIGHT_PAD, ZERO_PAD
Create fixed-width identifiers
UPPER
john.doe
JOHN.DOE
{email | SPLIT("@") | INDEX(0)}
john.doe
{start_date | DATE_FORMAT("2006-01-02")}
2025-01-15T10:30:00Z
2025-01-15
{name | LOWER | REPLACE_ALL(" ", ".")}
John Smith
Validating a single transformer expression
Inline Testing
Testing how transformers work with real entity data
Verifying complete policy workflow execution
ADAccountTransformer ActiveDirectoryUser
account_name
{display_full_name}
No
Basic account name
distinguished_name
CN={first_name} {last_name},OU={department},OU={location},DC=company,DC=local
Yes
Full AD path
Get the current target value
String
john.smith
{$workday.first_name | LOWER}.{$workday.last_name | LOWER}@company.comIF $workday$in.department ne $ad$out.department
{$workday$in.department}
ELSE
{$ad$out.department}{$corp_ad.department}username`{firstname}{lastname}``{$target.username}@sample.com`>>[value1, value2, value3]organizationalStatus: ["Active", "Employee"]>>[Employee, Contractor, Temporary]organizationalStatus: ["Active", "Employee", "Contractor", "Temporary"]Frequently asked questions about Veza's Lifecycle Management for automated identity and access governance
This document addresses common questions about Lifecycle Management (LCM) for automated identity and birthright access governance across systems and applications.
The questions in this document are designed to introduce key concepts and address common questions that often arise during deployments. Please contact your support team with additional questions and feedback. Note that specific functionality may depend on the features and integrations enabled in your environment.
Your Lifecycle Management configuration can be straightforward or complex, depending on your organization's needs. To learn more about general implementation patterns, see and .
See also:
Yes, dry run simulations let you safely preview policy changes before deployment. Dry run evaluates workflow logic and shows what actions would occur without making actual changes to target systems. You can test a single identity or run bulk dry runs against multiple identities with filtering options.
For step-by-step instructions, see .
Dry run evaluates the selected identity against all workflows in a policy and shows:
Matched workflows: Which workflows triggered and why
Planned actions
When an action fails, the entire workflow retries on the next policy run—not just the failed action. All actions (including previously successful ones) re-execute unless configured with "Skip if action has already been run".
Retry configuration (API only):
This safety mechanism prevents the same action from executing multiple times for the same identity, even if the workflow re-triggers. LCM tracks successful completions per identity and skips the action if already completed.
Enable for one-time actions:
Create Email, Welcome notifications, Initial Password Setup, One-time provisioning
Creating a policy involves configuring your source(s) of identity, workflows, and actions to automate lifecycle events:
Create Policy: Go to Lifecycle Management > Policies > Create Policy
You can pause or disable specific workflows and actions within a policy for safer testing and gradual rollouts, without deleting or modifying the underlying configuration. Disabled workflows and actions are skipped during policy execution, and the policy editor displays them with a "Disabled" tag.
Disabled workflows are still evaluated during Dry Run simulations by default, so you can test workflow logic before enabling it in production.
Continuous Sync keeps a provisioned user's source attributes automatically updated in target systems after initial provisioning, rather than syncing only once at creation time.
Why use Continuous Sync:
Keeps downstream systems current - Attribute changes (title, manager, department) propagate automatically
Secondary sources of identity are not redundant, despite the availability of multiple primary sources. They serve fundamentally different purposes:
Primary Sources of Identity (SOI):
Must all be of the same entity type (e.g., all Worker entities from Workday).
Access Profiles are collections of entitlements (groups, roles, or permissions) that can be automatically assigned to users based on their attributes. They serve two key functions:
Birthright Access: Automatically assigned through policy workflows during joiner/mover/leaver events via the Manage Relationships action
Lifecycle Management provides two independent safety limit mechanisms that can be used individually or together for layered protection:
Hard Limit (formerly "Safety Limit") — A reactive mechanism that halts processing during execution after the configured number of identity changes has been reached. When triggered, no further identity changes are processed for the current policy run.
Configured with max_identities_affected_count
Lifecycle Management supports parallel workflow processing, allowing multiple workflows to run concurrently. Configure parallel execution using the private API endpoint at /api/private/lifecycle_management/parallel_execution_settings.
Key settings include:
jobs: Maximum concurrent policy jobs
Lifecycle Management supports notifications at two levels with different capabilities:
Yes, administrators must explicitly configure notifications for Access Request events. Notifications can be configured for six event types (created, action run, completed, failed, state changed, approver assigned), with recipients selected from five categories: Approvers, Creator, Beneficiary, Watchers, or specific email addresses.
Behavior Change (August 2025): Previously, notifications were automatically sent to all recipient types for all events. The default was removed for better control. Existing customers had settings automatically migrated to match the old behavior.
Access Request notifications are sent to five recipient categories: Approvers, Creator, Beneficiary, Watchers, and other_emails (specific addresses). Administrators receive notifications only when explicitly configured in one of these roles—there is no "all admins" setting.
Common issue: If you're receiving unwanted notifications, you're likely configured as a default approver for Access Requests with to_approvers=true enabled. For customers migrated from pre-August 2025, all recipient types are enabled by default.
Yes, notification templates fully support HTML and CSS. You can use standard HTML markup, inline styles, images, and links in all Lifecycle Management and Access Request notification templates.
Key Capabilities
Standard HTML tags (<html>, <body>
LCM processes identities from CSV and OAA-based data sources only when specific events occur, unlike native integrations that can pull data on demand.
Trigger Events for Identity Processing
For CSV and OAA data sources, extraction and identity evaluation occur when:
Veza has built-in guardrails to prevent overlapping extraction jobs for the same data source. A new extraction job is enqueued only if there is no pending or in-progress job for that data source.
Job Scheduling Behavior
When an extraction is scheduled to run every hour but takes longer than one hour to complete:
Yes, Veza supports data transformations when uploading CSV files for HRIS and application data sources. This allows you to manipulate and format data during the upload process without preprocessing.
Supported Transformations
Transformations can be applied to CSV columns during mapping configuration:
Yes, Lifecycle Management fully supports both custom Active Directory attributes and moving users between organizational units.
Custom Attributes: You can synchronize custom AD attributes (like hrdivisionID, cost center, or other organizational data) from your source of identity. First, add custom properties in your AD integration configuration (in the Custom Properties step of the integration wizard), then map them in your LCM policy's Sync Identity action using attribute transformers. After enabling custom attributes for the integration, they can be set for new and existing users just as standard AD attributes.
Moving Between OUs: You can move users between organizational units by modifying the user's
For details on configuring LCM integrations, including setup instructions, extraction requirements, and supported capabilities, see .
There are two different types of integrations supported by Lifecycle Management:
Source of Identity (SOI): These are authoritative systems that provide definitive information about user identities and their status within an organization. Common examples include Human Resource Information Systems (HRIS), corporate directories, and Identity Providers (IdPs). While Veza typically does not require write permissions to these sources, some can also serve as provisioning targets and support write-back of newly created user attributes, such as an email address.
Veza provides comprehensive coverage for target applications through a multi-faceted approach:
Native Integrations: Veza offers native, full CRUD-based provisioning and deprovisioning for numerous applications and platforms, including IdPs, directories, cloud platforms, business and productivity applications, databases, developer platforms, and more. These integrations typically provide deeper control over entitlement management and support user lifecycle actions (onboarding/offboarding) beyond basic account creation.
Veza LCM supports a variety of Source of Identity systems to serve as authoritative sources for user identity information.
Built-in SOI Systems include:
Beeline - Shift-based workforce management system
Veza supports SCIM 2.0 attributes for both read-only data extraction and Lifecycle Management synchronization. The specific attributes available depend on whether you're extracting data for the Access Graph or synchronizing user/group information through LCM.
Core User Attributes
For LCM Synchronization, Veza supports the standard SCIM user attributes including:
Email writeback capability allows LCM to update the Source of Identity with newly created email addresses during provisioning workflows.
Systems Supporting Email Writeback
Currently, only a limited subset of integrations support email writeback actions:
Veza LCM supports provisioning across target systems through native integrations and SCIM protocol compatibility.
Supported Categories
Native Integrations (Full lifecycle support):
Lifecycle Management includes core workflow capabilities, with additional features available depending on your configuration needs. Some features that were previously gated are now available by default, while others require configuration or enablement.
Yes, the Reset Password and Create Access Review workflow actions are now generally available as standard LCM functionality. These action types appear as available options when configuring workflow actions in LCM policies.
Additionally, Secondary Sources of Identity are also now generally available, allowing you to configure secondary identity sources in policies without requiring special enablement.
When a policy identity has both primary and secondary sources, Veza determines which source's attributes to display in the Identities table—including the identity's active state—based on the is_active field from each source. The is_active field typically represents employment or account status (e.g., an active employee in Workday, an active contractor in a secondary system).
Default behavior:
The Show Raw JSON optional feature allows you to view and export the complete JSON representation of a Lifecycle Management policy for debugging and troubleshooting purposes.
Accessing Raw JSON
To view the raw JSON configuration:
Access to Lifecycle Management and Access Profiles is managed through Veza's role-based permission system. User permissions can vary based on their assigned roles and team membership, enabling separation of duties and security controls across the platform.
Only Administrator roles have full management capabilities for LCM policies and Access Profiles. All other roles provide various levels of read-only access, with some specialized roles offering additional functionality like integration management or review assignment.
Role Categories and Access Levels
Veza roles fall into two availability tiers that determine their LCM access capabilities. Generally Available roles
Access profiles: Which access profiles would be assigned or removed
Dry run does not test integration connectivity or validate that actions would succeed. It only evaluates whether workflow conditions are met.
For step-by-step instructions, see Test policies with dry run.
Disables automatic retry when set to true
false
max_retries_for_failed_workflow
Maximum number of retry attempts
10
Example: If Azure Sync fails after AD notifications, the workflow retries and notifications send again. Enable "Skip if action has already been run" on notification actions to prevent duplicates.
Sync Identity, Manage Relationships, Deprovision Identity
Key behaviors:
Only successful completions mark an action as "run"—failed actions continue to retry
Condition-based skips don't affect state (action runs when conditions become true)
Clear action history via API to force re-execution
Add Workflows: Define triggers for Joiner, Mover, and Leaver scenarios
Configure Actions: Set up provisioning, deprovisioning, and access assignments
Test and Activate:
Run dry-runs to test the policy configuration
Click Publish to save the policy (it will be in Initial state)
Click the Actions menu (⋮) and select Start to activate the policy (Running state)
For detailed step-by-step instructions, see Lifecycle Management Policies
Reduces drift - Avoids stale or inconsistent values that impact compliance
Supports policy logic - Updated attributes can trigger dynamic policy conditions
Configuration overview:
Continuous Sync requires configuration at multiple levels:
Action level: Enable "Update active users" on Sync Identity actions
Attribute level: Select "Set for new and existing users" for attributes that should stay synchronized
For complete configuration details, recommended settings, and best practices, see Attribute Synchronization.
Create the core identity records that drive lifecycle management workflows.
All primary sources are treated as authoritative for identity creation.
Changes in any primary source trigger lifecycle workflows.
Secondary Sources of Identity:
Can be of different entity types than the primary source (e.g., HRIS Employee records enriching Workday Workers).
Primarily used for enrichment rather than identity creation.
Support two distinct operational modes via the only_enrich_existing flag:
Enrichment mode (only_enrich_existing = true): Only adds attributes to existing identities created from primary sources.
Hybrid mode (only_enrich_existing = false): Can create new Policy Identities if they don't exist in primary sources.
Secondary sources of identity provide flexibility in scenarios that require:
Data Enrichment from Non-Identity Sources: Organizations may need data from systems that shouldn't be authoritative for the identity lifecycle. Secondary sources support scenarios where core identities originate from HR (primary), and additional attributes come from departmental systems (secondary). Not all employees may exist in all systems. For instance:
HRIS system (primary) defines who exists in the organization.
A secondary system provides office location or manager metadata.
The secondary system shouldn't create/delete identities but should enrich them.
Cross-System Correlation: Secondary sources create attribute mappings to link records across systems using custom correlation logic. This supports multiple matching strategies:
Exact match on identifier (e.g., employee_id = worker_id)
Email-based correlation
Composite key matching (multiple attributes)
Custom correlation expressions
For example, correlating employee_id from an HRIS system with a worker_id in Workday, or matching users across systems based on email addresses.
Access Profile Types (Business Role, Entitlement, Application, etc.) determine behavior and can be configured hierarchically for fine-grained access control.
For complete documentation including configuration, profile types, ownership, and best practices, see Access Profiles and Access Profile Types.
Enabled with enable_change_limit
Predictive Safety Limit — A proactive mechanism that blocks all changes before execution begins if the system predicts the number of workflow runs will exceed configured thresholds. This prevents unintended mass processing when upstream attribute changes in a Source of Identity would trigger unnecessary Joiner, Mover, or Leaver workflows.
Configured with max_workflow_runs_count
Enabled with enable_predictive_change_limit
Safety limits can be configured at both the policy level and individual workflow level for granular control.
For example, if you have 1,000 users in your organization:
A Hard Limit of 100 identities will halt processing after 100 identity changes have been executed
A Predictive Safety Limit of 200 workflow runs will block the entire policy run before it starts if more than 200 workflow executions are predicted
In both cases, a warning notification is sent, and manual intervention is required before processing can continue.
Safety limits are critical for production environments. Never proceed in re-enabling a policy without careful consideration. Safety Limits can be overridden with explicit API parameters.
Parallel Execution and Paused Tasks
When parallel workflow processing is enabled, paused tasks (waiting for approval, delays, etc.) free up running slots, allowing other tasks to start. This can create scenarios where many paused tasks bypass the safety limit check when they resume.
To mitigate this, configure the max_paused_slots setting to limit how many paused tasks can free up running slots:
First N paused tasks: Free up slots (allowing new tasks to start)
Additional paused tasks: Remain counted as "running" (preventing new tasks from starting)
This setting is configured via the parallel execution settings API (see Parallel Execution Settings below).
Recovery Options
When a Predictive Safety Limit triggers:
Navigate to the Blocked Tasks page to review what would have changed
Run blocked tasks individually or in bulk to manually approve execution
Abandon blocked tasks to discard them without executing
Resume processing after acknowledging the warning
When a Hard Limit triggers:
Review the warning details in the policy event log
Run dry-runs to understand the impact on affected identities
If changes are expected (e.g., bulk onboarding):
Temporarily increase limits via API
Process with disregard_change_limit=true or disregard_predictive_change_limit=true parameter
Reset limits after processing
If changes are unexpected:
Check source system for data quality issues
Review recent policy configuration changes
workflows: Maximum concurrent workflows per job
access_requests: Maximum concurrent access request workflows
max_paused_slots: Limits how many paused tasks can free up running slots (prevents safety limit bypass)
For complete API reference, configuration examples, and detailed explanation of max_paused_slots behavior, see Parallel Execution Settings API.
Available data
Entity details (names, emails, attributes)
Action metadata (name, type, status) only
Configuration
Policy Settings > Notifications
Edit Action > Action Notification Settings
Best for
User and stakeholder communications
Simple operational confirmations
Choosing the right level:
Use policy-level for user-facing notifications requiring entity context (usernames, emails, relationship details). These support dynamic recipients and rich placeholders like {{ENTITY_NAME}} and {{LOGIN_NAME}}.
Use action-level for operational monitoring where you only need confirmation that an action completed, without entity-specific details.
The {{LOGIN_PASSWORD}} placeholder is only available for CHANGE_PASSWORD and RESET_PASSWORD events, not for identity creation events.
For configuration details, see:
Policy Notifications - Event-based notifications with entity context
Send Notification Action - Action-level notification configuration
Notification Templates - Placeholders and custom templates
Configure notifications through Lifecycle Management > Settings > Access Request Settings > Notifications, or via the Access Request Settings API. Note that there is no "all admins" option—administrators receive notifications only when explicitly configured as approvers, creators, watchers, or listed in other_emails.
Without notification configuration, users and approvers won't receive alerts about access request activities.
Remove your role: Stop being an approver, creator, or watcher for requests
Modify settings: Disable specific recipient groups (e.g., to_approvers=false) in Lifecycle Management > Settings > Access Request Settings > Notifications
Disable events: Turn off entire event types if not needed
For programmatic configuration, contact your Customer Success Manager or Veza support.
<br><div><p>CSS styling (inline or embedded)
Images (embedded attachments or external URLs)
Links and formatting
Custom branding and layouts
Template Management
Templates are currently managed via the Notification Templates API
All built-in templates use HTML structure
Support for small image attachments (under 64kb, base64-encoded)
External image linking for high-resolution content
For complete setup instructions, HTML examples, default templates, placeholder reference, and detailed formatting guidance, see Notification Templates for Lifecycle Management
Policy Configuration Changes - Any policy update forces a re-extraction
Manual Extraction - LCM explicitly queues an extraction job
Key Behaviors
No Automatic Refresh: CSV/OAA sources don't automatically fetch new data - they only process what was last pushed
Re-extraction Uses Same Data: If extraction is triggered without a new push, it re-processes the same payload
Policy Updates Trigger Processing: Changes to policy configuration (e.g., UID mapping, workflow conditions) will force re-extraction of existing data
CSV-Specific Details
CSV files are converted to OAA payloads upon upload
The original CSV is not stored; only the OAA transformation is retained
Re-extraction processes the stored OAA payload, not the original CSV
Common scenarios when working with CSV Uploads:
Daily CSV Upload:
New file uploaded → Extraction triggered → Identities processed
Workflows evaluate all identities based on the "Sync on changes only" setting
No New Upload for 7 Days:
No extraction occurs automatically
Existing data is NOT re-evaluated unless:
Policy is modified
Manual extraction is triggered
Policy Configuration Modified:
Policy change → Forced extraction of existing data
All identities re-evaluated with a new configuration
Can trigger workflows even without data changes
Important Considerations
Unexpected Re-processing: If workflows unexpectedly re-trigger for all users without a new CSV upload, check if:
Someone modified the policy configuration
UID mapping was changed
Workflow conditions were updated
These changes trigger re-extraction of the datasource and can cause all identities to be re-evaluated.
"Sync on changes only" Setting: When enabled, only identities with changed attributes or newly matching trigger conditions will have workflows executed, even during re-extraction.
The next extraction runs at the first scheduled time after the previous job completes
Skipped scheduled runs are dropped—they don't queue up for later execution
For example, supposing an hourly extraction schedule, where an extraction starts at 2:00 AM but takes 4 hours and 30 minutes to complete:
2:00 AM - Extraction job starts
3:00 AM - Scheduled extraction skipped (job still running)
4:00 AM - Scheduled extraction skipped (job still running)
5:00 AM - Scheduled extraction skipped (job still running)
6:00 AM - Scheduled extraction skipped (job still running)
6:30 AM - Initial extraction completes
7:00 AM - Next scheduled extraction runs successfully
In this scenario, the scheduled jobs at 3:00 AM, 4:00 AM, 5:00 AM, and 6:00 AM are dropped because an extraction was already in progress.
This behavior applies to all extraction schedules and is not specific to any particular integration or API. It is intended to prevent system resource exhaustion from simultaneous extractions.
Note that each data source is evaluated independently, and extractions for different data sources can run concurrently. Manual extraction triggers will also be skipped if an extraction is already running for that data source
If you notice that extractions are consistently taking longer than your scheduled interval, consider adjusting the schedule frequency to accommodate typical extraction durations. Monitor extraction times in the integration activity logs to determine optimal scheduling.
Data Formatting: Date formatting, number formatting
Conditional Logic: If/then conditions based on column values
Template Mappings: Create complex attribute values from multiple columns
Use Cases
Combine Multiple Columns: Create full names from first/last name columns
Extract Data: Gather domains from email address values
Format Dates: Convert date formats to match target system requirements
Apply Business Logic: Set department codes based on location values
Generate IDs: Create unique identifiers from existing data
Example Transformations
Concatenate columns:
Extract email domain:
Pad employee ID with zeros:
Important notes:
Conditional logic is not supported: CSV transformations do not support IF statements or conditional expressions
CSV headers are automatically converted to lowercase, with underscores (e.g., "First Name" becomes "first_name")
Use {{column_name}} syntax to reference CSV columns in attribute transformations within a Lifecycle Management Policy.
Technical Implementation Note
When you upload a CSV file:
The CSV is immediately converted to OAA (Open Authorization API) format
Only the OAA payload is stored, not the original CSV
Any re-extraction uses this stored OAA payload
This ensures consistent data processing across all extraction cycles
Transformations are applied during the data extraction process and don't modify your original CSV file. The transformed values are what LCM uses for identity processing and provisioning.
CSV transformations have different capabilities than full LCM transformers - they support basic string operations and functions but not conditional logic or complex expressions.
distinguishedNameCN={{login_name}},OU=Disabled Users,DC=company,DC=comCN={{login_name}},OU={{department}},OU=Users,DC=company,DC=comFor configuration details, supported attributes, and setup instructions, see [Active Directory Lifecycle Management](integrations/active-directory.md).
Target Applications: These are the applications, platforms, and systems where Veza can programmatically provision and deprovision user access. This includes a wide range of systems from cloud infrastructure (AWS, Azure) and databases (Snowflake, MySQL) to SaaS applications (Salesforce, Atlassian Cloud).
SCIM Support: Lifecycle Management supports any application that supports SCIM provisioning standards as target applications. You can enable Lifecycle Management for compatible targets using the generic SCIM Integration
Open Authorization API (OAA): Custom Application Templates and custom REST API actions enable provisioning and deprovisioning for the long tail of custom, legacy, and homegrown applications.
Any non-SCIM application that offers a suitable interface for user provisioning and deprovisioning can be supported. Customers, partners, or Veza can easily develop integrations with custom applications.
Coupa CCW - Cloud-based business spend management platform
Custom IDP - Generic identity provider integration for custom authentication systems
Custom HRIS (OAA) - Custom HR systems using Open Authorization API (OAA) templates
HiBob - Modern HR platform for businesses
Ivanti Neurons HR - HR platform for onboarding/offboarding and self-service
Okta - Cloud-based identity and access management service
Oracle HCM - Human Capital Management cloud solution
Workday - Cloud-based human capital management platform
CSV Upload and Open Authorization API templates provide an extensible framework for adding custom identity providers or HRIS platforms.
Custom OAA Integration - Any system can be configured as an SOI through the Open Authorization API
Custom Principal - Support for non-traditional identity sources
For integration setup for each target system, see the LCM Integrations Guide
userName (required), id, externalId, activeContact Information: emails, phoneNumbers, addresses, ims
Personal Information: displayName, givenName, familyName, middleName, nickName
Professional Information: title, userType, locale, timezone, preferredLanguage
For Read-Only Extraction, all SCIM core attributes are captured, including additional metadata such as profileUrl, photos, createdAt, and lastModified.
Group Attributes
Veza supports standard SCIM group attributes including displayName, id, externalId, groupType, description, and members for both extraction and LCM operations.
Extension Attributes
Enterprise Extension Support: Veza can synchronize Enterprise Extension attributes including department, division, employeeNumber, costCenter, organization, and manager for both read-only extraction and LCM.
Custom Extensions: Veza automatically discovers and extracts all custom vendor-specific SCIM extension attributes for read-only purposes (they appear in the Access Graph). You can synchronize Custom vendor extensions when Extension Schema Discovery is enabled, by referencing the normalized attribute name when constructing a transformer for Lifecycle Management or Access Requests.
For the complete attribute reference with data types, requirements, and LCM capabilities, see the SCIM Lifecycle Management integration guide.
Workday
How Email Writeback Works
LCM creates an email account in the target system (e.g., Exchange, Azure)
The newly created email address is written back to the user's record in the SOI
This ensures the SOI remains the authoritative source with current email information
Email writeback requires write permissions to the Source of Identity system, which may require additional configuration and security considerations. Refer to the specific integration documentation for setup requirements.
For detailed configuration instructions, see the integration-specific documentation in the LCM Integrations.
Collaboration: Google Workspace, GitHub, Exchange
Business Apps: Salesforce, ServiceNow, Workday, SAP ECC
Data Platforms: Snowflake, Veza Platform
SCIM 2.0 Support:
Generic SCIM (any compliant system)
Includes Atlassian Cloud, Oracle Fusion Cloud, and SwiftConnect
The entire Veza application catalog can potentially be LCM-enabled. Contact your Customer Success Manager to discuss enabling specific applications.
For all validated integrations and their capabilities, see LCM Integrations.
Trigger compliance access reviews automatically based on user changes
Available by default
Multiple Identity Sources
Use multiple HR systems or identity providers with priority handling
Available by default
Send REST Request Action
Custom REST API action for provisioning workflows to integrate with external systems and custom applications
Available by default
Enhanced Dashboard View
Consolidated overview dashboard showing policies, activity, and integration status at a glance
Available by default
Access Request & Approvals
Enables users to request access with automated approval workflows and provisioning
Requires configuration - contact your Customer Success Manager
Policy JSON Viewer
View and export full policy configurations in JSON format for debugging and technical support
Available upon request
Active Identity Source Prioritization
When an identity has both primary and secondary sources, prioritizes displaying attributes from whichever source has an active user status, rather than always defaulting to the primary source
Early Access - contact Veza support to enable
Alias-Based Attribute Lookup
Reference entity attributes in policies using custom aliases (e.g., $employee.email) to disambiguate when the same entity type appears as both a source of identity and a sync target
Early Access - contact Veza support to enable
Features marked "Available by default" are standard LCM functionality. "Early Access" features may require Veza support to enable. Contact your Customer Success Manager to discuss configuration options.
Always displays the primary source attributes if a primary source exists
Only displays secondary source attributes if no primary source exists
Enhanced behavior (Early Access):
Active
Any
Primary source
Inactive
Active
Secondary source
Active
Active
Primary source (default)
Inactive
Inactive
This prioritization ensures the Identities table reflects the most current source of truth, which is particularly useful in scenarios where:
A user's primary identity becomes inactive (e.g., employee terminated in Workday, is_active=false)
The secondary identity source remains active (e.g., contractor account still active in secondary system, is_active=true)
You need visibility into which system currently maintains active identity information
Example scenario: An employee terminates from their full-time position (primary Workday identity becomes is_active=false) but continues as a contractor (secondary source remains is_active=true). With enhanced behavior enabled, the Identities table displays attributes from the contractor system, reflecting their current active status.
Early Access: Enhanced identity source prioritization may require Veza support to enable. Contact your Customer Success Manager for availability.
Select a policy to view its details
Click Show Raw JSON in the policy header actions (if enabled for your tenant)
The complete policy configuration displays in a modal window
Use the Copy JSON button to copy the configuration to your clipboard
What's Included
The raw JSON export includes the complete policy structure:
Policy metadata (name, description, state, version information)
Workflow configurations and trigger conditions
Action definitions and parameters
Transformer mappings and attribute configurations
Data source associations and identity mappings
Access profile assignments and permissions
Safety limit configurations
Notification templates and settings
Secondary identity source configurations
The raw JSON feature is useful for providing complete policy configurations when working with support teams, and understanding the underlying policy structure. Use this option for creating backups of complex policy configurations and debugging complex policy behaviors.
This feature may require enablement for your tenant. Contact your Customer Success Manager if the "Show Raw JSON" button does not appear in your policy header actions.
The raw JSON contains sensitive configuration information. Only share policy JSON with authorized personnel and avoid exposing credentials or other sensitive data when sharing configurations.
For more information, see Policy Settings in the Policies documentation.
Role
Availability
Team Support
LCM Policies & Workflows
Access Profiles
Special Capabilities
Administrator
Generally Available
Root only
Full access: Create, edit, delete policies and workflows
Full access: Create, edit, delete Access Profiles and types
System configuration, user management
Operator
Generally Available
Root, Non-root
Read-only access to policies and workflows
Understanding Team-Based Access Control
Team assignments determine the scope of data and integrations that users can access within their assigned roles. The Root team provides unrestricted access to all integrated data providers, while custom teams limit access to specific team-assigned integrations.
Root Team Access grants users visibility into all LCM policies across every integrated provider, the ability to create Access Reviews and manage system-wide configuration, and access to administrative roles that require platform-wide permissions. This team is essential for users who need comprehensive oversight of lifecycle management operations.
Non-Root Team Access restricts users to viewing only LCM policies relevant to integrations within their team's scope. These users cannot create Access Reviews or access system-wide administrative features, but they can effectively manage policies and profiles within their designated integration boundaries. Non-root teams are recommended for departmental teams or application-specific access control scenarios.
Multi-Team Membership allows users to belong to multiple teams simultaneously, with potentially different roles in each team. Users can switch their "active team" context to access different sets of policies, profiles, and data based on each team's integration scope. This supports organizational structures where users need varied access levels across different systems.
Automated Role Assignment Through SSO
Organizations using Single Sign-On can streamline user management by automatically assigning Veza roles based on Identity Provider (IdP) group membership. This integration uses SAML/OIDC claims to map IdP groups to specific Veza team and role combinations using the format Team SSO Alias:role name (where Team SSO Alias and role name are placeholders—do not include curly braces).
For example, the following IdP group-to-role mappings are valid:
Root:admin → assigns the "admin" role in the "Root" team
Engineering Team:operator → assigns the "operator" role in the "Engineering Team"
Finance:viewer → assigns the "viewer" role in the "Finance" team
Single IdP groups can map to multiple team/role combinations, and administrators can configure default fallback assignments for users without specific group mappings.
This approach reduces manual user management overhead while ensuring consistent role assignments based on organizational structure. For SSO configuration guidance, see Role Mapping for Single Sign-On.
Implementation Considerations
When planning role assignments, consider that policy and Access Profile management requires Administrator privileges, which are restricted to Root team members. The Veza interface automatically adjusts to user permissions—non-administrator users won't see create, edit, or delete options for resources they cannot modify.
All permissions are enforced consistently across both the web interface and API endpoints, ensuring security regardless of access method. Organizations should carefully plan team structures and role assignments to balance operational efficiency with security requirements, particularly when implementing SSO-based automated role assignment.
For role descriptions, team management guidance, and SSO integration details, see User Roles and Permissions, Team Management, and User and Team Management APIs.
Review the messages field for workflow evaluation details
Check which conditions passed/failed
Check for Common Issues
Condition Mismatch: Identity attributes don't match workflow conditions
Policy State: Policy might be in PAUSED or PENDING state
Source Data: Identity might not exist in the configured data source
Safety Limits: Changes blocked due to a Hard Limit (during processing) or a Predictive Safety Limit (before processing begins). Check the Blocked Tasks page for predictive limit blocks
Validate Identity Attributes
Verify the identity has the expected attribute values
Ensure attribute mappings are configured correctly
Check for data quality issues in the source system
Policy States
Policies can be in the following states:
INITIAL - Newly created, not yet running
RUNNING - Active and processing identities
DRY_RUN - Testing mode without making changes
PAUSED - Temporarily stopped
PENDING - Awaiting configuration or approval
The Dry Run messages will explicitly state why each workflow did or didn't match.
Triggers on
Lifecycle events (CREATE_IDENTITY, ADD_RELATIONSHIP, etc.)
Individual action success or failure
Capability
What It Enables
Availability
Password Reset Workflows
Automatically reset passwords during user lifecycle events (termination, role changes)
Available by default
no_retry_for_failed_workflow
Automated Access Reviews
{{FirstName}} {{LastName}}SPLIT(Email, "@")[1]LEFT_PAD({{employee_id}}, "0", 6)Primary source (default)
Read-only access to Access Profiles
Can create Access Reviews (Root team only)
Access Reviewer
Generally Available
Root only
Read-only access for assigned review purposes only
Read-only access for assigned review purposes only
Limited to assigned review contexts
SCIM Provisioner
Generally Available
Root only
Read-only access to policies and workflows
Read-only access to Access Profiles
SCIM 2.0 user lifecycle management
Integrations Manager
Generally Available
Root, Non-root
Read-only access to policies and workflows
Read-only access to Access Profiles
Integration configuration and management
Integration Owner
Generally Available
Root, Non-root
Read-only access to understand integration impacts
Read-only access to profile assignments
Specific integration ownership and monitoring
Access Reviews Monitor
Generally Available
Root only
Limited read-only access for monitoring review activities
Limited read-only access for monitoring purposes
Access Review progress monitoring without modification
Viewer
Early Access
Root, Non-root
Read-only access for monitoring
Read-only access for monitoring
Requires ROOT_TEAM_VIEWER feature for Root team access
Watcher
Early Access
Root only
Read-only access for monitoring (cannot make changes)
Read-only access for monitoring
View Review Configurations without modification capability
Auditor
Early Access
Root only
Read-only access for audit and compliance purposes
Read-only access for audit purposes
Export audit logs and compliance reporting
Re-assigner
Early Access
Root only
Read-only access with ability to re-assign review results
Read-only access with review result re-assignment
Can reassign Access Review results to different reviewers
OAA Push
Early Access
Root, Non-root
Read-only access for monitoring
Read-only access for monitoring
Upload Open Authorization API (OAA) payloads
Programmatic Key Manager
Early Access
Root, Non-root
Read-only access for monitoring
Read-only access for monitoring
Programmatic API key lifecycle management
OAA CSV Manager
Early Access
Root, Non-root
Limited access for CSV integration management
Limited access related to CSV integrations
Required for CSV Upload integration management
NHI Security Admin
Early Access
Root only
Read-only access with focus on non-human identity security features
Read-only access with NHI focus
Non-Human Identity security dashboards and risk assessments
Reference guide for supported transformation functions and parameters for attribute transformers
This page includes a comprehensive list of all supported transformer functions and parameters. Some commonly used transformation functions include:
Replacing a character with a different one
Removing domains from email addresses
Transforming to upper, lower, title, sentence, camel, or snake case
Using a substring from the original value
See for configuration details, or for terminology definitions.
Each transformer below includes three types of examples:
Basic Usage: Shows the transformer used alone with a simple source attribute
In a Pipeline: Demonstrates chaining multiple transformers together
Example: Provides practical context from Lifecycle Management scenarios
Copy-paste these examples directly into your attribute transformer configuration, adjusting attribute names to match your source of identity.
Removes non-printable characters and replaces non-ASCII characters with their closest ASCII equivalents. Particularly useful for Active Directory sAMAccountName and other legacy systems with strict character requirements.
Note: The ASCII transformer performs operations on the base level, not the extended set.
Interprets the incoming time string as if it were in the specified time zone, then converts it to a UTC time. (example: if the input is "1/2/2025 11pm" and the defined time zone is America/Los_Angeles the function will treat "1/2/2025 11pm" as local time in Los Angeles and output the corresponding UTC time "1/3/2025 7am")
Description: Converts a timestamp to a formatted date string using Go time layout syntax.
Syntax: {attribute | DATE_FORMAT, "layout"} or {attribute | DATE_FORMAT, "output_layout", "input_layout"}
Parameters:
Returns: String — the formatted date/time string
Examples:
Go Time Layout Syntax: Unlike most date formatting systems that use patterns like YYYY-MM-DD, Go uses a reference date: Mon Jan 2 15:04:05 MST 2006. Each component of this specific date represents a format element.
The reference date Mon Jan 2 15:04:05 MST 2006 breaks down as:
Instead of Go layout strings, you can use these named aliases (case-insensitive):
For the full list of named aliases (including kitchen, rfc822, rfc1123, stamp, and others), see Go's standard .
The win32 format outputs the Windows FILETIME format used by Active Directory for attributes like accountExpires. This represents 100-nanosecond intervals since January 1, 1601 UTC.
Notes:
Input must be a valid timestamp
Use with or for timezone handling
When parsing non-standard input dates, provide both output and input layouts
Transforms language to RFC 5646 format.
defines "Tags for Identifying Languages." It does not contain a fixed, exhaustive list of language codes within the RFC itself. Instead, it specifies the structure and rules for constructing language tags, which are then built using codes from various external standards and registries.
Description: Converts all characters in a string to lowercase.
Syntax: {attribute | LOWER}
Parameters:
Returns: String — the input value with all characters converted to lowercase
Examples:
Notes: Only affects alphabetic characters. Numbers and special characters pass through unchanged.
Description: Replaces all occurrences of a substring with a replacement string.
Syntax: {attribute | REPLACE_ALL, "search", "replacement"}
Parameters:
Returns: String — the input with all occurrences of search replaced by replacement
Examples:
Notes:
Case-sensitive matching
To remove characters, use an empty string as the replacement: REPLACE_ALL, "x", ""
For removing multiple different characters, consider instead
Description: Extracts a portion of a string starting at a specified position.
Syntax: {attribute | SUB_STRING, offset, length}
Parameters:
Returns: String — the extracted substring
Examples:
Notes:
Index is 0-based (first character is position 0)
If offset + length exceeds the string length, returns characters up to the end
For extracting just the first N characters, consider as a simpler alternative
Description: Converts all characters in a string to uppercase.
Syntax: {attribute | UPPER}
Parameters:
Returns: String — the input value with all characters converted to uppercase
Examples:
Notes: Only affects alphabetic characters. Numbers and special characters pass through unchanged.
Interprets the incoming time string as if it were in UTC and then converts it to the specified time zone. (example: if the input is "1/2/2025 11pm" and the specified time zone is America/Los_Angeles the function will treat "1/2/2025 11pm" as the UTC time zone and output the corresponding America/Los_Angeles
Basic Usage
Destination Attribute: email
Formatter: {username}
Pipeline Functions: | APPEND, "@company.com"
Result: If username = john.smith, output is [email protected]
In a Pipeline
Destination Attribute: display_name
Formatter: {first_name}
Pipeline Functions: | APPEND, " " | APPEND, "{last_name}"
Result: If first_name = John and last_name = Smith, output is John Smith
Example
Destination Attribute: user_principal_name
Formatter: {first_name}.{last_name}
Pipeline Functions: | LOWER | APPEND, "@contoso.com"
Use case: Generate standardized email addresses for Azure AD user provisioning
None (no parameters required)
Basic Usage
Destination Attribute: username
Formatter: {first_name}
Pipeline Functions: | ASCII
Result: If first_name = Łukasz, output is Lukasz
In a Pipeline
Destination Attribute: login_name
Formatter: {first_name}.{last_name}
Pipeline Functions: | ASCII | LOWER | REMOVE_WHITESPACE
Result: If first_name = José María, last_name = García, output is josemaria.garcia
Example
Destination Attribute: sAMAccountName
Formatter: {first_name}
Pipeline Functions: | ASCII | SUB_STRING, 0, 1 | LOWER
Use case: Generate Active Directory account names that comply with character restrictions while handling international names (converts "Łukasz" to "l")
String - Time Zone String (Optional) - Format
Usage Example
Input:
{activation_date | ASSUME_TIME_ZONE, "America/Los_Angeles"}
{activation_date | ASSUME_TIME_ZONE, "America/Los_Angeles", "RFC3339"}
{activation_date | ASSUME_TIME_ZONE, "-07:00"}
{activation_date | ASSUME_TIME_ZONE, "-07:00", "RFC3339"}
Format (STRING, optional): [alpha2, alpha3, numeric], defaults to alpha2
Usage Example
Input:
{"US" | COUNTRY_CODE_ISO3166, "alpha3"}
Output:
USA
Hours
INTEGER
Yes
Number of hours to add (use negative values to subtract)
Days
INTEGER
No
Number of days to add
Months
INTEGER
No
Number of months to add
Usage Example
Input:
{activation_date | DATE_ADJUST, +1, 2, 3, -1}
Adjusts the date by adding 1 hour, 2 days, 3 months, and subtracting 1 year.
{activation_date | DATE_ADJUST, +1, 2, 3, -1, "RFC3339"}
{activation_date | DATE_ADJUST, +1, 2, 3, -1, "2006-01-02T15:04:05Z07:00"}
Example
If the input date is 2021-01-01 00:00:00 and you apply DATE_ADJUST, +1, 2, 3, -1, the output is 2020-04-03 01:00:00 (added 1 hour, 2 days, 3 months, subtracted 1 year).
Days
INTEGER
Yes
Number of days to add (use negative values to subtract)
Format
STRING
No
Output format (defaults to auto-detection)
Usage Example
Input:
{activation_date | DATE_ADJUST_DAY, +1}
Adds 1 day to the activation date.
{activation_date | DATE_ADJUST_DAY, +1, "RFC3339"}
{activation_date | DATE_ADJUST_DAY, +1, "2006-01-02T15:04:05Z07:00"}
Example
If the input date is 2021-01-01 00:00:00 and you apply DATE_ADJUST_DAY, +1, the output is 2021-01-02 00:00:00.
03-15-2024
{start_date | DATE_FORMAT, "2006-01-02", "01-02-2006"}
2024-03-15
Month
Jan
3-letter abbreviation
Month
January
Full month name
Day
02
2-digit day (01-31)
Day
2
1 or 2-digit day (1-31)
Day
_2
Space-padded day
Hour
15
24-hour format (00-23)
Hour
03 or 3
12-hour format (01-12 or 1-12)
Minute
04
Minutes (00-59)
Second
05
Seconds (00-59)
AM/PM
PM
Uppercase AM/PM
AM/PM
pm
Lowercase am/pm
Timezone
MST
Timezone abbreviation
Timezone
-0700
Numeric offset
Timezone
Z0700
Z for UTC, offset otherwise
Human readable
Jan 2, 2006
Mar 15, 2023
Date only
2006-01-02
2023-03-15
win32
Active Directory FILETIME
133234218250000000
Basic Usage
Destination Attribute: initial
Formatter: {first_name}
Pipeline Functions: | FIRST_N, 1
Result: If first_name = John, output is J
In a Pipeline
Destination Attribute: username
Formatter: {first_name}.{last_name}
Pipeline Functions: | FIRST_N, 1 | LOWER
Result: If first_name = John, output is j
Example
Destination Attribute: username
Formatter: {first_name}
Pipeline Functions: | FIRST_N, 1 | LOWER
Use case: Create abbreviated usernames in the format "j.smith" by combining first initial with last name
EntityType
STRING
Yes
The type of graph entity to search (e.g., Employee, OktaUser, ActiveDirectoryUser)
SourceAttribute
STRING
Yes
The attribute on the entity to match against the input value
TargetAttribute
STRING
Yes
The attribute to return from the matched entity. Use id or type for built-in entity properties.
How It Works
The input value (before the |) is used as the search term
The transformer finds an entity of type EntityType where SourceAttribute equals the input value
It returns the TargetAttribute value from that entity
If no entity is found and DefaultValue is provided, the default is returned; otherwise an error occurs
Special Behaviors
Empty input value
Returns empty string "" (no error)
Input wrapped in brackets [value]
Brackets are automatically stripped before lookup
TargetAttribute is id
Returns the entity's unique graph ID
TargetAttribute is type
Returns the entity's type name
No entity found, no default
Returns error with details about the failed lookup
Target attribute missing on entity
Returns error (unless default provided)
When used in sync workflows, this transformer checks previously computed values from the current job before querying the graph cache. This optimization prevents redundant lookups during batch operations.
Usage Examples
Example 1: Get manager's name from employee ID
Input: 12345 (an employee ID)
Finds: An Employee entity where employee_id = 12345
Returns: The manager_name attribute from that employee (e.g., Jane Smith)
Example 2: Get department from email with a default value
Input: [email protected]
Finds: An OktaUser entity where email = [email protected]
Returns: The department attribute, or Unknown if no user is found
Example 3: Chain with other transformers
Takes the employee ID from Workday
Looks up the employee's cost center
Converts the result to uppercase
Example 4: Get entity's graph ID
Looks up an OktaUser by login
Returns the entity's unique graph ID (useful for subsequent lookups)
EntityType
STRING
Yes
The type of graph entity to search (e.g., Employee, OktaUser)
SourceAttribute
STRING
Yes
The attribute on entities to match against the input value
TargetAttribute
STRING
Yes
How It Works
The input value (before the |) is used as the search term
The transformer finds ALL entities of type EntityType where SourceAttribute equals the input value
It collects the TargetAttribute value from each matched entity
Results are joined using the separator (comma by default)
If no entities are found, returns an empty string
Special Behaviors
Empty input value
Returns empty string "" (no error)
Input wrapped in brackets [value]
Brackets are automatically stripped before lookup
No entities found
Returns empty string "" (no error)
Target attribute missing on some entities
Those entities are skipped (no error logged)
TargetAttribute is id
Returns the entity's unique graph ID
TargetAttribute is type
Returns the entity's type name
Unlike FROM_ENTITY_ATTRIBUTE, this transformer does not error when entities are missing the target attribute—it silently skips them. Verify your results include all expected values.
Usage Examples
Example 1: Get all group names for a user
Input: [email protected]
Finds: All OktaGroup entities where member_email = [email protected]
Returns: Engineering,Sales,All-Employees (comma-separated group names)
Example 2: Custom separator for multi-value attributes
Input: 12345 (an owner ID)
Finds: All Application entities owned by this user
Returns: Slack;Salesforce;Jira (semicolon-separated)
Example 3: Get all entity IDs
Finds all employees in the Engineering department
Returns their graph IDs as a comma-separated list
Example 4: Get entity types
Looks up all identity nodes with the given email
Returns their type names (e.g., OktaUser,ActiveDirectoryUser,WorkdayWorker)
Parameter Format
None (no parameters required)
Usage Example
Input:
{"Spanish" | LANGUAGE_RFC5646}
Output:
es
Usage Example
Input:
{"helloworld" | LAST_N, 5}
Output:
world
Basic Usage
Destination Attribute: employee_id
Formatter: {id}
Pipeline Functions: | LEFT_PAD, 5, "0"
Result: If id = 123, output is 00123
In a Pipeline
Destination Attribute: formatted_code
Formatter: {cost_center}
Pipeline Functions: | TRIM_CHARS, "0" | LEFT_PAD, 6, "0"
Result: If cost_center = 001234, output is 001234 (first removes then re-applies padding)
Example
Destination Attribute: employee_id
Formatter: {employee_id}
Pipeline Functions: | REMOVE_CHARS, "#" | TRIM_CHARS, "0" | LEFT_PAD, 6, "0"
Use case: Standardize employee IDs to 6-digit format (converts "##001234##" to "001234")
TableName
STRING
Yes
Name or ID of the lookup table
ColumnName
STRING
Yes
Column to search for the input value
ReturnColumnName
STRING
Yes
Column whose value to return
How It Works
The transformer first tries to match TableName against configured lookup table names
If no name match is found, TableName is treated as a table ID
The input value is searched in ColumnName
If found, the corresponding ReturnColumnName value is returned
If not found and DefaultValue is provided, the default is returned
If not found and no default, an error is returned
Table name matching is case-sensitive. Ensure the table name in your transformer exactly matches the lookup table name defined in your policy, including capitalization.
Special Behaviors
Table name not found
Falls back to treating the parameter as a table ID
Value not found in table, default provided
Returns the default value
Value not found in table, no default
Returns error with lookup details
Other lookup errors
Returns error with full context
Basic Usage
Destination Attribute: city
Formatter: {location_code}
Pipeline Functions: | LOOKUP, "locationTable", "location_code", "city"
Result: If location_code = IL001 and locationTable contains that code, output is Chicago
With Default Value
Destination Attribute: region
Formatter: {office_code}
Pipeline Functions: | LOOKUP, "regionTable", "code", "region_name", "Unknown Region"
Result: Returns mapped region name, or Unknown Region if code not in table
In a Pipeline
Destination Attribute: office_email_domain
Formatter: {office_code}
Pipeline Functions: | LOOKUP, "officeTable", "code", "domain" | LOWER
Result: Looks up domain from table, then converts to lowercase
Example
Destination Attribute: office_location
Formatter: {location}
Pipeline Functions: | LOOKUP, "locationTable", "location_code", "city"
Use case: Convert abbreviated location codes (like "IL001", "CA002") to full city names for user profiles, maintaining consistency across different source systems
Usage Example
Input:
{"Hello World" | LOWER_SNAKE_CASE}
Output:
hello_world
Basic Usage
Destination Attribute: identifier
Formatter: {field_name}
Pipeline Functions: | LOWER_CAMEL_CASE
Result: If field_name = hello world, output is helloWorld
In a Pipeline
Destination Attribute: api_field
Formatter: {attribute_name}
Pipeline Functions: | TRIM | LOWER_CAMEL_CASE
Result: If attribute_name = User Display Name , output is userDisplayName
Example
Destination Attribute: json_property
Formatter: {column_name}
Pipeline Functions: | LOWER_CAMEL_CASE
Use case: Convert database column names or display names to JSON property names following JavaScript/TypeScript conventions
Basic Usage
Destination Attribute: username
Formatter: {first_name}.{last_name}
Pipeline Functions: | LOWER | NEXT_NUMBER, 2, 3
Result: Generates john.smith, john.smith2, john.smith3, john.smith4 as fallback options
In a Pipeline
Destination Attribute: email
Formatter: {first_name}{last_name}
Pipeline Functions: | LOWER | NEXT_NUMBER, 2, 5 | APPEND, "@company.com"
Result: Creates email alternatives: [email protected], [email protected], etc.
Example
Destination Attribute: user_principal_name
Formatter: (see conditional example below)
Pipeline Functions: N/A (used within IF statement)
Use case: Intelligent username generation with length-based fallbacks:
This handles both name length constraints and uniqueness conflicts automatically.
Parameter Format
Integer (NUMBER, required), Length (NUMBER, required)
Usage Example
Input:
{"foobar" | NEXT_NUMBER, 1, 12, 4}
Output:
foob foo1 foo2 foo3 foo4 foo5 foo6 foo7 foo8 foo9 fo10 fo11 fo12
Usage Example
Input:
{NOW}
{| NOW, "RFC3339"}
{NOW, "RFC3339"}
{NOW, "2006-01-02T15:04:05Z07:00"}
Usage Example
Input:
{"+1-800-555-1212" | PHONE_NUMBER_E164}
Output:
+18005551212
Basic Usage
Destination Attribute: location_code
Formatter: {city_code}
Pipeline Functions: | PREPEND, "CORP_"
Result: If city_code = NYC, output is CORP_NYC
In a Pipeline
Destination Attribute: contractor_username
Formatter: {username}
Pipeline Functions: | PREPEND, "c-" | LOWER
Result: If username = JSmith, output is c-jsmith
Example
Destination Attribute: account_name
Formatter: {username}
Pipeline Functions: | PREPEND, "c-"
Use case: Identify contractor accounts by prefixing their usernames (converts "jsmith" to "c-jsmith" to distinguish from employee accounts)
Usage Example
Input:
{| RANDOM_ALPHANUMERIC_GENERATOR, 8}
Output:
a1B2c3D4
Note: This transformer generates an alphanumeric string with eight characters.
Basic Usage
Destination Attribute: test_id
Formatter: TEST
Pipeline Functions: | RANDOM_INTEGER, 1000, 9999
Result: Output is TEST followed by random number like TEST4827
In a Pipeline
Destination Attribute: temp_username
Formatter: user
Pipeline Functions: | RANDOM_INTEGER, 1, 100 | APPEND, "@temp.local"
Result: Output like [email protected]
Example
Destination Attribute: temporary_id
Formatter: TEST
Pipeline Functions: | RANDOM_INTEGER, 1000, 9999
Use case: Generate unique test identifiers for sandbox environments (produces values like "TEST4827", "TEST8391")
Usage Example
Input:
{| RANDOM_NUMBER_GENERATOR, 4}
Output:
4829
Note: This transformer generates a random numeric string with four characters.
Usage Example
Input:
{| RANDOM_STRING_GENERATOR, 6}
Output:
uFkLxw
Note: This transformer generates a random alpha string with six characters.
Basic Usage
Destination Attribute: username
Formatter: {email}
Pipeline Functions: | REMOVE_CHARS, "@."
Result: If email = [email protected], output is johndoeexamplecom
In a Pipeline
Destination Attribute: phone
Formatter: {phone_number}
Pipeline Functions: | REMOVE_CHARS, "()- "
Result: If phone_number = (123) 456-7890, output is 1234567890
Example
Destination Attribute: user_id
Formatter: {email}
Pipeline Functions: | REMOVE_CHARS, "-"
Use case: Create clean user IDs from email addresses by removing hyphens (converts "" to "")
Usage Example
Input:
{"José" | REMOVE_DIACRITICS}
Output:
Jose
Basic Usage
Destination Attribute: username
Formatter: {email}
Pipeline Functions: | REMOVE_DOMAIN
Result: If email = [email protected], output is john.smith
In a Pipeline
Destination Attribute: login_name
Formatter: {email}
Pipeline Functions: | REMOVE_DOMAIN | REPLACE_ALL, ".", "_"
Result: If email = [email protected], output is john_smith
Example
Destination Attribute: username
Formatter: {email}
Pipeline Functions: | REMOVE_DOMAIN
Use case: Extract usernames for target systems that don't use email-style logins (converts "[email protected]" to "jsmith")
Basic Usage
Destination Attribute: username
Formatter: {display_name}
Pipeline Functions: | REMOVE_WHITESPACE
Result: If display_name = John A. Doe, output is JohnA.Doe
In a Pipeline
Destination Attribute: tag
Formatter: {department}
Pipeline Functions: | REMOVE_WHITESPACE | LOWER
Result: If department = Human Resources, output is humanresources
Example
Destination Attribute: cost_center_code
Formatter: {cost_center}
Pipeline Functions: | REMOVE_WHITESPACE
Use case: Ensure cost center codes have no embedded spaces for system integration (converts "CC 12345" to "CC12345")
Pad (CHARACTER, optional): Default is space
Usage Example
Input:
{"123" | RIGHT_PAD, 5, "0"}
Output:
12300
Basic Usage
Destination Attribute: description
Formatter: {notes}
Pipeline Functions: | SENTENCE_CASE
Result: If notes = THE QUICK BROWN FOX, output is The quick brown fox
In a Pipeline
Destination Attribute: formatted_notes
Formatter: {comment}
Pipeline Functions: | TRIM | SENTENCE_CASE
Result: If comment = IMPORTANT MESSAGE HERE , output is Important message here
Example
Destination Attribute: job_description
Formatter: {job_title}
Pipeline Functions: | SENTENCE_CASE
Use case: Normalize job descriptions from all-caps source data to sentence case for cleaner display
Usage Example
Input:
{"[email protected]" | SPLIT, "@", 0}
Output:
first.last
Note: This transformer returns the results where the index starts at zero (0).
Basic Usage
Destination Attribute: display_name
Formatter: {full_name}
Pipeline Functions: | TITLE_CASE
Result: If full_name = john doe, output is John Doe
In a Pipeline
Destination Attribute: formatted_name
Formatter: {name}
Pipeline Functions: | TRIM | TITLE_CASE
Result: If name = JANE SMITH , output is Jane Smith
Example
Destination Attribute: display_name
Formatter: {username}
Pipeline Functions: | TITLE_CASE
Use case: Format dot-separated usernames for display (converts "john.doe" to "John.Doe")
Basic Usage
Destination Attribute: username
Formatter: {display_name}
Pipeline Functions: | TRIM
Result: If display_name = " John Doe ", output is John Doe
In a Pipeline
Destination Attribute: email
Formatter: {email_address}
Pipeline Functions: | TRIM | LOWER
Result: If email_address = " [email protected] ", output is [email protected]
Example
Destination Attribute: display_name
Formatter: {display_name}
Pipeline Functions: | TRIM
Use case: Clean up imported user data that may have padding whitespace from CSV files or database fields
Basic Usage
Destination Attribute: employee_id
Formatter: {id_number}
Pipeline Functions: | TRIM_CHARS, "0."
Result: If id_number = 000.123.000, output is 123
In a Pipeline
Destination Attribute: clean_code
Formatter: {code}
Pipeline Functions: | TRIM_CHARS, "-_" | UPPER
Result: If code = ---ABC123___, output is ABC123
Example
Destination Attribute: office_code
Formatter: {office_code}
Pipeline Functions: | TRIM_CHARS, ".0" | TRIM_CHARS_RIGHT, ".USCA"
Use case: Clean up office codes with variable padding (converts "000.8675309.USCA" to "8675309")
Basic Usage
Destination Attribute: cost_center
Formatter: {cost_center_code}
Pipeline Functions: | TRIM_CHARS_LEFT, "0"
Result: If cost_center_code = 00012345, output is 12345
In a Pipeline
Destination Attribute: identifier
Formatter: {raw_id}
Pipeline Functions: | TRIM_CHARS_LEFT, "x" | UPPER
Result: If raw_id = xxxABC123, output is ABC123
Example
Destination Attribute: cost_center
Formatter: {cost_center}
Pipeline Functions: | TRIM_CHARS_LEFT, "0"
Use case: Remove leading zeros from cost center codes while preserving trailing zeros (converts "00012345" to "12345")
Basic Usage
Destination Attribute: office_code
Formatter: {raw_office_code}
Pipeline Functions: | TRIM_CHARS_RIGHT, "0"
Result: If raw_office_code = ABC12300, output is ABC123
In a Pipeline
Destination Attribute: clean_code
Formatter: {code}
Pipeline Functions: | TRIM_CHARS_RIGHT, "temp" | UPPER
Result: If code = ABC123temp, output is ABC123
Example
Destination Attribute: office_code
Formatter: {office_code}
Pipeline Functions: | TRIM_CHARS_RIGHT, "0"
Use case: Remove trailing zeros from office codes while preserving leading zeros (converts "ABC12300" to "ABC123")
Usage Example
Input:
{"hello world" | UPPER_CAMEL_CASE}
Output:
HelloWorld
Usage Example
Input:
{"hello world" | UPPER_SNAKE_CASE}
Output:
HELLO_WORLD
America/Los_Angeles-07:00Parameter Format
String - Time Zone String (Optional) - Format
Usage Example
Input:
{activation_date | UTC_TO_TIME_ZONE, "America/Los_Angeles"}
{activation_date | UTC_TO_TIME_ZONE, "America/Los_Angeles", "RFC3339"}
{activation_date | UTC_TO_TIME_ZONE, "-07:00"}
{activation_date | UTC_TO_TIME_ZONE, "-07:00", "RFC3339"}
None (no parameters required)
Usage Example
Input:
{| UUID_GENERATOR}
Output:
123e4567-e89b-12d3-a456-426614174000
Basic Usage
Destination Attribute: employee_id
Formatter: {id}
Pipeline Functions: | ZERO_PAD, 6
Result: If id = 1234, output is 001234
Example
Destination Attribute: badge_number
Formatter: {badge_id}
Pipeline Functions: | ZERO_PAD, 6
Use case: Standardize badge numbers to 6-digit format for access control systems (converts "1234" to "001234", leaves "12345678" unchanged, and passes non-numeric values like "admin" through unchanged)
layout
Yes
String
Go time format layout or named alias (see tables below)
input_layout
No
String
Format of the input data (if non-standard)
2024-03-15T14:30:00Z
{hire_date | DATE_FORMAT, "2006-01-02"}
2024-03-15
2024-03-15T14:30:00Z
{hire_date | DATE_FORMAT, "01/02/2006"}
03/15/2024
2024-03-15T14:30:00Z
{hire_date | DATE_FORMAT, "Jan 2, 2006"}
Mar 15, 2024
2024-03-15T14:30:00Z
{hire_date | DATE_FORMAT, "dateonly"}
2024-03-15
Year
2006
4-digit year
Year
06
2-digit year
Month
01
2-digit month (01-12)
Month
1
ISO 8601 / RFC3339
2006-01-02T15:04:05Z07:00
2023-03-15T14:30:25-07:00
US date
01/02/2006
03/15/2023
European date
02/01/2006
15/03/2023
LDAP/AD format
20060102150405Z
dateonly
2006-01-02
2023-03-15
timeonly
15:04:05
14:30:25
datetime
2006-01-02 15:04:05
2023-03-15 14:30:25
rfc3339
2006-01-02T15:04:05Z07:00
(none)
—
—
This function takes no parameters
JOHN
{first_name | LOWER}
john
{email | LOWER}
MixedCase123
{code | LOWER}
mixedcase123
search
Yes
String
The substring to find
replacement
Yes
String
The string to replace matches with
John Smith
{display_name | REPLACE_ALL, " ", "_"}
John_Smith
EMP-12345
{employee_id | REPLACE_ALL, "-", ""}
EMP12345
john [email protected]
{email | REPLACE_ALL, " ", "."}
offset
Yes
Integer
Starting position (0-based index)
length
Yes
Integer
Number of characters to extract
John
{first_name | SUB_STRING, 0, 1}
J
EMP12345
{employee_id | SUB_STRING, 3, 4}
1234
{email | SUB_STRING, 0, 10}
john.smith
(none)
—
—
This function takes no parameters
sales
{department | UPPER}
SALES
john smith
{username | REMOVE_WHITESPACE | UPPER}
JOHNSMITH
Smith
{name | UPPER}
SMITH
1 or 2-digit month (1-12)
20230315143025Z
2023-03-15T14:30:25-07:00
{12345 | FROM_ENTITY_ATTRIBUTE, "Employee", "employee_id", "manager_name"}{[email protected] | FROM_ENTITY_ATTRIBUTE, "OktaUser", "email", "department", "Unknown"}{$workday.employee_id | FROM_ENTITY_ATTRIBUTE, "Employee", "id", "cost_center" | UPPERCASE}{john.smith | FROM_ENTITY_ATTRIBUTE, "OktaUser", "login", "id"}{[email protected] | FROM_MANY_ENTITIES_ATTRIBUTE, "OktaGroup", "member_email", "name"}{12345 | FROM_MANY_ENTITIES_ATTRIBUTE, "Application", "owner_id", "app_name", ";"}{Engineering | FROM_MANY_ENTITIES_ATTRIBUTE, "Employee", "department", "id"}{[email protected] | FROM_MANY_ENTITIES_ATTRIBUTE, "Identity", "email", "type"}IF sys_attr__would_be_value_len le 20
{first_name | LOWER}.{last_name | LOWER | NEXT_NUMBER, 2, 3}
ELSE IF sys_attr__would_be_value_len le 30
{first_name | LOWER}.{last_name | LOWER | FIRST_N, 1 | NEXT_NUMBER, 2, 3}
ELSE
{first_name | LOWER | FIRST_N, 1}.{last_name | LOWER | FIRST_N, 1 | NEXT_NUMBER, 2, 3}Years
INTEGER
No
Number of years to add
Format
STRING
No
Output format (defaults to auto-detection)
DefaultValue
STRING
No
Value to return if no matching entity is found
The attribute to return from all matched entities. Use id or type for built-in entity properties.
Separator
STRING
No
Character(s) to join multiple results (defaults to ,)
Result ordering
Results appear in graph discovery order (not guaranteed to be consistent)
DefaultValue
STRING
No
Value to return if lookup fails