Quick Start
Step-by-step tutorial demonstrating the complete Access AuthZ workflow
This tutorial demonstrates the core Access Request API workflow through a practical SCIM integration example. You will:
Integrate Veza with a target system using SCIM-compliant APIs
Call Veza APIs to trigger granting or removal of entitlements (in this case, SCIM groups) to SCIM Users
Create users and modify attributes for existing users
You will also use APIs to configure system settings and get integration capabilities, request status, and Access Graph query results.
This covers the standard workflow from initial configuration through user creation and group management:
Veza Environment Setup: Enable Access Requests and configure auto-approval
Lifecycle Management Configuration: Enable provisioning on an existing integration
User Creation: Use an Access Request and sync identities configuration to create accounts
Entity Discovery: Query the Access Graph to find users and groups
Relationship Management: Assign users to groups via Direct API
Status Monitoring: Track request progress and completion
This guide demonstrates the complete workflow. For additional patterns and troubleshooting, see the FAQ and the endpoint documentation:
CreateAccessRequest - Grant or revoke access
GetAccessRequest - Check request status
CreatePolicyIdentityAccessRequest - Policy-based provisioning
Prerequisites
Before starting, complete the Prerequisites and Setup guide.
Step 1: Identity the LCM datasource
List available LCM datasources:
curl -X GET "https://your-instance.vezacloud.com/api/v1/providers/datasources/lifecycle_managers" \
-H "authorization: Bearer YOUR_API_TOKEN"Look for your integration in the response:
{
"values": [
{
"id": "0198cfaf-1f97-7698-a760-05b98833ffd3",
"datasource": {
"name": "SCIM DEMO Lifecycle Management",
"provider_id": "0198cf75-db63-7709-86c3-8ec8fc124382"
},
"definition": {
"actions": [
{"type": "SYNC_IDENTITIES"},
{"type": "MANAGE_RELATIONSHIPS"}
]
}
}
]
}Save the id field for future requests.
Step 2: Create a user account
Create a new user account with the selected attributes using a direct Access Request:
curl -X POST "https://your-instance.vezacloud.com/api/private/lifecycle_management/access_requests" \
-H "authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"request_type": "GRANT",
"request_source": "ACCESS_REQUEST",
"reason": "Quickstart guide - creating test user",
"datasource_id": "0198cfaf-1f97-7698-a760-05b98833ffd3",
"assignee_entity_type": "OAA.SCIM.User",
"sync_config": {
"config": {
"create_allowed": true,
"continuous_sync": false,
"entity_attribute_transformers": [
{
"destination_attribute": "user_name",
"destination_value_formatter": "quickstart.test.user",
"unique_identifier": true
},
{
"destination_attribute": "display_name",
"destination_value_formatter": "Quickstart Test User"
},
{
"destination_attribute": "emails",
"destination_value_formatter": "[email protected]"
}
]
}
}
}'Expected Response:
{
"value": {
"id": "0198cfaf-9e30-7b4b-bd88-6c1b9b94698a",
"state": "PLAN_SELECTED",
"request_type": "GRANT",
"reason": "Quickstart guide - creating test user",
"assignee_entity_type": "OAA.SCIM.User",
"sync_config": {
"config": {
"create_allowed": true,
"continuous_sync": false,
"entity_attribute_transformers": [
{
"destination_attribute": "user_name",
"destination_value_formatter": "quickstart.test.user",
"unique_identifier": true
},
{
"destination_attribute": "display_name",
"destination_value_formatter": "Quickstart Test User"
},
{
"destination_attribute": "emails",
"destination_value_formatter": "[email protected]"
}
]
}
}
}
}Save the request id to monitor progress.
Step 3: Monitor request status
Check if your user creation has completed:
curl -X GET "https://your-instance.vezacloud.com/api/private/lifecycle_management/access_requests/0198cfaf-9e30-7b4b-bd88-6c1b9b94698a" \
-H "authorization: Bearer YOUR_API_TOKEN"When the job is successful, you will see:
{
"value": {
"id": "0198cfaf-9e30-7b4b-bd88-6c1b9b94698a",
"state": "COMPLETED",
"assignee_entity_id": "custom_provider:application:...:user:bc2bfa1c-4c13-4446-8402-76f74a371144",
"assignee_entity_type": "OAA.SCIM.User",
"completed_at": "2025-08-22T02:50:51.372691185Z",
"error_message": ""
}
}Possible states:
INITIAL- Request has been createdWAITING_FOR_APPROVAL- Request awaiting approvalNEEDS_MORE_INFORMATION- Approver requested more informationPLAN_SELECTED- Request is processingCOMPLETED- Request completed successfullyERRORED- Checkerror_messagefield for detailsREJECTED- Request was rejectedCANCELED- Request was canceledJIT_REVOKED- Just-in-time access was revokedEXTERNAL_RUNNING- External system is processing request
Step 4: Find available groups
Query for groups you can assign the user to using the Access Graph:
curl -X POST "https://your-instance.vezacloud.com/api/v1/assessments/query_spec:nodes" \
-H "authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"query_type": "SOURCE_TO_DESTINATION",
"node_relationship_type": "EFFECTIVE_ACCESS",
"source_node_types": {
"nodes": [
{
"node_type": "OAA.SCIM.Group"
}
]
}
}'Look for groups in the response:
{
"values": [
{
"id": "custom_provider:application:...:group:a40d16d5-7baa-4152-bc7a-664840603454",
"type": "OAA.SCIM.Group",
"properties": {
"name": "Test Group 001"
}
}
],
"next_page_token": "",
"has_more": false
}Step 5: Query for the created user
Find your newly created user's Access Graph ID:
curl -X POST "https://your-instance.vezacloud.com/api/v1/assessments/query_spec:nodes" \
-H "authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"query_type": "SOURCE_TO_DESTINATION",
"node_relationship_type": "EFFECTIVE_ACCESS",
"source_node_types": {
"nodes": [
{
"node_type": "OAA.SCIM.User"
}
]
}
}'Find the user by name in the response:
{
"values": [
{
"id": "custom_provider:application:...:user:bc2bfa1c-4c13-4446-8402-76f74a371144",
"type": "OAA.SCIM.User",
"properties": {
"name": "Quickstart Test User",
"customprop_user_name": "quickstart.test.user"
}
}
],
"next_page_token": "",
"has_more": false
}Step 6: Assign user to group
Add your user to a group using the direct Access Request API:
curl -X POST "https://your-instance.vezacloud.com/api/private/lifecycle_management/access_requests" \
-H "authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"request_type": "GRANT",
"request_source": "ACCESS_REQUEST",
"reason": "Quickstart guide - adding user to group",
"datasource_id": "0198cfaf-1f97-7698-a760-05b98833ffd3",
"assignee_entity_type": "OAA.SCIM.User",
"assignee_entity_id": "custom_provider:application:...:user:bc2bfa1c-4c13-4446-8402-76f74a371144",
"target_entity_type": "OAA.SCIM.Group",
"target_entity_ids": ["custom_provider:application:...:group:a40d16d5-7baa-4152-bc7a-664840603454"]
}'Expected Response:
{
"value": {
"id": "0198cfb4-0adb-740b-8e2d-7a7c09044996",
"state": "PLAN_SELECTED",
"request_type": "GRANT",
"assignee_entity_name": "Quickstart Test User",
"target_entity_names": ["Test Group 001"],
"entitlements": [
{
"entity_type": "OAA.SCIM.Group",
"entity_id": "custom_provider:application:...:group:a40d16d5-7baa-4152-bc7a-664840603454"
}
]
}
}Monitor this request using the same method as Step 3.
Step 7: Remove user from group (Optional)
To finish testing the grant/revoke cycle, you can remove the user from the group:
curl -X POST "https://your-instance.vezacloud.com/api/private/lifecycle_management/access_requests" \
-H "authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"request_type": "REVOKE",
"request_source": "ACCESS_REQUEST",
"reason": "Quickstart guide - removing user from group",
"datasource_id": "0198cfaf-1f97-7698-a760-05b98833ffd3",
"assignee_entity_type": "OAA.SCIM.User",
"assignee_entity_id": "custom_provider:application:...:user:bc2bfa1c-4c13-4446-8402-76f74a371144",
"target_entity_type": "OAA.SCIM.Group",
"target_entity_ids": ["custom_provider:application:...:group:a40d16d5-7baa-4152-bc7a-664840603454"]
}'Expected Response:
{
"value": {
"id": "0198cfb4-dff5-7acf-a3ee-165bb2cda52c",
"state": "PLAN_SELECTED",
"request_type": "REVOKE",
"assignee_entity_name": "Quickstart Test User",
"target_entity_names": ["Test Group 001"]
}
}After the request completes (state: "COMPLETED"), verify in your SCIM server that the user has been removed from the group's members array.
Verification
Check the target application
Veza's Access Graph will not refresh until the next scheduled extraction, or you manually trigger an extraction. You can trigger an extraction in Veza by opening the integration details and clicking Start Extraction on the Data Sources tab.
In this example, we query the SCIM server to confirm the changes.
Verify the changes were made in your target system:
# Check if user was created
curl -X GET "http://your-scim-server/Users" \
-H "Authorization: Bearer YOUR_SCIM_TOKEN"Look for the user in the response:
{
"totalResults": 1,
"Resources": [
{
"id": "bc2bfa1c-4c13-4446-8402-76f74a371144",
"userName": "quickstart.test.user",
"displayName": "Quickstart Test User",
"active": true,
"emails": [{"value": "[email protected]"}],
"meta": {
"resourceType": "User",
"lastModified": "2025-08-22T02:50:51.252263"
}
}
]
}Verify the user attributes match the request:
userNameshould match yourdestination_value_formatterforuser_namedisplayNameshould match yourdestination_value_formatterfordisplay_nameemailsshould contain your specified email addressactive: trueconfirms the user is enabled
Check group members for assigned users:
# Check if user was added to group
curl -X GET "http://your-scim-server/Groups/GROUP_ID" \
-H "Authorization: Bearer YOUR_SCIM_TOKEN"The response should show:
{
"id": "a40d16d5-7baa-4152-bc7a-664840603454",
"displayName": "Test Group 001",
"members": [
{
"value": "bc2bfa1c-4c13-4446-8402-76f74a371144",
"display": "Quickstart Test User",
"$ref": "/Users/bc2bfa1c-4c13-4446-8402-76f74a371144"
}
],
"meta": {
"lastModified": "2025-08-22T02:55:41.035765"
}
}The
membersarray contains an entry with your user's IDdisplaymatches your user's display nameThe
lastModifiedtimestamp shows recent changes (after your API call)$refprovides the direct link to the SCIM user resource
Troubleshooting:
If verification fails, check the Access Request state for errors
Unexpected attributes can indicate issues with
entity_attribute_transformersvaluesEmpty members arrays indicate that a group assignment has failed
lastModifiedtimestamp can indicate when an operation may not yet be complete
Check request history
List all your access requests to see the complete history:
curl -X GET "https://your-instance.vezacloud.com/api/private/lifecycle_management/access_requests?page_size=10" \
-H "authorization: Bearer YOUR_API_TOKEN"You have now completed the Access Request API example workflow!
Next steps
See the endpoint documentation for complete API details:
CreateAccessRequest - Grant or revoke access
GetAccessRequest - Check request status
CreatePolicyIdentityAccessRequest - Policy-based provisioning
Review the FAQ for common questions and additional examples
Check Prerequisites and Setup for production deployment guidance
Last updated
Was this helpful?
