All pages
Powered by GitBook
1 of 5

Loading...

Loading...

Loading...

Loading...

Loading...

Cohort Role Analysis

Analyze roles accessible to Snowflake users within a specified cost center.

Early Access: This API is provided in Early Access. Please contact our customer support team for more information and to enable this feature.

Overview

The Cohort Role Analysis API provides insights into role accessibility for Snowflake users within a specified cost center. It identifies which roles are accessible to users in that cost center and orders them by least privilege, helping to establish common access patterns and standardize role assignments. The response includes:

  • A list of roles accessible to users in the cost center

  • An indication of whether these roles are accessible to all users or only some users in the cost center

The API first attempts to find roles that are accessible to all principals (users) in the cost center. If no roles are accessible to all principals, it falls back to returning roles that are accessible by at least one principal, indicated by the accessibility_type field in the response.

Use cases and features

This API can help organizations understand common access patterns within organizational units and can support role standardization efforts:

  1. Role Standardization: Identify common roles used within organizational units

  2. Access Pattern Analysis: Discover shared access patterns among users in the same cost center

  3. Least Privilege Implementation: Find roles that provide necessary access with minimal permissions

  4. Onboarding Planning: Determine appropriate roles for new hires based on their cost center

Limitations

  • Role analysis is based on cost center information, which must be properly configured in your system.

Cohort Role Analysis API

Request Parameters

The API accepts a request object with the following parameters:

Parameter
Type
Required
Description

cost_center

string

Yes

The identifier for the cost center whose roles should be analyzed

limit

uint32

No

The maximum number of roles to return (defaults to 5 if not specified)

Protocol Definition

Proto Message Definitions

The API uses the following protocol buffer message definitions:

message CohortRoleAnalysisRequest {
  string cost_center = 1;
  uint32 limit = 2;
}

enum GranteeAccessibility {
  ALL_PRINCIPALS = 0; // Grantees accessible from all principals
  ANY_PRINCIPAL = 1;  // Grantees accessible from at least one principal
}

message CohortRoleAnalysisResponse {
  repeated string grantee_ids = 1;
  GranteeAccessibility accessibility_type = 2;
}

Response Structure

The API returns a response object with the following fields:

Field
Type
Description

grantee_ids

string[]

A list of role IDs that are accessible to users in the specified cost center

accessibility_type

GranteeAccessibility

Indicates whether roles were accessible to all principals or any principal

Accessibility Types

The accessibility_type field can have one of the following values:

Value
Description

ALL_PRINCIPALS

Roles accessible from all principals in the cost center

ANY_PRINCIPAL

Roles accessible from at least one principal in the cost center

Note: If no roles are accessible to all principals in the cost center, the API falls back to returning roles accessible by any principal, and the accessibility_type will be set to ANY_PRINCIPAL.

Usage Example

Example 1: Roles Accessible to All Principals

Request

{
  "cost_center": "CC-SALES",
  "limit": 5
}

Response

The response indicates these roles are accessible to all users in the cost center:

{
  "grantee_ids": [
    "example-snowflake.com/role/WORKSPACE_LOGS_ROLE",
    "example-snowflake.com/role/DATA_LINEAGE_READONLY_ROLE",
    "example-snowflake.com/role/WAREHOUSE_USER_ROLE"
  ],
  "accessibility_type": "ALL_PRINCIPALS"
}

Example 2: Roles Accessible to Any Principal

Request

{
  "cost_center": "CC-MARKETING"
}

Response

The response indicates no roles are accessible to all users, but these roles are accessible to at least one user in the cost center:

{
  "grantee_ids": [
    "example-snowflake.com/role/MARKETING_PARTNER_READONLY_ROLE",
    "example-snowflake.com/role/MARKETING_ENTERPRISE_READONLY_ROLE",
    "example-snowflake.com/role/WORKSPACE_LOGS_ROLE",
    "example-snowflake.com/role/MARKETING_PRODUCT_READONLY_ROLE",
    "example-snowflake.com/role/MARKETING_UTILS_READONLY_ROLE"
  ],
  "accessibility_type": "ANY_PRINCIPAL"
}

Related APIs

Private APIs

Documentation for Veza's private APIs for advanced access assessments

Overview

This section contains documentation for APIs in the private/ namespace for advanced access assessment capabilities. These APIs currently support advanced role analysis, entitlement comparisons, and access management for Snowflake environments.

Available APIs

Common Use Cases

These APIs enable several identity security use cases:

  1. Role Rationalization: Identify and consolidate redundant roles to simplify access management

  2. Least Privilege Implementation: Find roles that provide necessary access with minimal excess permissions

  3. Access Governance: Maintain a minimal set of roles by identifying functionally equivalent roles

  4. Access Pattern Analysis: Discover common access patterns among users in the same organizational unit

  5. Privileged Access Management: Analyze what additional privileges different roles would provide to a user

Limitations

  • Some APIs may have performance limitations with highly connected identities or complex permission structures.

Related Documentation

Role Maintenance

Modify role permissions and find matching existing roles.

Early Access: This API is provided in Early Access. Please contact our customer support team for more information and to enable this feature.

Overview

The Role Maintenance API allows you to simulate modifications to an existing role's permissions and check if other roles with the resulting permission set already exist. This API is particularly useful for role rationalization and consolidation in Snowflake environments.

Use cases and features

This API enables effective role maintenance and governance with several key capabilities:

  1. Role Rationalization: Find existing roles that match a desired permission set after modifications

  2. Role Consolidation: Identify opportunities to consolidate roles by checking for existing roles with similar permissions

  3. Permission Planning: Plan permission changes and identify existing alternatives before implementation

  4. Access Governance: Maintain a minimal set of roles by identifying functionally equivalent roles

Limitations

Role Maintenance API

Request Parameters

The API accepts a request object with the following parameters:

GranteeModification Structure

Each GranteeModification object contains:

Note: You can specify either or both of these fields:

  • If only from_resource_permissions is set, those permissions will be removed

  • If only to_resource_permissions is set, those permissions will be added

  • If both are set, the permissions will be updated accordingly

This flexibility allows you to model different types of permission changes within a single API call. For example, you can simultaneously remove access to one resource while adding access to another, or modify permission levels on the same resource.

ResourcePermissions Structure

Each ResourcePermissions object contains:

Request and Response Protocol

Proto Message Definitions

The API uses the following protocol buffer message definitions:

Response Structure

The API returns a response object with the following field:

Usage Example

Request

This example simulates removing database and schema permissions from one role while adding database permissions to another:

Response

The response indicates that a role with the resulting permission set exists:

Example: Adding permissions only

This example shows adding permissions to a role:

Request

Response

Example: Removing permissions only

This example shows removing permissions from a role:

Request

Response

Related APIs

This feature is currently limited to the .

API
Description

These features are currently limited to the .

This feature is currently limited to the .

Parameter
Type
Required
Description
Field
Type
Required
Description
Field
Type
Required
Description
Field
Type
Description

Snowflake integration
Get Access Relationship API
Role Existence API
Role Maintenance API

grantee_type

string

Yes

The type of grantee (currently only supports SnowflakeRole)

grantee_id

string

Yes

Veza node ID of the grantee (role) to be modified

modifications

GranteeModification[]

Yes

A list of resource permission modifications to apply to the role

from_resource_permissions

ResourcePermissions

No

Permissions to remove from the role

to_resource_permissions

ResourcePermissions

No

Permissions to add to the role

node_type

string

Yes

The type of resource node (supported types are SnowflakeDatabase, SnowflakeTable, SnowflakeView, and SnowflakeSchema)

node_id

string

Yes

Veza node ID of the resource (ID property in graph and query builder)

raw_permissions

string[]

Yes

A list of permissions (e.g., USAGE, SELECT, etc.)

message RoleMaintenanceRequest {
  string grantee_type = 1;
  string grantee_id = 2;
  repeated GranteeModification modifications = 3;
}

message GranteeModification {
  GetRoleMatchingRequest.ResourcePermissions from_resource_permissions = 1;
  GetRoleMatchingRequest.ResourcePermissions to_resource_permissions = 2;
}

message RoleMaintenanceResponse {
  repeated string grantee_ids = 1;
}

grantee_ids

string[]

A list of existing role IDs that match the permission set after the requested modifications

{
  "grantee_type": "SnowflakeRole",
  "grantee_id": "example-snowflake.com/role/DATA_INGEST_ROLE",
  "modifications": [
    {
      "from_resource_permissions": {
        "node_type": "SnowflakeDatabase",
        "node_id": "example-snowflake.com/database/ANALYTICS_DB",
        "raw_permissions": ["USAGE"]
      }
    },
    {
      "from_resource_permissions": {
        "node_type": "SnowflakeSchema",
        "node_id": "example-snowflake.com/database/ANALYTICS_DB/schema/RAW_DATA",
        "raw_permissions": ["CREATE FUNCTION", "CREATE PIPE", "CREATE STREAM", "CREATE TABLE", "CREATE TASK", "USAGE"]
      }
    },
    {
      "to_resource_permissions": {
        "node_type": "SnowflakeDatabase",
        "node_id": "example-snowflake.com/database/CLOUD_DB",
        "raw_permissions": ["USAGE"]
      }
    }
  ]
}
{
"grantee_ids": [
    "example-snowflake.com/role/CLOUD_LOGS_READONLY_ROLE"
]
}
{
  "grantee_type": "SnowflakeRole",
  "grantee_id": "example-snowflake.com/role/ANALYST_BASIC_ROLE",
  "modifications": [
    {
      "to_resource_permissions": {
        "node_type": "SnowflakeSchema",
        "node_id": "example-snowflake.com/database/ANALYTICS/schema/FINANCE",
        "raw_permissions": ["USAGE", "SELECT"]
      }
    }
  ]
}
{
  "grantee_ids": [
    "example-snowflake.com/role/FINANCE_VIEWER_ROLE"
  ]
}
{
  "grantee_type": "SnowflakeRole",
  "grantee_id": "snowhouse.snowflakecomputing.com/role/DATA_SCIENTIST",
  "modifications": [
    {
      "from_resource_permissions": {
        "node_type": "SnowflakeSchema",
        "node_id": "snowhouse.snowflakecomputing.com/database/SENSITIVE_DATA/schema/PII",
        "raw_permissions": ["SELECT", "INSERT"]
      }
    }
  ]
}
{
  "grantee_ids": [
    "snowhouse.snowflakecomputing.com/role/ANALYST_BASIC"
  ]
}
Snowflake integration
Snowflake Integration
Query APIs
Snowflake integration
Get Access Relationship API
Role Existence API
Cohort Role Analysis API

Identifies grantees (such as roles) that provide specific access permissions to a given identity for a set of resources

Checks whether a role with specific resource permissions already exists

Simulates modifications to an existing role's permissions and checks if other roles with the resulting permission set already exist

Provides insights into role accessibility for users within a specified cost center

Get Access Relationship

Identify grantees (such as roles) providing specific access permissions to a given identity for a set of resources.

Early Access: This API is provided in Early Access. Please contact our customer support team for more information and to enable this feature.

Overview

The GetAccessRelationship API takes an identity (user), a list of resources with permissions, and responds with potential grantees (roles) that can grant these access permissions to the user. The response includes detailed information about the additional access these grantees would provide. This API is particularly designed for role recommendations and permissions analysis in Snowflake environments.

Use cases and features

This API returns potential grantees (i.e., Snowflake roles) that can provide specific permissions, with results ordered by the level of "extra access" they provide (access not already available to the user). The response includes comparisons between current access and potential access and supports filtering by grantee type and other criteria.

  1. Role Recommendations: Find the most appropriate roles to grant a user for specific access needs

  2. Privilege Analysis: Analyze what additional privileges different roles would provide to a user

  3. Access Management: Compare different access options before making permission changes

  4. Least Privilege Implementation: Identify roles that provide necessary access with minimal excess permissions

Limitations

  • For highly connected identities (>10,000 accesses or accessible resources), the calculation of "extra access" can be performance-intensive. For a timely response, the API will return grantees with the least resources by themselves, instead of those providing the least extra resources. In such cases, is_identity_highly_connected will be set to true in response.

Get Access Relationship

Request Parameters

The API accepts a GetAccessRelationshipRequest object with the following parameters:

Parameter
Type
Required
Description

identity_id

string

Yes

ID for the principal (user) in Veza node ID format

identity_type

string

Yes

Veza node type for the principal (currently must be SnowflakeUser)

resource_id

string

No

ID of the resource to analyze

resource_type

string

No

Type of the resource to analyze (used to calculate impact)

raw_permissions

RawPermissionCollection

No

Collection of raw permissions to analyze

effective_permissions

EffectivePermissionCollection

No

Collection of effective permissions to analyze

grantee_type

string

No

Veza node type for the grantee (currently must be SnowflakeRole)

grantee_filter

AssessmentQuerySpecFilter

No

Filter to apply on potential grantees

saved_query_id_for_grantee_ids

string

No

ID of a saved query, source nodes in its result will be used as a filter

max_grantee_count

int32

No

Maximum number of grantees to return

resource_types_to_display

string[]

No

Resource types to include in the result (in addition to resource_type above)

max_resource_count

int32

No

Grantees with access to more resources will be excluded from the results. 0 (unset) uses the default value of 100,000. Setting a higher value will include grantees with more resources.

no_extra_stats

boolean

No

Show less stats to makes the API respond faster: when True, the response will not contain permission summaries and resource access changes, but the grantee IDs are still returned in the correct order.

resource_permissions

ResourcePermissions[]

No

Only valid when result order is LEAST_PRIVILEGED. Returned grantees will be able to access all resources with the permissions in resource_permissions.

result_order

RoleRecommendationResultOrder

No

Ordering method for results (default is by minimal access count)

direct_grantee_to_resource_only

boolean

No

When true, only return roles with direct access to the input resources

Important: Either resource_permissions or the combination of (resource_id, resource_type, raw_permissions, effective_permissions) must be provided in the request, but not both.

Result Ordering

The API provides two options for ordering the returned grantees:

  • Default Order (Minimal Access Count): By default, the API returns grantees ordered by their access count, prioritizing roles with fewest total accesses.

  • Least Privileged: When setting "result_order": "LEAST_PRIVILEGED", the API orders grantees by least privilege principle (minimum necessary permissions) and enables several advanced features:

    • No system-defined admin roles will be returned in the results

    • The resource_permissions parameter can be used, which allows input of multiple resources

Special Considerations

  • When max_resource_count is reached for an identity, the API will return grantees with the least resources by themselves, instead of those providing the least extra resources.

  • The no_extra_stats parameter improves performance when detailed statistics aren't needed. This parameter will:

    • Skip saved query lookup for grantee IDs

    • Only include basic resource count information in the response

    • Ignore the saved_query_id_for_grantee_ids parameter

    • Only return old_accessible_resource_count and new_accessible_resource_count for the input resource_type

    • This parameter is not effective when result_order is set to LEAST_PRIVILEGED

  • The resource_permissions parameter is only usable when result_order is set to LEAST_PRIVILEGED

Response Structure

The API returns a GetAccessRelationshipResponse object with the following fields:

Field
Type
Description

ordered_node_access_changes

NodeAccessChange[]

List of grantees and their access statistics, ordered according to the input result_order

is_identity_highly_connected

boolean

Indicates if the identity has access to many resources (>10,000 accesses for a single resource type)

result_time

Timestamp

Time when the cache was refreshed (if cache was used)

identity_already_has_all_access

boolean

Indicates if the principal already has all the requested access

Note: There are deprecated fields in the response (role_id, resource_type, new_accessible_resource_count) that should not be used. Use the ordered_node_access_changes field instead.

NodeAccessChange Structure

Each NodeAccessChange object contains:

Field
Type
Description

node_type

string

The node type of the grantee

id

string

The node ID of the grantee

name

string

The name of the grantee

resource_access_changes

ResourceAccessChange[]

Access changes per resource type

ResourceAccessChange Structure

Each ResourceAccessChange object contains:

Field
Type
Description

resource_type

string

Type of the resource

old_accessible_resource_count

int32

Count of resources accessible before granting

new_accessible_resource_count

int32

Count of resources accessible after granting

old_raw_permissions

string[]

List of raw permissions before granting

new_raw_permissions

string[]

List of raw permissions after granting

old_effective_permissions

string[]

List of effective permissions before granting

new_effective_permissions

string[]

List of effective permissions after granting

Usage Examples

Example 1: Using Resource Permissions (Recommended)

This example shows how to use the API to find roles that would give a specific Snowflake user access to certain resources using the resource_permissions parameter.

Request

{
  "identity_id": "example-snowflake.com/user/ALICE",
  "identity_type": "SnowflakeUser",
  "resource_permissions": [
    {
      "resource_id": "example-snowflake.com/database/SALES/schema/PUBLIC/table/CUSTOMER_DATA",
      "resource_type": "SnowflakeTable",
      "permissions": ["SELECT", "INSERT"]
    }
  ],
  "grantee_type": "SnowflakeRole",
  "max_grantee_count": 5,
  "result_order": "LEAST_PRIVILEGED"
}

Example 2: Using Resource ID and Permissions

This example shows how to use the API with the resource ID and permissions approach.

This example uses LEAST_PRIVILEGED result ordering. The response will prioritize grantees that provide the minimum necessary permissions to meet the requested access requirements.

Request

{
  "identity_id": "example-snowflake.com/user/ALICE",
  "identity_type": "SnowflakeUser",
  "resource_id": "example-snowflake.com/database/SALES/schema/PUBLIC/table/CUSTOMER_DATA",
  "resource_type": "SnowflakeTable",
  "raw_permissions": {
    "values": ["SELECT", "INSERT"],
    "operator": "AND"
  },
  "grantee_type": "SnowflakeRole",
  "max_grantee_count": 5,
  "result_order": "LEAST_PRIVILEGED"
}

Response

{
  "ordered_node_access_changes": [
    {
      "node_type": "SnowflakeRole",
      "id": "example-snowflake.com/role/ANALYST",
      "name": "ANALYST",
      "resource_access_changes": [
        {
          "resource_type": "SnowflakeTable",
          "old_accessible_resource_count": 10,
          "new_accessible_resource_count": 25,
          "old_raw_permissions": ["SELECT"],
          "new_raw_permissions": ["SELECT", "INSERT"],
          "old_effective_permissions": ["SELECT"],
          "new_effective_permissions": ["SELECT", "INSERT"]
        }
      ]
    },
    {
      "node_type": "SnowflakeRole",
      "id": "example-snowflake.com/role/DATA_EDITOR",
      "name": "DATA_EDITOR",
      "resource_access_changes": [
        {
          "resource_type": "SnowflakeTable",
          "old_accessible_resource_count": 10,
          "new_accessible_resource_count": 32,
          "old_raw_permissions": ["SELECT"],
          "new_raw_permissions": ["SELECT", "INSERT", "UPDATE"],
          "old_effective_permissions": ["SELECT"],
          "new_effective_permissions": ["SELECT", "INSERT", "UPDATE"]
        }
      ]
    }
  ],
  "is_identity_highly_connected": false,
  "result_time": "2025-02-25T10:15:30Z",
  "identity_already_has_all_access": false
}

Related APIs

Role Existence

Check whether a role with specific resource permissions already exists.

Early Access: This API is provided in Early Access. Please contact our customer support team for more information and to enable this feature.

Overview

The Role Existence API allows users to check whether a role with specific resource permissions already exists in the system. This API is particularly useful for role management and access governance in Snowflake environments.

Use cases and features

This API enables efficient role management by identifying existing roles that already have the permissions you're looking for. Key use cases include:

  1. Role Discovery: Find existing roles that match specific permission requirements

  2. Prevent Role Proliferation: Avoid creating duplicate roles with the same permissions

  3. Permission Auditing: Verify which roles have specific permissions to resources

  4. Role Standardization: Identify standard roles that can be reused for similar access requirements

Limitations

Role Existence API

Request Parameters

The API accepts a request object with the following parameters:

Parameter
Type
Required
Description

grantee_type

string

Yes

The type of grantee for which the role existence is checked (currently supports only SnowflakeRole)

resource_permissions

ResourcePermissions[]

Yes

A list of resource permissions to match against existing roles

ResourcePermissions Structure

Each ResourcePermissions object contains:

Field
Type
Required
Description

node_type

string

Yes

The type of resource node (supported types are SnowflakeDatabase, SnowflakeTable, SnowflakeView, and SnowflakeSchema)

node_id

string

Yes

Veza node ID of the resource (i.e., ID property in graph and query builder)

raw_permissions

string[]

Yes

A list of permissions to check (e.g., USAGE, SELECT, etc.)

Protocol Definition

Proto Message Definitions

The API uses the following protocol buffer message definitions:

message RoleExistsRequest {
  string grantee_type = 1;
  repeated GetRoleMatchingRequest.ResourcePermissions resource_permissions = 2;
}

message RoleExistsResponse {
  repeated string grantee_ids = 1;
}

Response Structure

The API returns a response object with the following field:

Field
Type
Description

grantee_ids

string[]

A list of existing role IDs that match the given permissions

Usage Example

Request

This example checks if there's an existing role with USAGE permission on a specific Snowflake database:

{
  "grantee_type": "SnowflakeRole",
  "resource_permissions": [
    {
      "node_type": "SnowflakeDatabase",
      "node_id": "example-snowflake.com/database/SECURITY_DB",
      "raw_permissions": ["USAGE"]
    }
  ]
}

Response

The response indicates that a matching role exists:

{
  "grantee_ids": [
    "example-snowflake.com/role/SECURITY_READER_ROLE"
  ]
}

Example: Multiple Resource Permissions

You can check for roles that have permissions across multiple resources:

Request

{
  "grantee_type": "SnowflakeRole",
  "resource_permissions": [
    {
      "node_type": "SnowflakeDatabase",
      "node_id": "example-snowflake.com/database/ANALYTICS",
      "raw_permissions": ["USAGE"]
    },
    {
      "node_type": "SnowflakeSchema",
      "node_id": "example-snowflake.com/database/ANALYTICS/schema/PUBLIC",
      "raw_permissions": ["USAGE", "SELECT"]
    }
  ]
}

Response

{
  "grantee_ids": [
    "example-snowflake.com/role/ANALYTICS_READER_ROLE",
    "example-snowflake.com/role/REPORTING_USER_ROLE"
  ]
}

Example: No Matching Roles

In this example, the request is checking for roles with specific permissions, but no matching roles are found:

Request

{
  "grantee_type": "SnowflakeRole",
  "resource_permissions": [
    {
      "node_type": "SnowflakeDatabase",
      "node_id": "snowhouse.snowflakecomputing.com/database/RESEARCH_DATA",
      "raw_permissions": ["OWNERSHIP"]
    },
    {
      "node_type": "SnowflakeSchema",
      "node_id": "snowhouse.snowflakecomputing.com/database/RESEARCH_DATA/schema/EXPERIMENTS",
      "raw_permissions": ["CREATE TABLE", "CREATE VIEW", "MODIFY"]
    }
  ]
}

Response

The response indicates that no matching roles with the specified permission combination exist:

{
  "grantee_ids": []
}

When you receive an empty response like this, it suggests that a new role might need to be created to satisfy these specific permission requirements, as no existing role has the exact permission set requested.

Related APIs

This feature is currently limited to the .

This feature is currently limited to the .

Get Access Relationship
Role Existence
Role Maintenance
Cohort Role Analysis
Snowflake integration
Role Existence API
Role Maintenance API
Cohort Role Analysis API
Snowflake integration
Get Access Relationship API
Role Maintenance API
Cohort Role Analysis API
post
Authorizations
Body
cost_centerstringOptional
limitinteger · uint32Optional
Responses
200
OK
application/json
default
Default error response
application/json
post
POST /api/private/assessments/cohort_role_analysis HTTP/1.1
Host: 
Authorization: Bearer Bearer <API key>
Content-Type: application/json
Accept: */*
Content-Length: 32

{
  "cost_center": "text",
  "limit": 1
}
{
  "grantee_ids": [
    "text"
  ],
  "accessibility_type": 1
}
post
Authorizations
Body
grantee_typestringOptional
grantee_idstringOptional
Responses
200
OK
application/json
default
Default error response
application/json
post
POST /api/private/assessments/role_recommendations_role_maintenance HTTP/1.1
Host: 
Authorization: Bearer Bearer <API key>
Content-Type: application/json
Accept: */*
Content-Length: 247

{
  "grantee_type": "text",
  "grantee_id": "text",
  "modifications": [
    {
      "from_resource_permissions": {
        "raw_permissions": [
          "text"
        ],
        "node_type": "text",
        "node_id": "text"
      },
      "to_resource_permissions": {
        "raw_permissions": [
          "text"
        ],
        "node_type": "text",
        "node_id": "text"
      }
    }
  ]
}
{
  "grantee_ids": [
    "text"
  ]
}
post
Authorizations
Body
identity_idstringOptional
identity_typestringOptional
resource_idstringOptional

only one of resource_permissions or (resource_id, resource_type, raw_permissions, effective_permissions) can be set in the input

resource_typestringOptional
grantee_typestringOptional
saved_query_id_for_grantee_idsstringOptional
max_grantee_countinteger · int32Optional
resource_types_to_displaystring[]Optional
max_resource_countinteger · int32Optional
no_extra_statsbooleanOptional

When result_type=DEFAULT, setting no_extra_stats to true will also skip these queries:

  • saved_query_id_for_grantee_ids will be ignored
  • response will only contain old_accessible_resource_count and new_accessible_resource_count for input resource_type.
result_orderinteger · enumOptional

result_order is by default minimal access count, but can be set to LEAST_PRIVILEGED and enable new features including resource_permissions and faster response

direct_grantee_to_resource_onlybooleanOptional
Responses
200
OK
application/json
default
Default error response
application/json
post
POST /api/private/assessments/access_relationship HTTP/1.1
Host: 
Authorization: Bearer Bearer <API key>
Content-Type: application/json
Accept: */*
Content-Length: 3575

{
  "identity_id": "text",
  "identity_type": "text",
  "resource_id": "text",
  "resource_type": "text",
  "raw_permissions": {
    "values": [
      "text"
    ],
    "operator": 1
  },
  "effective_permissions": {
    "values": [
      1
    ],
    "operator": 1
  },
  "grantee_type": "text",
  "grantee_filter": {
    "query_type": 1,
    "source_node_types": {
      "nodes": [
        {
          "node_type": "text",
          "condition_expression": {
            "specs": [
              {
                "fn": 1,
                "property": "text",
                "value": null,
                "not": true,
                "value_property_name": "text",
                "value_property_from_other_node": true
              }
            ],
            "tag_specs": [
              {
                "tag": {
                  "type": "text",
                  "key": "text",
                  "value": "text",
                  "properties": {
                    "ANY_ADDITIONAL_PROPERTY": null
                  }
                },
                "exclude": true
              }
            ],
            "child_expressions": "[Circular Reference]",
            "operator": 1,
            "not": true
          },
          "node_id": "text",
          "count_condition_expression": "[Circular Reference]",
          "direct_relationship_only": true,
          "node_type_grouping_constraint": {
            "node_types": [
              "text"
            ],
            "constraint_type": 1
          },
          "properties_to_get": [
            "text"
          ],
          "tags_to_get": [
            {
              "type": 1,
              "key": "text"
            }
          ],
          "integration_types": [
            "text"
          ]
        }
      ],
      "nodes_operator": 1
    },
    "customized_variables": [
      {
        "key": "text",
        "value": "text"
      }
    ],
    "access_filter": {
      "engagement_score": {
        "op": 1,
        "value": 1
      },
      "over_provisioned_score": {
        "op": 1,
        "value": 1
      },
      "include_secondary_grantee": true,
      "include_indirect_resource": true,
      "exclude_indirect_grantee": true,
      "anomaly_detection_history_days": "text",
      "last_used": {
        "op": 1,
        "value": "2025-05-25T13:15:49.554Z",
        "target": 1
      }
    },
    "node_relationship_type": 1,
    "relates_to_exp": {
      "specs": [
        {
          "node_types": "[Circular Reference]",
          "required_intermediate_node_types": "[Circular Reference]",
          "avoided_intermediate_node_types": "[Circular Reference]",
          "raw_permissions": {
            "values": [
              "text"
            ],
            "operator": 1
          },
          "effective_permissions": {
            "values": [
              1
            ],
            "operator": 1
          },
          "no_relation": true,
          "direction": 1
        }
      ],
      "child_expressions": [
        {
          "specs": "[Circular Reference]",
          "child_expressions": "[Circular Reference]",
          "operator": 1,
          "not": true,
          "and_op_type": 1
        }
      ],
      "operator": 1,
      "not": true,
      "and_op_type": 1
    },
    "path_summary_node_types": {
      "nodes": [
        {
          "node_type": "text",
          "condition_expression": {
            "specs": [
              {
                "fn": 1,
                "property": "text",
                "value": null,
                "not": true,
                "value_property_name": "text",
                "value_property_from_other_node": true
              }
            ],
            "tag_specs": [
              {
                "tag": {
                  "type": "text",
                  "key": "text",
                  "value": "text",
                  "properties": {
                    "ANY_ADDITIONAL_PROPERTY": null
                  }
                },
                "exclude": true
              }
            ],
            "child_expressions": "[Circular Reference]",
            "operator": 1,
            "not": true
          },
          "node_id": "text",
          "count_condition_expression": "[Circular Reference]",
          "direct_relationship_only": true,
          "node_type_grouping_constraint": {
            "node_types": [
              "text"
            ],
            "constraint_type": 1
          },
          "properties_to_get": [
            "text"
          ],
          "tags_to_get": [
            {
              "type": 1,
              "key": "text"
            }
          ],
          "integration_types": [
            "text"
          ]
        }
      ],
      "nodes_operator": 1
    },
    "all_entity_condition": {
      "specs": [
        {
          "fn": 1,
          "property": "text",
          "value": null,
          "not": true,
          "value_property_name": "text",
          "value_property_from_other_node": true
        }
      ],
      "tag_specs": [
        {
          "tag": {
            "type": "text",
            "key": "text",
            "value": "text",
            "properties": {
              "ANY_ADDITIONAL_PROPERTY": null
            }
          },
          "exclude": true
        }
      ],
      "child_expressions": [
        {
          "specs": [
            {
              "fn": 1,
              "property": "text",
              "value": null,
              "not": true,
              "value_property_name": "text",
              "value_property_from_other_node": true
            }
          ],
          "tag_specs": [
            {
              "tag": {
                "type": "text",
                "key": "text",
                "value": "text",
                "properties": {
                  "ANY_ADDITIONAL_PROPERTY": null
                }
              },
              "exclude": true
            }
          ],
          "child_expressions": [
            "[Circular Reference]"
          ],
          "operator": 1,
          "not": true
        }
      ],
      "operator": 1,
      "not": true
    },
    "path_summary_count_conditions": {
      "conditions": [
        {
          "fn": 1,
          "value": "text",
          "value_as": 1
        }
      ]
    },
    "result_value_type": 1
  },
  "saved_query_id_for_grantee_ids": "text",
  "max_grantee_count": 1,
  "resource_types_to_display": [
    "text"
  ],
  "max_resource_count": 1,
  "no_extra_stats": true,
  "resource_permissions": [
    {
      "raw_permissions": [
        "text"
      ],
      "node_type": "text",
      "node_id": "text"
    }
  ],
  "result_order": 1,
  "direct_grantee_to_resource_only": true
}
{
  "ordered_node_access_changes": [
    {
      "node_type": "text",
      "id": "text",
      "name": "text",
      "resource_access_changes": [
        {
          "resource_type": "text",
          "old_accessible_resource_count": 1,
          "new_accessible_resource_count": 1,
          "old_raw_permissions": [
            "text"
          ],
          "new_raw_permissions": [
            "text"
          ],
          "old_effective_permissions": [
            "text"
          ],
          "new_effective_permissions": [
            "text"
          ]
        }
      ]
    }
  ],
  "is_identity_highly_connected": true,
  "result_time": "2025-05-25T13:15:49.554Z",
  "identity_already_has_all_access": true
}
post
Authorizations
Body
grantee_typestringOptional
Responses
200
OK
application/json
default
Default error response
application/json
post
POST /api/private/assessments/role_recommendations_role_exists HTTP/1.1
Host: 
Authorization: Bearer Bearer <API key>
Content-Type: application/json
Accept: */*
Content-Length: 113

{
  "grantee_type": "text",
  "resource_permissions": [
    {
      "raw_permissions": [
        "text"
      ],
      "node_type": "text",
      "node_id": "text"
    }
  ]
}
{
  "grantee_ids": [
    "text"
  ]
}