All pages
Powered by GitBook
1 of 74

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...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Developer Guides

This section includes guides for interacting with Immuta through the Immuta CLI and API.

Immuta CLI

The Immuta CLI allows users to interact with their Immuta tenant using the command line to manage data sources, projects, policies, and purposes. This feature allows you to have all of your Immuta tenant information in a Git repository and use the CLI to sync your Immuta tenant with the files in your Git repository.

This section includes reference and how-to guides for using the integrations API, Immuta V1 API, and Immuta V2 API.

The Immuta API

Any endpoints or attributes that are not documented are for internal purposes and should not be used.

Integrations API

The integrations API allows you to integrate your remote data platform with Immuta so that Immuta can manage and enforce access controls on your data.

Version 2 of the Immuta API allows data engineers to manage their data sources, projects, and policies as code, providing a way to track, approve, and easily update data sources and their associated policies.

The benefits of the V2 API are outlined below:

  • Reduces complexity: The data source API has been simplified to only require the connection information in most instances and one endpoint for all database technologies.

  • Maintains less state: Whether updating or creating, the same endpoint is used, and the same data is passed. No IDs are required, so no additional state is required.

  • Requires fewer steps: Only an API key is required; no additional authentication step is required before using the API.

Version 1 of the Immuta API is still supported and can be accessed through the Immuta CLI. However, users are encouraged to use Version 2 of Immuta's API because of all the benefits outlined above.

Integrations API

The integrations API is a REST API that allows you to integrate your remote data platform with Immuta so that Immuta can manage and enforce access controls on your data.

Getting started guide

This task-based guide includes end-to-end instructions for implementing your integration - from authenticating with the API to mapping your users into Immuta so that they can access policy-enforced data. A basic request and payload example is provided for configuring each integration.

These guides provide step-by-step instructions for creating and managing your integration and include configuration setting examples that vary in complexity.

These guides define request and body parameters, response schema, and common error messages.

The Immuta CLI

The Immuta CLI allows users to interact with their Immuta tenant using the command line to manage data sources, projects, policies, and purposes. This feature allows you to have all of your Immuta tenant information in a Git repository and use the CLI to sync your Immuta tenant with the files in your Git repository. To install the Immuta CLI, follow this installation guide.

Section Overview

You can navigate this section of documentation in two different ways: by workflow or by command.

Workflow

The navigation in the left pane is organized by major workflows you would use in Immuta. Each workflow contains relevant commands. Follow this chronological outline to find commands relevant to your workflow.

  1. .

  2. .

  3. .

  4. .

Commands

Below is a list of major commands available in the Immuta CLI. Click a command to navigate to its corresponding page that details subcommands, options, and arguments.

  • : Interact with your Immuta tenant to create data sources, projects, policies, and purposes.

  • : Make an authenticated Immuta API request. This command will let you hit any endpoint in the Immuta API, including . For example, immuta api /tag will hit the v1 endpoint to list tags. This allows you to use the immuta api command instead of something like Postman or cURL to interact with the V1 API.

  • : Clone all data sources, projects, purposes, and policies information into files.

Immuta API
Integrates with Git: Define data sources and policies in files that can be tracked in Git and easily pushed to Immuta. Both JSON and YAML are supported for more flexibility. (For example, use YAML to add comments in files.)
Version 2 Immuta API
Version 1 Immuta API
Redshift integration guide
  • Snowflake integration guide

  • Starburst (Trino) integration guide

  • How-to guides
    Amazon S3 integration guide
    Azure Synapse Analytics integration guide
    Databricks Unity Catalog integration guide
    Google BigQuery integration guide
    Reference guides
    Integrations API endpoints
    Integrations API payload
    Response schema
    HTTP status codes and error messages
    Create and Manage Purposes.
  • Create and Manage Projects.

  • Manage Audit Export.

  • immuta completion: Generate shell completion scripts.

  • immuta configure: Specify an Immuta tenant url and API key to be saved to the Immuta configuration file.

  • immuta datasource: Manage data sources.

  • immuta policy: Manage Global Policies.

  • immuta project: Manage projects.

  • immuta purpose: Manage purposes.

  • immuta audit exportConfig: Manage the audit export.

  • Install and Configure the Immuta CLI
    Manage Your Immuta Tenant
    Create and Manage Data Sources
    Create and Manage Global Policies
    immuta
    immuta api
    version 1 endpoints
    immuta clone

    Manage Sensitive Data Discovery

    Command overview: immuta sdd

    This command allows you to customize and run SDD in your instance of Immuta. The table below illustrates subcommands and arguments.

    Subcommands
    Description

    Options

    Use these options to get more details about the sdd command or any of its subcommands:

    • -h

    • --help

    SDD workflow

    Two common workflows for using SDD are outlined below. The first illustrates how to apply a global framework to all data sources, while the second outlines how users can create and apply frameworks to data sources they own.

    The tutorials linked below show how to use the CLI to complete this workflow. For an overview of how sensitive data discovery works, see .

    Workflow 1: Apply the global framework to all data sources

    1. Data governor using one or more identifiers.

    2. .

    3. .

    Workflow 2: Apply a framework to a specific data source

    1. Data governor creates one or more .

    2. .

    3. and resulting tags are applied to columns where criteria were met.

    Run Sensitive Data Discovery on Data Sources

    Prerequisite

    .

    Command Overview: immuta sdd run

    Manage Purposes

    This page details the immuta purpose command, its subcommands and arguments, and the workflow for creating and deleting purposes.

    Command: immuta purpose

    This command allows you to list, save, and delete purposes in your instance of Immuta. The table below illustrates subcommands and arguments.

    Subcommands
    Description

    Reference Guides

    The reference guides in this section define the integrations API endpoints, request and body parameters, and response schema.

    The integrations API endpoints allow you to create, update, get, and delete integrations and generate scripts to run in your data platform to manually set up or remove Immuta-managed resources.

    Consult this guide for endpoint descriptions and examples.

    Integrations API payloads and objects

    The integrations API request payloads accept JSON or YAML format, and each integration has parameters and objects specific to the data platform.

    Consult this guide for parameter value types, requirements, definitions, and accepted values.

    Response schema

    The response returns the status of the integration configuration in JSON format.

    Consult this guide for response schema definitions and integration state definitions.

    HTTP status codes and error messages

    The integrations API uses standard HTTP status codes. Status codes specific to the integrations API are described in this reference guide.

    Consult this guide for a list of status codes, integration states, common error messages, and troubleshooting guidance.

    Integrations API endpoints

    Manage SDD identifiers.

    run

    Run SDD on specific data sources or all data sources.

    template

    Manage SDD frameworks.

    this overview
    creates a framework
    System administrator adds this framework as the global framework so that it applies to all data sources
    Users trigger SDD on data sources
    identifiers
    Data owner creates a framework containing one or more identifiers
    Data owner triggers SDD on one or more data sources
    classifier
    This command allows you to run SDD on specific data sources or all data sources in your instance of Immuta.

    Options

    Use these options to get more details about the sdd run command or any of its subcommands:

    • -h

    • --help

    Run SDD on Specific Data Sources

    Run immuta sdd run <dataSourceName> [flags], naming the data source you want to run SDD on. The options you can specify include

    • -d, --dryRun: No updates will actually be made.

    • -f, --force: Do not prompt for confirmation when attempting to run SDD on all data sources.

    • -h or --help: Get more information about the command.

    • -o or --output json | yaml: Specify the output format.

    • --outputTemplate string: Format the response using a Go template.

    • -t, --outputTemplate string: Run SDD with this framework. This flag can only be used with the dryRun flag.

    • -w, --wait int: The number of seconds to wait for the SDD job(s) to finish. Default is until the SDD job(s) finish (default -1).

    Example

    The example below illustrates a user running SDD on a single data source.

    Run SDD on All Data Sources

    1. Run immuta sdd run. The options you can specify include

      • -d, --dryRun: No updates will actually be made.

      • -f, --force: Do not prompt for confirmation when attempting to run SDD on all data sources.

      • -h or --help: Get more information about the command.

      • -o or --output json | yaml: Specify the output format.

      • --outputTemplate string: Format the response using a Go template.

      • -t, --outputTemplate string: Run SDD with this framework. This flag can only be used with the dryRun flag.

      • -w, --wait int: The number of seconds to wait for the SDD job(s) to finish. Default is until the SDD job(s) finish (default -1).

    2. Confirm that you want to run SDD on all data sources.

    Example

    Sensitive data discovery must be enabled
    $ immuta sdd -h
    Manage Sensitive Data Discovery
    
    Usage:
      immuta sdd [command]
    
    Available Commands:
      classifier  Manage Sensitive Data Discovery Classifiers
      run         Run Sensitive Data Discovery with provided options
      template    Manage Sensitive Data Discovery Templates
    
    Flags:
      -h, --help   Help for sdd
    
    Global Flags:
          --config string    Config file (default $HOME/.immutacfg.yaml)
      -p, --profile string   Specifies the profile for what instance/api the cli will use (default "default")
    
    Use "immuta sdd [command] --help" for more information about a command.
    $ immuta sdd -h
    Run Sensitive Data Discovery with provided options
    
    Usage:
      immuta sdd run [datasourceName(s)] [flags]
    
    Examples:
    # run SDD as a dry run on the specified data sources
    $ immuta sdd run "Datasource One" "Datasource Two" --dryRun --template "someFramework"
    # run SDD on ALL data sources in immuta
    $ immuta sdd run
    
    
    Flags:
      -d, --dryRun                  No updates will actually be made
      -f, --force                   Do not prompt for confirmation when attempting to run sdd on all data sources
      -h, --help                    Help for run
      -o, --output json | yaml      Output format
          --outputTemplate string   Format the response using a Go template
      -t, --template string   Run SDD with this template, can only be used with the dryRun flag
      -w, --wait int                The number of seconds to wait for the SDD job(s) to finish. Default is until the SDD job(s) finish (default -1)
    
    Global Flags:
          --config string    Config file (default $HOME/.immutacfg.yaml)
      -p, --profile string   Specifies the profile for what instance/api the cli will use (default "default")
    $ immuta sdd run "Credit Accounts"
    Running SDD
    Credit Accounts  06b71830-aebc-11ec-970b-51ffefcbfd0c  completed
    $ immuta sdd run
    Running SDD
    Started 8 SDD jobs
    Argument(s)

    delete

    Delete a purpose by name.

    purpose name

    list

    List all purposes.

    n/a

    save

    Create or update a purpose in Immuta.

    filepath

    Options

    Use these options to get more details about the purpose command or any of its subcommands:

    • -h

    • --help

    Create a Purpose: immuta purpose save

    1. Add your purpose information in a valid YAML file for the V2 API. Additional payload examples for creating purposes can be found here.

    2. Run immuta purpose save <filepath> [--dryRun] [--reAcknowledge], referencing the file you just created. The options you can specify include

      • --reAcknowledge: Require all users of any projects using this purpose to re-acknowledge any updated acknowledgement statements.

      • -d or --dryRun: No updates will be made.

      • -h or --help: Get more information about the command.

    Examples

    The example below illustrates a user creating a purpose called Demo Purpose.

    Delete a Purpose: immuta purpose delete

    You need the GOVERNANCE permission in Immuta to run this command.

    1. Opt to list all purposes to determine which purpose you would like to delete by running immuta purpose list. Options you can specify include

      • -h or --help: Get more information about the command.

      • -v or --verbose: Print response as JSON.

    2. Delete a purpose by running immuta purpose delete <purpose name> [--dryRun], enclosing the purpose name in quotation marks. Options you can specify include

      • -d or --dryRun: No updates will be made.

      • -h or --help

    Example

    The example below illustrates a user deleting the purpose Demo Purpose.

    Install and Configure the Immuta CLI

    This page details how to install the Immuta CLI and tab completions.

    1 - Install the Immuta CLI

    macOS CLI Binary Warning: When installing the macOS CLI binary, macOS displays the warning "could not verify that this app is free from malware" when the binary is run. Navigate to the Security & Privacy section in your System Preferences to allow the binary to be run.

    Download the binary that corresponds to your operating system.

    The latest stable binaries can be found here:

    Linux x86_64 (amd64)

    Linux ARMv8 (arm64)

    The latest stable binaries can be found here:

    Darwin x86_64 (amd64)

    Darwin ARMv8 (arm64)

    The latest stable binary can be found here: .

    Download and add the binary to a directory in your system's $PATH as immuta.exe.

    The SHA 256 checksum is available to verify the file at .

    2 - Configure the CLI with Your Immuta Tenant

    1. Run immuta configure.

    2. Enter the URL of your Immuta tenant in the interactive prompt.

    3. Enter your Immuta API Key in the interactive prompt:

    Below is the configuration file that will be saved at ~/.immutacfg.yaml:

    3 - Install Tab Completions

    To generate shell completion scripts for Immuta CLI commands, run immuta completion [bash|zsh|fish|powershell]. You can opt to specify -h or --help for instructions on installing tab completions for Bash, Zsh, Fish, and PowerShell commands and flags.

    Use the tabs below for specific instructions for each of these shells.

    1. Install bash-completion https://github.com/scop/bash-completion.

    2. Add this to your ~/.bash_profile:

    1. Generate an _immuta completion script and save it in your $fpath

    The exact configuration file locations might vary based on your system. Make sure to restart your shell before you test whether completions are working.

    Manage Audit

    Public preview: This feature is public preview and available to all accounts.

    Use these audit export configuration commands to manage exporting your audit logs to S3 and ADLS Gen2, including intervals the events are exported and the S3 bucket or ADLS container they are exported to.

    immuta audit exportConfig {command} <arguments> [flags]

    Inspect, disable, enable, and delete configurations for exporting your audit events to S3 and ADLS Gen 2.

    The Immuta Audit CLI supports a number of flags for every command.

    • --config string: Specifies the configuration file name and where it will be saved. (The default is $HOME/.immutacfg.yaml.)

    • -h, --help: Gets more information about the command.

    • -p, --profile string

    Commands

    Command
    Argument
    Flags

    Audit Export Configuration Example

    Create Purposes API Examples

    Basic Purpose

    name: A basic purpose

    Advanced Purpose

    name: Use Purposes
    acknowledgement: You promise to be good
    description: For use with projects to do policy adjustments
    kAnonNoiseReduction: Medium

    Sub-Purpose

    Immuta V1 API

    This section outlines the endpoints and parameters of the V1 API and provides examples of requests, payloads, and responses. The endpoints documented in this section are for the V1 API. The V2 API is documented in the previous section.

    Any endpoints or attributes that are not documented are for internal purposes and should not be used.

    Section Overview

    The endpoints throughout this section are organized by workflow.

    1. .

    2. .

    3. .

    4. .

    Manage Policies

    This page details the immuta policy command, its subcommands and arguments, and the workflow for creating, renaming, cloning, and deleting Global Policies.

    Command Overview: immuta policy

    This command allows you to list, save, delete, and rename Global Policies in your instance of Immuta. The table below illustrates subcommands and arguments.

    Subcommands

    Connect Your Data

    Audience: Data Owners

    Content Summary: This section of API documentation is specific to connecting your data to Immuta and managing Data Dictionaries.

    Data sources can also be created and managed using the .

    Authenticate with the API

    Audience: All Immuta Users

    Content Summary: Calls to the Immuta API require authentication. This page includes the API key authentication endpoint, request and response parameters, and example requests and responses for API authentication.

    Workflow

    There are two methods for making an authenticated request to the Immuta API.

    Search for Organizations

    Organizations API reference guide

    This page describes the organizations endpoint.

    Additional fields may be included in some responses you receive; however, these attributes are for internal purposes and are therefore undocumented.

    Search organizations

    Manage Purposes
    
    Usage:
      immuta purpose [command]
    
    Available Commands:
      delete      Delete a purpose by name
      list        List all purposes
      save        Create/update a purpose in Immuta
    
    Flags:
      -h, --help   help for purpose
    
    Global Flags:
          --config string    config file (default $HOME/.immutacfg.yaml)
      -p, --profile string   specifies the profile for what instance/api the cli will use (default "default")
    
    Use "immuta purpose [command] --help" for more information about a command.
    name: Demo Purpose
    acknowledgement: You promise not to share this data outside the project.
    description: This project is only to be used for departmental data.
    $ immuta purpose list
    Re-identification Prohibited
    Re-identification Prohibited.CCPA
    Re-identification Prohibited.Safe Harbor Method
    Use Case Outside De-identification
    
    $ immuta purpose save test-purpose.yml
    {"dryRun":false,"creating":true,"updating":false,"purposeId":8}
    
    $ immuta purpose list
    Demo Purpose
    Re-identification Prohibited
    Re-identification Prohibited.CCPA
    Re-identification Prohibited.Safe Harbor Method
    Use Case Outside De-identification
    $ immuta purpose list
    Demo Purpose
    Re-identification Prohibited
    Re-identification Prohibited.CCPA
    Re-identification Prohibited.Safe Harbor Method
    Use Case Outside De-identification
    
    $ immuta purpose delete "Demo Purpose"
    {"dryRun":false,"deleting":["Demo Purpose"]}
    
    $ immuta purpose list
    Re-identification Prohibited
    Re-identification Prohibited.CCPA
    Re-identification Prohibited.Safe Harbor Method
    Use Case Outside De-identification
    : Get more information about the command.
    Collaborate with projects.
    Authenticate with the API
    Configure your instance of Immuta and set up users, groups, attributes, and tags
    Connect data
    Manage and monitor data access
    name: Purpose Hierarchy
    acknowledgement: The root acknowledgement
    subpurposes:
      - name: Purpose Hierarchy.Child 1
        acknowledgement: Override the root acknowledgement
      - name: Purpose Hierarchy.Child 2
      - name: Purpose Hierarchy.Child 1.Grandchild 1
      - name: Purpose Hierarchy.Child 1.Grandchild 2
      - name: Purpose Hierarchy.Child 2.Grandchild 1
      - name: Purpose Hierarchy.Child 2.Grandchild 2
    :
  • Ensure that the following is present in your ~/.zshrc:

  • Generate an immuta.fish completion script:

    1. Run immuta completion powershell | Out-String | Invoke-Expression.

    2. To load completions for every new session, run

    3. Source this immuta.ps1 from your PowerShell profile.

    https://immuta-platform-artifacts.s3.amazonaws.com/cli/latest/immuta_cli_windows_amd64
    https://immuta-platform-artifacts.s3.amazonaws.com/cli/latest/immuta_cli_SHA256SUMS
    curl -Lo immuta https://immuta-platform-artifacts.s3.amazonaws.com/cli/latest/immuta_cli_linux_amd64 && chmod +x immuta
    curl -Lo immuta https://immuta-platform-artifacts.s3.amazonaws.com/cli/latest/immuta_cli_linux_arm64 && chmod +x immuta
    curl -Lo immuta https://immuta-platform-artifacts.s3.amazonaws.com/cli/latest/immuta_cli_darwin_amd64 && chmod +x immuta
    curl -Lo immuta https://immuta-platform-artifacts.s3.amazonaws.com/cli/latest/immuta_cli_darwin_arm64 && chmod +x immuta
    Description
    Argument(s)

    clone

    Clone and save all Global Policies to files.

    filepath

    delete

    Delete a Global Policy by policy key.

    policy key

    list

    List all Global Policy keys.

    n/a

    rename

    Rename the Global Policy key.

    new policy key

    save

    Create or update a Global Policy in Immuta.

    filepath

    Options

    Use these options to get more details about the policy command or any of its subcommands:

    • -h

    • --help

    Create a Policy: immuta policy save

    1. Add your policy information in a valid YAML file for the V2 API. Additional payload examples for creating policies can be found here:

    2. Run immuta policy save <filepath> [--dryRun] [--reCertify], referencing the file you just created. The options you can specify include

      • -d or --dryRun: No updates will actually be made.

      • -h or --help: Get more information about the command.

      • --reCertify: If the certification has changed, someone will need to re-certify this policy on all impacted data sources.

    Examples

    The example below illustrates a user listing all policies and then creating a policy called data conditional masking.

    Rename a Policy Key: immuta policy rename

    1. Opt to list all policy keys to identify which policy you would like to rename by running immuta policy list. Options you can specify include

      • -h or --help: Get more information about the command.

      • -v or --verbose: Print response as JSON.

    2. Rename the policy key by running immuta policy rename <old policy key> <new policy key>, enclosing the name of the policy key in quotation marks. Options you can specify to get more information about this command include -h or --help.

    Example

    The example below illustrates a user renaming the data conditional masking policy key to Data Masking.

    Clone Global Policies: immuta policy clone

    Clone and save all Global Policies to a file by running immuta policy clone <filepath>. Options you can specify include

    • --force: Overwrite existing output directory targets. If this flag is omitted, you will receive an error when the output directory exists and is not empty.

    • -h, --help: Get more information about the command.

    • -v or --verbose: Print response as JSON.

    Example

    The example below illustrates cloning and saving all Global Policies to a policy folder. In this example, only one Global Policy existed: Test.

    Delete a Policy: immuta policy delete

    1. Opt to list all policy keys to determine which policy key you would like to delete by running immuta policy list. Options you can specify include

      • -h or --help: Get more information about the command.

      • -v or --verbose: Print response as JSON.

    2. Delete a policy key by running immuta policy delete <policy key> [--dryRun]. Options you can specify include

      • -d or --dryRun: No updates will be made.

      • -h or --help: Get more information about the command.

    Example

    The example below illustrates a user deleting the Data Masking policy.

    GET /organizations

    Search for organizations.

    Query parameters

    Attribute
    Description
    Required

    searchText

    string A string used to filter returned organizations. The query is executed with a wildcard prefix and suffix.

    No

    Response parameters

    Attribute
    Description

    name

    string The name of the organization.

    Request example

    The following request searches for organizations that contain Immuta in their name.

    Response example

    autoload -U compinit
    compinit -i
    immuta completion fish > ~/.config/fish/completions/immuta.fish
    immuta completion powershell > immuta.ps1
    $ immuta configure
    ? What is the url of the immuta instance you use?: https://your.instance.url.com/
    ? What is the api key of your immuta user account?:  ***************************Updated the config at /Users/user/.immutacfg.yaml
    default:
    
      api_key: <apiKey>
    
      host: https://your.immuta.url.com
    eval "$(immuta completion bash)"
    immuta completion zsh > /usr/local/share/zsh/site-functions/_immuta
    name: Conditional Masking
    policyKey: data conditional masking
    type: data
    actions:
        - rules:
        - type: Masking
            config:
                fields:
                - type: columnTags
                    columnTag: Discovered.Passport
                conditionalPredicate: "@columnTagged('Discovered.Country') = 'USA'"
                maskingConfig:
                    type: Hash
    circumstanceOperator: all
    circumstances:
        - type: columnTags
            columnTag: Discovered.Passport
        - type: columnTags
            columnTag: Discovered.Country
    $ immuta policy list
    New Column Added
    
    $ immuta policy save ./test-policy.yml
    {"dryRun":false,"creating":true,"updating":false,"policyId":4}
    
    $ immuta policy list
    New Column Added
    data conditional masking
    $ immuta policy list
    New Column Added
    data conditional masking
    
    $ immuta policy rename "data conditional masking" "Data Masking"
    {"oldPolicyKey":"data conditional masking","newPolicyKey":"Data Masking"}
    
    $ immuta policy list
    Data Masking
    New Column Added
    $ immuta policy clone ./your-file-path/policy-folder
    Cloning all global policies...
    Cloning: Test to Desktop/clone-policies/policy/Test.yaml
    $ immuta policy list
    Data Masking
    New Column Added
    
    $ immuta policy delete "Data Masking" --dryRun
    {"dryRun":true,"deleting":"Data Masking"}
    
    $ immuta policy delete "Data Masking"
    {"dryRun":false,"deleting":"Data Masking"}
    
    $ immuta policy list
    New Column Added
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/organizations?searchText=immuta
    {
      "values": [
        {
          "name": "Immuta"
        }
      ]
    }
    : Specifies the profile for what instance the CLI will use.

    get <export configuration ID> [flags]: Gets an audit export configuration based on the provided ID. See example .

    The ID of the export configuration.

    • -o, `--output json

    list [flags]: Lists all export configurations. Example: $ immuta audit exportConfig list

    • -o, `--output json

    create <technology> [flags]: Configures a time interval and location to export your audit logs to. Options for <technology> are s3 and adls. Example: $ immuta audit exportConfig create:s3 ./exportConfig.json

    The filepath to the JSON or YAML file that configures the location and time interval for exporting your audit logs to S3 and ADLS Gen2.

    • -o, `- -output json

    delete <export configuration ID> [flags]: Deletes an audit export configuration based on the provided ID. Example: $ immuta audit exportConfig delete f7f9e289-f37b-4942-a18d-66d6de6e7cb2

    The ID of the export configuration.

    • -o, `--output json

    disable <export configuration ID> [flags]: Disables an audit export configuration based on the provided ID. Example: $ immuta audit exportConfig disable f7f9e289-f37b-4942-a18d-66d6de6e7cb2

    The ID of the export configuration.

    • -o, `--output json

    enable <export configuration ID> [flags]: Enables an audit export configuration based on the provided ID. Example: $ immuta audit exportConfig enable f7f9e289-f37b-4942-a18d-66d6de6e7cb2

    The ID of the export configuration.

    • -o, `--output json

    Section Contents
    • Amazon S3 API reference guide: Create an Amazon S3 data source.

    • Azure blob storage API reference guide: Create an Azure blob storage data source.

    • Azure Synapse Analytics API reference guide: Create an Azure Synapse Analytics data source.

    • Databricks API reference guide: Create a Databricks data source.

    • : Create a Redshift data source.

    • : Create a Snowflake data source.

    • : Create a Starburst (Trino) data source.

    • : Manage the data dictionary.

    V2 API

    API Key Method:

    • Generate an API key.

    • Pass your API key in the Authorization header when making a request.

  • Bearer Token Method:

    • Generate an API key.

    • Make a request to the authentication endpoint to receive a bearer token.

    • Include the bearer token in the Authorization header when making a request. This token should be used for multiple requests until it expires. Once a token expires, users must authenticate again to get a new token. When a request uses an expired token, the request will return with a 401 status code.

  • API Key Method

    1. Generate your API key on the API Keys tab on your profile page and save the API key somewhere secure.

    2. You will pass this API key in the authorization header when you make a request, as illustrated in the example below:

    Bearer Token Method

    1. Generate your API key on the API Keys tab on your profile page and save the API key somewhere secure.

    2. Save your API key in a .json file.

    3. Make the following request to the authentication endpoint:

    4. You will receive a response that includes your bearer token. Pass that bearer token in the Authorization header when you make a request, as illustrated in the example below:

    Manage Data Sources

    This page details the immuta datasource command, its subcommands and arguments, and the workflow for creating, renaming, and deleting data sources.

    Command Overview: immuta datasource

    This command allows you to list, save, delete, and rename data sources in your instance of Immuta. The table below illustrates subcommands and arguments.

    Subcommands
    Description
    Argument(s)

    Options

    Use these options to get more details about the datasource command or any of its subcommands:

    • -h

    • --help

    Create a Data Source: immuta datasource save

    1. Add your remote database's connection information in a valid YAML file for the V2 API. Additional payload examples for creating data sources can :

    2. Run immuta datasource save <filepath> [--wait int] [--dryRun], referencing the file you just created. The options you can specify include

      • -d or --dryRun: No updates will actually be made to the data source(s).

    Example

    The following example illustrates a user saving an updated datasourceInfo.yaml file, first as a dry run and then by specifying that the data sources wait 5 seconds to be created.

    Rename a Data Source Connection Key: immuta datasource rename

    1. Run immuta datasource list keys to view a list of data source connection keys. Options you can specify include

      • -h or --help: Get more information about the command.

      • -v or --verbose

    Example

    The following example illustrates a user renaming a data source connection key to demonstration.

    Delete Data Sources: immuta datasource delete

    This command will delete all data sources for the connection key you specify.

    1. Run immuta datasource list keys to view a list of data source connection keys. Options you can specify include

      • -h or --help: Get more information about the command.

      • -v or --verbose

    Example

    The following example illustrates a user deleting the demonstration connection key and all its data sources.

    Manage Your Immuta Tenant

    This page details the immuta command, its subcommands and arguments, and the workflow for cloning a tenant and using the Immuta API.

    Command Overview: immuta

    This command allows you to manage your Immuta tenant by creating data sources, projects, policies, and purposes. The table below illustrates the immuta subcommands and arguments.

    Subcommands
    Description
    Argument(s)

    To view a list of the commands available in your current Immuta CLI version, run immuta with no additional arguments.

    Options

    Options you can specify with the immuta command include

    • --config string: Specify the configuration file name and where it will be saved. (The default is $HOME/.immutacfg.yaml.)

    • -h or --help: Get more information about the command.

    • -p or --profile string

    Clone Your Tenant: immuta clone

    You need the GOVERNANCE permission in Immuta to run this command.

    If you have an Immuta tenant that was set up without using the API, you can use the immuta clone command to save all your data sources, projects, policies, and purposes as payloads:

    This command will create valid V2 API YAML files for all your data sources, projects, policies, and purposes. Within these files, database passwords and user files (such as a BigQuery auth file) will be removed; instead passwords will appear as {{EnvVar "dbPass"}}. The CLI will then read the environment variable dbPass to fill in the password if you use the cloned payload to create or update a data source. File contents will appear as {{ReadFile "<filePath>"}}, and then the CLI will read the file at the path and replace the value when commands are run.

    Options

    • --force: Overwrite existing output directory targets. If this flag is omitted, you will receive an error when the output directory exists and is not empty.

    • -h or --help: Get details about the command.

    Limitations

    • Tags for data sources and projects are not returned.

    • Data sources will not have the sources field, so if these payloads are used in create commands, all possible tables will be created as data sources.

    immuta api

    This command makes an authenticated HTTP(s) request to the Immuta API and prints the response. The default HTTP request method is GET, but POST is used if any parameters were added. You can override the method with --method:

    Options

    • -b, --body string: Unmodified string to be sent as payload body.

    • -d, --data key=value: Add a typed parameter in key=value format. The --data flag behaves like --raw-data, with type conversion based on the format of the value. Literal values, true

    Examples

    The documentation below provides descriptions and examples of immuta api options.

    Manage Projects

    This page details the immuta project command, its subcommands and arguments, and the workflow for creating, renaming, and deleting projects.

    Command: immuta project

    This command allows you to list, save, delete, and rename projects in your instance of Immuta. The table below illustrates subcommands and arguments.

    Subcommands
    Description
    Argument(s)

    Options

    Use these options to get more details about the project command or any of its subcommands:

    • -h

    • --help

    Create Project: immuta project save

    1. Add your project information in a valid YAML file for the V2 API. Additional payload examples for creating projects can :

    2. Run the following referencing the file you just created: immuta project save <filepath> [--dryRun] [--deleteWorkSpaceDataSources] The options you can specify include

      • --deleteWorkSpaceDataSources: Delete all data and the data sources associated with a project workspace when the workspace is deleted.

    Example

    The example below illustrates a user listing all projects and then creating the project demo project.

    Rename a Project Key: immuta project rename

    1. Opt to list all project keys to identify which project you would like to rename by running immuta project list. Options you can specify include

      • -h or --help: Get more information about the command.

      • -v or --verbose

    Example

    The example below illustrates a user renaming the demo project project key to data analytics team.

    Delete a Project: immuta project delete

    1. Opt to list all project keys to determine which project key you would like to delete by running immuta project list. Options you can specify include

      • -h or --help: Get more information about the command.

      • -v or --verbose

    Example

    The example below illustrates a user first disabling and then deleting the project Data Analytics Team.

    Get Fingerprint Status

    Fingerprint API reference guide

    This page illustrates how to check the status of the Fingerprint service using the fingerprint endpoint.

    Additional fields may be included in some responses you receive; however, these attributes are for internal purposes and are therefore undocumented.

    Get the status of the fingerprint service

    GET /fingerprint/status

    Get the status of the Fingerprint service.

    Response parameters

    Attribute
    Description

    Request example

    The following request gets the status of the Fingerprint service.

    Response example

    How-to Guides

    The how-to guides in this section illustrate how to integrate your remote data platform with Immuta so you can manage and enforce access controls on your data.

    Amazon S3 integration API guide

    Private preview: The Amazon S3 integration is available to select accounts. Reach out to your Immuta representative for details.

    Immuta's Amazon S3 integration allows users to apply subscription policies to data in S3 to restrict what prefixes, buckets, or objects users can access. To enforce access controls on this data, Immuta creates S3 grants that are administered by S3 Access Grants, an AWS feature that defines access permissions to data in S3.

    Follow this guide to configure and manage your Amazon S3 integration. Example requests and responses are provided throughout the guide so that you can quickly copy and update them with your own settings.

    In this integration, Immuta generates policy-enforced views in a schema in your configured Azure Synapse Analytics Dedicated SQL pool for tables registered as Immuta data sources.

    Follow this guide to configure and manage your Azure Synapse Analytics integration. Example requests and responses are provided throughout the guide so that you can quickly copy and update them with your own settings.

    Immuta’s integration with Unity Catalog allows you to manage multiple Databricks workspaces through Unity Catalog while protecting your data with Immuta policies. Instead of manually creating UDFs or granting access to each table in Databricks, you can author your policies in Immuta and have Immuta manage and enforce Unity Catalog access-control policies on your data in Databricks clusters or SQL warehouses.

    Follow this guide to configure and manage your Databricks Unity Catalog integration. Example requests and responses are provided throughout the guide so that you can quickly copy and update them with your own settings.

    Private preview: This integration is available to select accounts. Reach out to your Immuta representative for details.

    In this integration, Immuta generates policy-enforced views in your configured Google BigQuery dataset for tables registered as Immuta data sources.

    Follow this guide to configure and manage your Google BigQuery integration. Example requests and responses are provided throughout the guide so that you can quickly copy and update them with your own settings.

    Immuta generates policy-enforced views in your configured Redshift schema for tables registered as Immuta data sources.

    Follow this guide to configure and manage your Redshift integration. Example requests and responses are provided throughout the guide so that you can quickly copy and update them with your own settings.

    Immuta manages access to Snowflake tables by administering Snowflake row access policies and column masking policies on those tables, allowing users to query tables directly in Snowflake while dynamic policies are enforced.

    Follow this guide to configure and manage your Snowflake integration. Example requests and responses are provided throughout the guide so that you can quickly copy and update them with your own settings.

    Immuta policies are translated into Starburst rules and permissions and applied directly to tables within users’ existing catalogs.

    Follow this guide to configure and manage your Starburst (Trino) integration. Example requests and responses are provided throughout the guide so that you can quickly copy and update them with your own settings.

    Get Job Status

    Jobs API reference guide

    This page describes the jobs endpoint.

    Additional fields may be included in some responses you receive; however, these attributes are for internal purposes and are therefore undocumented.

    Get job status and output

    Manage Data Access

    This section of API documentation is specific to searching for data and audit logs, managing policies and access requests, and auditing user activity.

    Policies can also be created and managed using the .

    Section Contents

    Configure Your Instance of Immuta

    This section of API documentation is specific to configuring elements of your instance, such as users, tags, licenses, integrations, and webhooks.

    Section Contents

    • : View your activity notifications.

    Search Connection Strings

    Connection strings API reference guide

    This page describes the connectionStrings endpoint.

    Additional fields may be included in some responses you receive; however, these attributes are for internal purposes and are therefore undocumented.

    Search connection strings

    Manage Projects and Purposes

    and can also be created and managed using the V2 API.

    Section Contents

    $ immuta audit exportConfig get f7f9e289-f37b-4942-a18d-66d6de6e7cb2
    $
    {
      "id": "f7f9e289-f37b-4942-a18d-66d6de6e7cb2",
      "interval": "EVERY_12_HOURS",
      "enabled": true,
      "endpointConfiguration": {
        "__typename": "S3EndpointConfiguration",
        "bucket": "your-s3-bucket",
        "path": "hr-data",
        "region": "us-east-1",
        "accessKeyId": "accessKey"
      },
      "createdAt": "2022-10-23T23:03:11.466Z",
      "createdBy": {
        "name": "John Doe",
        "identityProvider": "okta",
        "id": "[email protected]",
        "type": "USER"
      },
      "updatedAt": "2022-10-23T23:03:11.466Z",
      "updatedBy": {
        "name": "John Doe",
        "identityProvider": "okta",
        "id": "[email protected]",
        "type": "USER"
      }
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: 846e9e43c86a4ct1be14290d95127d13f" \
        https://your-immuta-url.immuta.com/audit
    {
      "apikey": "846e9e43c86a4ct1be14290d95127d13f"
    }
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --data @example_payload.json \
        https://your-immuta-url.immuta.com/bim/apikey/authenticate
    Redshift API reference guide
    Snowflake API reference guide
    Starburst (Trino) API reference guide
    Data dictionary API reference guide
    Azure Synapse Analytics integration API guide
    Databricks Unity Catalog integration API guide
    Google BigQuery integration API guide
    Redshift integration API guide
    Snowflake integration API guide
    Starburst (Trino) integration API guide
    below

    Data and subscription policies: Manage and review data and subscription policies in Immuta.

  • Write access policies: Author policies to manage write access to data sources.

  • Domains reference guide: Create and manage a domain.

  • Manage access requests: View and manage data source and project access requests.

  • Policy handler object: View examples of policy handler objects.

  • Search audit logs: Search Immuta audit logs.

  • Search connection strings: Search by connection string.

  • Search for organizations: Search by organization.

  • Search schemas: Search by schema.

  • V2 API
    Fingerprint service status: Check the status of the Fingerprint service.
  • IAMs: Manage users and their permissions, groups, and attributes.

  • Licenses: Manage and view licenses in Immuta.

  • Search filters

  • Sensitive data discovery: Configure custom sensitive data discovery identifiers and tags.

  • Tags: Create and search for tags.

  • Webhooks: Create webhooks that are triggered by events that happen in the system.

  • Activities and notifications
    Manage Projects: Create and manage projects, including project policies and access requests.
  • Manage Purposes: Create purposes that can be applied to projects and used in policies.

  • Projects
    purposes

    -h or --help: Get more information about the command.

  • -w or --wait int: Specify how long to wait for data source creation.

  • : Print response as JSON.
  • To rename one of your data source connection keys, run immuta datasource rename <old connection key> <new connection key>. You can include the -h or --help options to get more information about this command.

  • : Print response as JSON.
  • Opt to view a list of the data sources in this connection key by running immuta datasource list sources <connection key>.

  • Run immuta datasource delete <connection key> [--dryRun] to delete all of these data sources. Options you can specify include

    • -d or --dryRun: No updates will actually be made.

    • -h or --help: Get more information about the command.

  • list keys

    List all data source connection keys.

    n/a

    list sources

    List all data sources for a given connection key.

    connection key

    save

    Create or update all specified data sources in Immuta given connection information to the remote database.

    filepath

    delete

    Delete all data sources for the given connection key.

    connection key

    rename

    Rename the data source connection key.

    connection key

    be found here

    -d or --dryRun: No updates will be made.

  • -h or --help: Get more information about the command.

  • : Print response as JSON.
  • Rename the project key by running immuta project rename <old project key> <new project key>, enclosing the name of the project key in quotation marks. Options you can specify to get more information about this command include -h or --help.

  • : Print response as JSON.
  • Delete a project key by running immuta project delete <project key> [--dryRun] [--hardDelete, enclosing the project key in quotation marks. Options you can specify include

    • -d or --dryRun: No updates will be made.

    • --hardDelete: If this is set, it will delete everything related to the project in Immuta. If not set, it will only disable the project.

    • -h or --help: Get more information about the command.

  • delete

    Delete a project by project key.

    project key

    list

    List all project keys.

    n/a

    rename

    Rename the project key.

    new project key

    save

    Create or update a project in Immuta.

    filepath

    be found here

    healthy

    boolean If true, the fingerprint status is healthy.

    POST /jobs/statuses

    Get the status and output of the provided jobs.

    Payload parameters

    Attribute
    Description
    Required

    jobIds

    string List of job IDs.

    Yes

    wait

    integer Number of seconds to wait before returning if all jobs have not yet completed. Use -1 to wait indefinitely. The default is 0.

    No

    pollInterval

    integer Number of seconds to wait between subsequent polls. Ignored if not using wait. The default is 1. The minimum is 1.

    No

    Response parameters

    Attribute
    Description

    id

    string The job's globally unique identifier.

    state

    array[string] The job state: active, cancelled, completed, created, expired, failed, or retry.

    output

    string The output of the job, if it exists.

    Request example

    The following request checks the status of the job specified in the payload.

    Payload example

    Response example

    GET /connectionStrings

    Search across all connection strings in the handler table.

    Query parameters

    Attribute
    Description
    Required

    searchText

    string A string used to filter returned connection strings. The query is executed with a wildcard prefix and suffix.

    No

    Response parameters

    Attribute
    Description

    values

    array Details regarding connection strings, including name and count.

    Request example

    The following request searches across all connection strings in the handler table.

    Response example

    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/audit
    Manage Data Sources
    
    Usage:
      immuta datasource [command]
    
    Available Commands:
      delete      Delete all datasources for the given connection key
      list        List Data Source keys and sources
      rename      Rename the connection key
      save        Create/Update all specified data sources in Immuta given connection info to the remote data base
    
    Flags:
      -h, --help   help for datasource
    
    Global Flags:
          --config string    config file (default $HOME/.immutacfg.yaml)
      -p, --profile string   specifies the profile for what instance/api the cli will use (default "default")
    
    Use "immuta datasource [command] --help" for more information about a command.
    connectionKey: 'a connection key'
    connection:
      ssl: true
      port: 5432
      hostname: immuta.db.com
      database: public
      schema: public
      username: user
      password: '{{EnvVar "myPassword"}}'
      handler: Snowflake
    $ immuta datasource save test.yml --dryRun
    {"dryRun":true,"creating":["Public Credit Accounts","Public Credit Transactions","Public Fake Medical Claims 2017","Public Uciml Census Income Enriched"],"updating":[],"deleting":[],"noChange":[],"detectionRunning":false,"tagsUpdated":false,"connectionString":null}
    
    $ immuta datasource save test.yml --wait 5
    {"dryRun":false,"creating":["Public Credit Accounts","Public Credit Transactions","Public Fake Medical Claims 2017","Public Uciml Census Income Enriched"],"updating":[],"deleting":[],"noChange":[],"detectionRunning":false,"tagsUpdated":false,"connectionString":"[email protected]:3306/public"}
    $ immuta datasource list keys
    snowflake.demo-databases.your.url.com:3306/public/public
    
    $ immuta datasource rename snowflake.demo-databases.your.url.com:3306/public/public demonstration
    {"oldConnectionKey":"snowflake.demo-databases.your.url.com:3306/public/public","newConnectionKey":"demonstration"}
    
    $ immuta datasource list keys
    demonstration
    $ immuta datasource list keys
    
    demonstration
    
    $ immuta datasource delete demonstration
    {"dryRun":false,"deleting":["Public Credit Transactions","Public Credit Accounts","Public Uciml Census Income Enriched","Public Fake Medical Claims 2017"]}
    
    $ immuta datasource list sources demonstration
    Error: status code: 404 message: The connection key "demonstration" was not found
    Manage Projects
    
    Usage:
      immuta project [command]
    
    Available Commands:
      delete      Delete a project by project key
      list        List all policy keys
      rename      Rename the project key
      save        Create/Update a Project in Immuta
    
    Flags:
      -h, --help   help for project
    
    Global Flags:
          --config string    config file (default $HOME/.immutacfg.yaml)
      -p, --profile string   specifies the profile for what instance/api the cli will use (default "default")
    
    Use "immuta project [command] --help" for more information about a command.
    name: Demo Project
    projectKey: demo project
    description: "Users need approval to join this project"
    allowMaskedJoins: true
    subscriptionPolicy:
        type: approval
        approvals:
        - requiredPermission: GOVERNANCE
            specificApproverRequired: false
        - requiredPermission: ADMIN
            specificApproverRequired: false
    $ immuta project list
    Public
    
    $ immuta project save test-project.yml
    {"dryRun":false,"creating":true,"updating":false,"numberOfDataSourcesAdded":0,"numberOfDataSourcesRemoved":0,"creatingWorkspace":false,"deletingWorkspace":false,"projectId":3}
    
    $ immuta project list
    Public
    demo project
    $ immuta project list
    Public
    demo project
    
    $ immuta project rename "demo project" "Data Analytics Team"
    {"oldProjectKey":"demo project","newProjectKey":"Data Analytics Team"}
    
    $ immuta project list
    Data Analytics Team
    Public
    $ immuta project list
    Data Analytics Team
    Public
    
    $ immuta project delete "Data Analytics Team"
    {"dryRun":false,"deleting":"Data Analytics Team"}
    
    $ immuta project list
    Data Analytics Team
    Public
    
    $ immuta project delete "Data Analytics Team" --hardDelete
    {"dryRun":false,"deleting":"Data Analytics Team"}
    
    $ immuta project list
    Public
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/fingerprint/status
    {
      "healthy": true
    }
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example_payload.json
        https://your-immuta-url.com/jobs/statuses
    {
      "jobIds": [
        "cefb58a0-cd71-11ec-8e29-81c20d280994"
      ],
      "wait": 0,
      "pollInterval": 1
    }
    {
      "cefb58a0-cd71-11ec-8e29-81c20d280994": {
        "id": "cefb58a0-cd71-11ec-8e29-81c20d280994",
        "state": "completed",
        "output": null
      }
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/connectionStrings
    {
      "values": [
        {
          "name": "[email protected]:???/TEST",
          "count": 5
        }
      ]
    }

    list, delete, rename, and save

    Manage projects.

    list, delete, rename, and save

    Manage purposes.

    list, delete, and save

    version

    The version of the Immuta CLI.

    n/a

    : Specify the profile for what tenant or API the CLI will use.
    ,
    false
    ,
    null
    , and integers are converted to appropriate JSON types. This will be sent in as the request payload.
  • --data-raw key=value: Add a string parameter in key=value format. The --data flag behaves like --raw-data, with type conversion based on the format of the value. Literal values, true, false, null, and integers are converted to appropriate JSON types. This will be sent in as the request payload.

  • -H, --header key:value: Add an HTTP request header in key:value format.

  • -h, --help: Get details about the command.

  • --input <filepath>: A raw request body may be passed from the outside via the file specified to use as body for the HTTP request. Pass in '-' for standard input.

  • -X, --method string: The HTTP method for the request (default GET).

  • -P, --path-param key=value: Add a string parameter in key=value format. Will replace {key} in the url with value.

  • -q, --query key=value: Add a string parameter in key=value format. The key value pairs are serialized into URL query parameters.

  • -t, --outputTemplate string: Format the response using a Go template. The provided Go template is rendered using the JSON data as input. For the syntax of Go templates, see this document.

  • api

    Make an authenticated Immuta API request.

    endpoint

    clone

    Clone all data sources, projects, purposes, and policies information into files.

    directory path

    completion

    Generate shell completion scripts for Immuta CLI commands.

    bash, zsh, fish, or powershell

    configure

    Specify an Immuta tenant URL and API Key to be saved to the Immuta configuration file.

    instance url and Immuta API key

    datasource

    Manage data sources.

    list, delete, rename, and save

    policy

    Manage Global Policies.

    Create Projects API Examples

    Basic Project

    name: A Bare Bones Project
    projectKey: simplest possible project

    Project: Anyone Can Subscribe

    Project: Anyone Who is Approved

    Project: Users with Specific Groups or Attributes

    Project with Databricks Spark Workspace

    Project with Snowflake Workspace

    HTTP Status Codes and Error Messages

    The integrations API returns HTTP status codes, error codes, and messages in JSON format.

    GET error

    The table below provides the HTTP code, the error code, an example message, and troubleshooting guidance for the error.

    Code
    Text
    Description
    immuta clone <outputDirPath>
    immuta api <endPoint> [--method httpMethod] [--input <filePath>] [--body body] [--data key=value] [--raw-data key=value] [--header key:value] [--query key=value] [--path-param key=value] [--outputTemplate string]
    # list tags
    $ immuta api tag
    
    # list tags use query string to filter results
    $ immuta api tag -q searchText=Discovered -q limit=10
    
    # template the response using a Go template. This will print all tags new line separated.
    $ immuta api tag -q limit=10 --template \
        '{{range .}}{{.name}}{{"\n"}}{{end}}'
    
    # Run column detection on specified table
    $ immuta api dataSource/detectRemoteChanges -X PUT -d table=tableName -d schema=schemaName
    
    # the above command is the same as
    $ immuta api dataSource/detectRemoteChanges -X PUT --body '{"table": "tableName", "schema", "schemaName"}'
    
    # set a user's current project - replace templated values in path
    $ immuta api project/current/{projectId} -P projectId=1 -X POST
    
    # the above command is the same as
    $ immuta api project/current/1 -X POST
    name: Anyone Project
    projectKey: Anyone project
    documentation: "# Anyone Can See This"
    description: "Anyone can join this project"
    allowMaskedJoins: false
    subscriptionPolicy:
        type: anyone
        automaticSubscription: true
        description: "Auto-subscribe everyone"
    tags:
      - Discovered.Person Name
    purposes:
      - Use Purposes
      - Purpose Hierarchy.Child 2.Grandchild 2
    project
    purpose
    name: Approval Project
    projectKey: Approval project
    description: "Need approval to join this project"
    allowMaskedJoins: true
    subscriptionPolicy:
        type: approval
        approvals:
          - requiredPermission: GOVERNANCE
            specificApproverRequired: true
          - requiredPermission: ADMIN
            specificApproverRequired: false
    name: Entitlement Project
    projectKey: entitlement project
    description: "Need specific entitlements to join this project"
    subscriptionPolicy:
        type: entitlements
        automaticSubscription: false
        allowDiscovery: true
        entitlements:
          operator: any
          groups:
            - Engineers
            - Founders
          attributes:
            - name: Auth1
              value: super secret
    name: Databricks Spark Project
    projectKey: databricks spark project
    datasources:
      - Crime Data
      - Databricks Credit Card Transactions
      - Databricks Hipaa Data
    purposes:
      - Use Purposes
    workspace:
      type: databricks
      config:
        database: native
        directory: native
        workspaceConfigurationName: S3
    name: Snowflake Project
    projectKey: snowflake project
    datasources:
      - Snowflake Case
      - Snowflake Customer
      - Snowflake Web Sales
    workspace:
      type: snowflake
      config:
        schema:
          SNOWFLAKE_NATIVE
        warehouses:
          - DEMO_WH
    tags:
      - Discovered.Passport

    Not found

    Example: "No Integration found with ID 5." The request failed because the integration with the given ID was not found. Use the to list all integration configurations to find the correct ID.

    DELETE errors

    The table below provides the HTTP code, the error code, an example message, and troubleshooting guidance for each error.

    Code
    Text
    Description

    400

    Bad request

    Example: "Credentials are not required for disable unless the integration was configured automatically. If you need to update your integration credentials, use PUT to update the integration before disabling." The request failed because the payload provided authentication credentials for a manually bootstrapped integration. Remove the authentication credentials from the payload.

    400

    Bad request

    Example: "Integrations that are automatically configured require privileged credentials to disable. Please provide them in your payload." The request failed because the integration was created with autoBootstrap set to true, and privileged credentials were not provided in the request payload to delete the integration. Provide the credentials you used to configure your , , or integration.

    400

    Bad request

    Example: "Credentials are not required to disable a Databricks Unity Catalog integration. If you need to update your integration credentials, use PUT to update the integration before disabling." The request failed because the payload provided authentication credentials for a Databricks Unity Catalog integration. Remove the authentication credentials from the payload.

    404

    Not found

    Example: "No integration found with ID 5." The request failed because the integration with the given ID was not found. Use the to list all integration configurations to find the correct ID.

    POST errors

    The table below provides the HTTP code, the error code, an example message, and troubleshooting guidance for each error.

    Code
    Text
    Description

    400

    Bad Request

    Example: "Use PUT /integrations/1 endpoint to update connection information for Snowflake integration on host test-account.snowflakecomputing.com (id = 1) that previously failed to create." The request failed because the integration previously failed to create. The message you receive includes the ID and host of the integration that failed. Use the to update the connection information for that integration to create it.

    409

    Conflict

    Example: "Snowflake integration already exists on test-account.snowflakecomputing.com (id = 1)." The request failed because an integration already exists on the host. Use the integration ID provided in the error message to delete or modify the existing integration. Ensure that the name and config parameters in the new configuration do not conflict with your existing integration.

    422

    Unprocessable entity

    Example: "Validation of prerequisite setup failed. Unable to create integration." The request failed because a validation test failed. See the documentation for a list of validation test messages and errors to address the issue.

    422

    Unprocessable entity

    Example: "Processing Error: Error trying to get the current metastore info." The request failed because Immuta could not find the Databricks metastore information.

    PUT errors

    The table below provides the HTTP code, the error code, an example message, and troubleshooting guidance for each error.

    Code
    Text
    Description

    400

    Bad request

    Example: "Unable to edit integration due to changes of non-editable attribute(s)." The request failed because an attribute was changed that cannot be edited. The error message includes a list of the attributes that the request attempted to change.

    404

    Not found

    Example: "No integration found with ID 5." The request failed because the integration with the given ID was not found. Use the to list all integration configurations to find the correct ID.

    409

    Conflict

    Example: "Unable to edit integration with ID 10 in current state editing." The request failed because the integration is currently being modified or deleted. Use the to determine when the integration has finished updating. Then, modify the integration. If the integration has been deleted, use the to re-create the integration.

    422

    Unprocessable entity

    Example: "Unable to edit integration with ID 7, validation failed." The request failed because a validation test failed. See the documentation for a list of validation test messages and errors to address the issue.

    404

    Search Filters

    Search filter API reference guide

    This page describes the searchFilter endpoint.

    Additional fields may be included in some responses you receive; however, these attributes are for internal purposes and are therefore undocumented.

    Search filter workflow

    Save a new search filter

    POST /searchFilter

    Save a new search filter.

    Required Immuta permission: CREATE_FILTER

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    The following request saves a new search filter.

    Payload example

    Response example

    Search saved search filters

    GET /searchFilter

    Retrieve saved search filters.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    The following request retrieves all saved search filters.

    Response example

    Delete a search filter

    DELETE /searchFilter/{searchFilterName}

    Delete a search filter by name.

    Required Immuta permission: CREATE_FILTER

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    The following request deletes the Medical Claims search filter.

    Response example

    Search Schemas

    Schemas API reference guide

    This page describes the schemas endpoint of the Immuta API and its request and response parameters.

    Additional fields may be included in some responses you receive; however, these attributes are for internal purposes and are therefore undocumented.

    Search for schemas

    GET /schemas

    Search across all schemas in the handler table.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request gets all of the schemas with the string "medical" in their name.

    Response example

    Manage Identification Frameworks

    Prerequisite

    .

    Command overview: immuta sdd template

    Data Source Request Payload Examples

    Basic Data Source

    Data Source (with More Options)

    409

    Conflict

    Example: "Unable to edit integration with ID 10 in current state editing." The request failed because the integration is currently being modified or deleted. Use the GET /integrations/{id}/status endpoint to determine when the integration has finished updating. Then, delete the integration.

    422

    Unprocessable entity

    Example: "Unable to delete integration with ID 7, validation failed." The request failed because a validation test failed. See the validation results object documentation for a list of validation test messages and errors to address the issue.

    GET /integrations endpoint
    Azure Synapse Analytics
    Redshift
    Snowflake
    GET /integrations endpoint
    PUT /integrations/{id} endpoint
    validation results object
    GET /integrations endpoint
    GET /integrations/{id}/status endpoint
    POST /integrations endpoint
    validation results object

    filter

    array Includes facets to use in the search filter, such as searchText (the base search string for data sources/projects), tag, column, connectionString, schema, and type (type of models to search for: datasource or project).

    Yes

    name

    string Name to be used for the search filter.

    No

    filter

    array The facets used in the search filter, such as searchText (the base search string for data sources/projects), tag, column, connectionString, schema, and type (type of models used in the filter: datasource or project).

    name

    string The name of the search filter.

    searchText

    string A string used to filter returned saved filters. The query is executed with a wildcard prefix and suffix.

    No

    values

    array Details regarding the search filters, including name, filter, searchText (the base search string for data sources/projects), tag, column, connectionString, schema, and type (type of models used in the filter: datasource or project).

    searchFilterName

    string The name of the specific search filter.

    Yes

    values

    array Details regarding the search filters, including name, filter, searchText (the base search string for data sources/projects), tag, column, connectionString, schema, and type (type of models used in the filter: datasource or project).

    Save a new search filter.
    Search for saved search filters.
    Delete a search filter.

    searchText

    string Used to filter returned schemas. The query is executed with a wildcard prefix and suffix.

    No

    values

    metadata The name and count for each result.

    name

    string The name of the schema.

    count

    integer The total number of data sources attached to that schema.

    Databricks Data Source (M2M OAuth - Azure Databricks)

    Databricks Data Source (Override Naming Convention)

    Impala Data Source (with userFile)

    Redshift Spectrum Data Sources

    Your nativeSchemaFormat must contain _immuta to avoid schema name conflicts.

    Snowflake Data Source (Specify Sources)

    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example_payload.json
        https://your-immuta-url.com/searchFilter
    {
      "name": "Medical Claims",
      "filter": {
        "searchText": "",
        "column": ["income_greater_than_50k"],
        "type": "datasource",
        "tag": ["Discovered.Entity.Medicare Number"]
      }
    }
    {
      "name": "Medical Claims",
      "filter": {
        "searchText": "",
        "column": ["income_greater_than_50k"],
        "type": "datasource",
        "tag": ["Discovered.Entity.Medicare Number"]
      }
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/searchFilter
    {
      "values": [{
        "name": "States",
        "filter": {
          "type": "datasource",
          "column": ["state"],
          "searchText": ""
        }
      }]
    }
    curl \
        --request DELETE \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/searchFilter/Medical%20Claims
    {
      "name": "Medical Claims",
      "filter": {
        "tag": ["Discovered.Entity.Medicare Number"],
        "type": "datasource",
        "column": ["income_greater_than_50k"],
        "searchText": ""
      }
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/schemas?searchText=medical
    {
      "values": [
        {
          "name": "medical_records",
          "count": 1
        }
      ]
    }
    connectionKey: my-databricks
    connection:
        hostname: your.databricks.hostname.com
        port: 443
        ssl: true
        database: tpc
        username: token
        password: "${DATABRICKS_PASSWORD}"
        httpPath: sql/protocolv1/o/0/11101101
        handler: Databricks
    connectionKey: my-databricks
    nameTemplate:
      dataSourceFormat: Databricks <Tablename>
      tableFormat: <tablename>
      schemaFormat: databricks
    connection:
      hostname: your.databricks.hostname.com
      port: 443
      ssl: true
      database: data
      username: token
      password: "${DATABRICKS_PASSWORD}"
      httpPath: sql/protocolv1/o/0/1110-11123
      handler: Databricks
    sources:
      - table: credit_card_transactions
        schema: data
        tags:
          table:
            - PCI
            - SENSITIVE
          columns:
          - columnName: transaction_date
            tags:
              - PCI
              - DATE
      - table: crime_data
        schema: data
        naming:
            datasource: Crime Data
            table: crime_data
            schema: databricks
    connectionKey: my-databricks
    nameTemplate:
      dataSourceFormat: Databricks <Tablename>
      tableFormat: <tablename>
      schemaFormat: databricks
      schemaProjectNameFormat: <schema>
    connection:
      hostname: your.databricks.hostname.com
      port: 443
      ssl: true
      database: data
      authenticationMethod: oAuthM2M
      useCertificate: false
      clientId: "${service_principal_clientId}"
      audience: https://your.databricks.hostname.com/oidc/v1/token 
      scope: all-apis
      clientSecret: "${clientSecret}"
      httpPath: sql/protocolv1/o/0/1110-11123
      handler: Databricks
    connectionKey: ebock-databricks
    nameTemplate:
      dataSourceFormat: Databricks <Tablename>
      tableFormat: <tablename>
      schemaFormat: databricks
    connection:
      hostname: your.databricks.hostname.com
      port: 443
      ssl: true
      database: ebock
      username: token
      password: "${DATABRICKS_PASSWORD}"
      httpPath: sql/protocolv1/o/0/1110-185737-wove
      handler: Databricks
    sources:
      - table: credit_card_transactions
        schema: ebock
      - table: crime_data_delta
        schema: ebock
        naming:
            datasource: Crime Data
            table: crime_data
            schema: databricks
      - table: hipaa_data
        schema: ebock
    connectionKey: cdh-impala
    nameTemplate:
      dataSourceFormat: Impala <Tablename>
      tableFormat: <tablename>
      schemaFormat: impala
    connection:
      hostname: your.hadoop.hostname.example.com
      port: 21050
      ssl: true
      database: default
      handler: Apache Impala
      authenticationMethod: kerberos
      username: usera
      userFiles:
        - keyName: TrustedCerts
          content: <Base64 encoded contents of file go here>
          userFilename: tls-ca-bundle.pem
    sources:
      - table: medical_records_parquet
        schema: default
      - table: nyc_taxi_fare_parquet
        schema: default
      - table: nyc_taxi_trip_parquet
        schema: default
    connectionKey: redshift
    connection:
      hostname: your-redshift-cluster.djie25k.us-east-1.redshift.amazonaws.com
      port: 5439
      ssl: true
      database: your_database_with_external_schema
      username: awsuser
      password: your_password
      handler: Redshift
      schema: external_schema
    nameTemplate:
      dataSourceFormat: <Tablename>
      schemaFormat: <schema>
      tableFormat: <tablename>
      schemaProjectNameFormat: <Schema>
      nativeSchemaFormat: <schema>_immuta
      nativeViewFormat: <tablename>
    sources:
      - all: true
    connectionKey: tpc-snowflake
    nameTemplate:
      dataSourceFormat: Snowflake <Tablename>
      tableFormat: <tablename>
      schemaFormat: snowflake
    connection:
      hostname: example.hostname.snowflakecomputing.com
      port: 443
      ssl: true
      database: TPC
      username: USERA
      password: "${SNOWFLAKE_PASSWORD}"
      schema: PUBLIC
      warehouse: IT_WH
      handler: Snowflake
    sources:
      - table: CASE
        schema: PUBLIC
      - table: CASE2
        schema: PUBLIC
      - table: CUSTOMER
        schema: PUBLIC
      - table: WEB_SALES
        schema: PUBLIC
    This command allows you to manage identification frameworks, which are a collection of identifiers and settings used to drive the configuration of SDD runs. The table below illustrates subcommands and arguments.
    Subcommands
    Aliases
    Description

    save

    Create an identification framework.

    None

    Delete the passed identification framework.

    None

    Get an identification framework.

    None

    Options

    Use these options to get more details about the sdd template command or any of its subcommands:

    • -h

    • --help

    Create an identification framework

    1. Save your framework to a valid YAML or JSON file using these attributes:

      Attribute
      Description
      Required

      name

      string Unique, request-friendly framework name.

      Yes

      displayName

      string Unique, human-readable framework name.

      Yes

      description

      An example is provided below.

    2. Run immuta sdd template create <filepath> [flags], referencing the file you just created. The options you can specify include

      • -h or --help: Get more information about the command.

      • -o or --output json | yaml

    Example

    Get an identification framework

    Run immuta sdd template get <frameworkName> [flags], specifying the name of the framework you would like to get. Options you can specify include

    • -h or --help: Get more information about the command.

    • -o or --output json | yaml: Specify the output format.

    • --outputTemplate string: Format the response using a Go template.

    Example

    The example below illustrates a user getting a framework named ACCOUNT_NUMBERS_FRAMEWORK.

    Get the global framework

    Run immuta sdd template global [flags], to get the global framework that has been configured for sensitive data discovery. Options you can specify include

    • -h or --help: Get more information about the command.

    • -o or --output json | yaml: Specify the output format.

    • --outputTemplate string: Format the response using a Go template.

    Example

    The example below illustrates a user getting the global framework that had been configured in the Immuta UI by an administrator.

    Search identification frameworks

    Run immuta sdd template search [string] [flags] to list all identification frameworks or search identification frameworks by name. Options you can specify include

    • --classifiers strings: Limit results to only frameworks that contain the specified identifiers.

    • -h, --help: Help for search.

    • --limit int The search limit for pagination (default 25).

    • --offset int: The search offset for pagination.

    • --order asc | desc: The sort order.

    • -o, --output json | yaml: The output format.

    • --outputTemplate string: Format the response using a Go template.

    • -s, --sort id | name | displayName | type | createdAt | updatedAt: Field to sort by.

    Example

    The example below illustrates a user searching all frameworks containing the ACCOUNT_NUMBER_IDENTIFIER.

    Update an identification framework

    1. Update your framework in a valid YAML or JSON file using these attributes:

      Attribute
      Description
      Required

      name

      string Unique, request-friendly framework name.

      Yes

      displayName

      string Unique, human-readable framework name.

      Yes

      description

    2. Run immuta sdd template update <frameworkName> <filepath> [flags], referencing the file you just updated. The options you can specify include

      • -h or --help: Get more information about the command.

      • -o or --output json | yaml

    Example

    The example below illustrates a user updating a framework named ACCOUNT_NUMBERS_FRAMEWORK.

    Delete an identification framework

    Run immuta sdd template delete <frameworkName> [flags] to delete the framework. The options you can specify include

    • -h or --help: Get more information about the command.

    • -o or --output json | yaml: Specify the output format.

    • --outputTemplate string: Format the response using a Go template.

    Example

    Sensitive data discovery must be enabled

    Create and Manage an Amazon S3 Data Source

    This page describes the native-s3 (Amazon S3 data sources) endpoint.

    Private preview: The Amazon S3 integration is available to select accounts. Reach out to your Immuta representative for details.

    Additional fields may be included in some responses you receive; however, these attributes are for internal purposes and are therefore undocumented.

    Amazon S3 workflow

    1. .

    2. .

    3. .

    Create a data source

    POST /native-s3/handler

    Save the provided connection information as a data source.

    Payload parameters

    The table below outlines the parameters for creating an S3 data source.

    Parameter
    Description
    Required or optional
    Accepted values

    Response schema

    The table below outlines the response schema for successful requests.

    Property
    Description

    Request example

    The following request saves the provided connection information as a data source.

    Response example

    The response returns the ID, name, and prefix of the data source. See the response schema above for details about the response schema. An unsuccessful response returns the status code and an error message.

    Search Amazon S3 data sources

    GET /native-s3/handler/{handlerId}

    Get the handler metadata associated with the provided handler ID.

    Query parameter

    Attribute
    Description
    Required or optional

    Response schema

    Attribute
    Description

    Request example

    The following request returns the handler metadata associated with the provided handler ID.

    Response example

    Delete an Amazon S3 data source

    DELETE /dataSource/{dataSourceId}

    Delete a data source. This will perform a soft delete on the first call and a hard delete the second time.

    Query parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request disables the data source 1.

    Response example

    Manage Sensitive Data Discovery Rules

    Prerequisite

    .

    Command overview: immuta sdd classifier

    $ immuta sdd template -h
    Manage Sensitive Data Discovery Templates
    
    Usage:
      immuta sdd template [command]
    
    Available Commands:
      create      Create an SDD template
      delete      Delete the passed SDD template
      get         Get an SDD template
      global      Get the SDD global template
      search      Search all templates
      update      Update an SDD template
    
    Flags:
      -h, --help   Help for template
    
    Global Flags:
          --config string    Config file (default $HOME/.immutacfg.yaml)
      -p, --profile string   Specifies the profile for what instance/api the cli will use (default "default")
    
    Use "immuta sdd template [command] --help" for more information about a command.
    $ immuta sdd template create ./account-template.json -o json
    {
      "name": "ACCOUNT_NUMBERS_FRAMEWORK",
      "displayName": "Account Numbers Framework",
      "description": "This framework contains the identifier that recognizes account numbers.",
      "createdBy": {
        "id": 1,
        "name": "Example User",
        "email": "[email protected]"
      },
      "id": 2,
      "createdAt": "2022-03-28T15:48:02.977Z",
      "updatedAt": "2022-03-28T15:48:02.977Z",
      "classifiers": [
        {
          "name": "ACCOUNT_NUMBER_IDENTIFIER",
          "overrides": {}
        }
      ]
    }
    $ immuta sdd template get ACCOUNT_NUMBERS_FRAMEWORK
    Getting template ACCOUNT_NUMBERS_FRAMEWORK...
    {
      "name": "ACCOUNT_NUMBERS_FRAMEWORK",
      "displayName": "Account Numbers Framework",
      "description": "This framework contains the identifier that recognizes account numbers.",
      "createdBy": {
        "id": 1,
        "name": "Example User",
        "email": "[email protected]"
      },
      "id": 2,
      "createdAt": "2022-03-28T15:48:02.977Z",
      "updatedAt": "2022-03-28T15:48:02.977Z",
      "classifiers": [
        {
          "name": "ACCOUNT_NUMBER_IDENTIFIER",
          "overrides": {}
        }
      ]
    }
    $ immuta sdd template global
    Getting global template...
    {
      "name": "ACCOUNT_NUMBERS_FRAMEWORK",
      "displayName": "Account Numbers Framework",
      "description": "This framework contains the identifier that recognizes account numbers.",
      "createdBy": {
        "id": 1,
        "name": "Example User",
        "email": "[email protected]"
      },
      "id": 3,
      "createdAt": "2022-03-28T17:10:48.507Z",
      "updatedAt": "2022-03-28T17:10:48.507Z",
      "classifiers": [
        {
          "name": "ACCOUNT_NUMBER_IDENTIFIER",
          "overrides": {}
        }
      ]
    }
    $ immuta sdd template search --classifiers="ACCOUNT_NUMBER_IDENTIFIER"
    Searching all templates...
    ACCOUNT_NUMBERS_FRAMEWORK This framework contains the identifier that recognizes account numbers.
    Displaying 1 of 1 templates
    $ immuta sdd template update ACCOUNT_NUMBERS_FRAMEWORK ./account-template -o json
    {
      "name": "ACCOUNT_NUMBERS_FRAMEWORK",
      "displayName": "Account Numbers Framework",
      "description": "This framework contains the identifier that recognizes account numbers.",
      "createdBy": {
        "id": 1,
        "name": "Example User",
        "email": "[email protected]"
      },
      "id": 2,
      "createdAt": "2022-03-28T15:48:02.977Z",
      "updatedAt": "2022-03-28T16:15:01.791Z",
      "classifiers": [
        {
          "name": "ACCOUNT_NUMBER_IDENTIFIER",
          "overrides": {}
        }
      ]
    }
    $ immuta sdd template delete ACCOUNT_NUMBERS_FRAMEWORK -o json
    {
      "name": "ACCOUNT_NUMBERS_FRAMEWORK",
      "displayName": "Account Numbers Framework",
      "description": "This framework contains the identifier that recognizes account numbers.",
      "createdBy": {
        "id": 1,
        "name": "Example User",
        "email": "[email protected]"
      },
      "id": 2,
      "createdAt": "2022-03-28T15:48:02.977Z",
      "updatedAt": "2022-03-28T16:15:01.791Z",
      "classifiers": [
        {
          "name": "ACCOUNT_NUMBER_FRAMEWORK",
          "overrides": {}
        }
      ]
    }
    : Specify the output format.
  • --outputTemplate string: Format the response using a Go template.

  • : Specify the output format.
  • --outputTemplate string: Format the response using a Go template.

  • Get the global framework.

    search

    ls, list

    Search all identification frameworks.

    update

    None

    Update an identification framework.

    string The framework description.

    Yes

    classifiers

    array Includes each identifier's name and overrides for minConfidence and tags.

    Yes

    string The framework description.

    Yes

    classifiers

    array Includes each identifier's name and overrides for minConfidence and tags.

    Yes

    create
    delete
    get
    global

    dataSources.prefix string

    The S3 prefix that creates a data source for the prefix, bucket, or object provided in the path.

    Required

    -

    type string

    The type of integration.

    Required

    Native S3

    integrationId number

    The unique identifier of the S3 integration.

    Required

    -

    dataSources.dataSourceName string

    The name of the S3 data source you want to create.

    Required

    dataSourceId integer

    The unique identifier of the data source.

    prefix string

    The S3 path of the prefix, bucket, or object used to create the data source.

    dataSourceName string

    The name of the data source.

    handlerId integer

    The specific handler ID.

    Required

    id integer

    The data source ID.

    metadata.prefix string

    The S3 path of the prefix, bucket, or object used to create the data source.

    metadata.integrationId integer

    The unique identifier of the integration.

    metadata.dataSourceName string

    The name of the data source.

    type string

    The handler type (nativeS3Handler).

    awsLocationPath string

    The base S3 location prefix that Immuta used to register the S3 data source.

    dataSourceId

    integer The data source ID.

    Yes

    success boolean

    If true, the request to disable or delete the data source was successful.

    id integer

    The data source ID.

    schemaEvolutionId integer

    The schema evolution ID.

    name string

    The data source name.

    disabled boolean

    If true, the data source is disabled.

    handlerDeleteErrorMessage string

    The delete error message.

    Create an Amazon S3 data source
    Search Amazon S3 data sources
    Delete Amazon S3 data sources

    -

    {
      "name": "ACCOUNT_NUMBERS_FRAMEWORK",
      "displayName": "Account Numbers Framework",
      "description": "This framework contains the identifier that recognizes account numbers.",
      "classifiers": [
        {
          "name": "ACCOUNT_NUMBER_IDENTIFIER"
        }
      ]
    }
    curl -X 'POST' \
        'https://<your-immuta-url.com>/native-s3/handler' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: <your-api-key>' \
        -d '{
        "type": "Native S3",
        "integrationId": <id-of-your-s3-integration>,
        "dataSources": [
          {
            "dataSourceName": "<name-of-data-source>",
            "prefix": "</data-source-prefix>"
          }
        ]
        }'
    {
      "dataSourceId": 1,
      "prefix": "research-data-source",
      "dataSourceName": "s3://research-data-source (64*****50499/us-east-2)"
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/native-s3/handler/1
    {
      "id": 1,
      "metadata": {
        "prefix": "research-data-source",
        "integrationId": 2,
        "dataSourceName": "s3://research-data-source (64*****50499/us-east-2)"
      },
      "type": "nativeS3Handler",
      "awsLocationPath": "s3://"
    }
    curl \
        --request DELETE \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/dataSource/1
    {
      "success": true,
      "id": 1,
      "schemaEvolutionId": 1,
      "name": "s3://research-data-source (64*****50499/us-east-2)",
      "disabled": true,
      "handlerDeleteErrorMessage": null
    }
    This command allows you to manage identifiers that will apply tags to data that matches the criteria you specify during SDD. The table below illustrates subcommands and arguments.
    Subcommands
    Aliases
    Description

    save

    Create an identifier.

    None

    Delete the passed identifier.

    None

    Get an identifier.

    ls, list

    Options

    Use these options to get more details about the sdd classifier command or any of its subcommands:

    • -h

    • --help

    Create an identifier

    1. Save your identifier to a valid YAML or JSON file using these attributes.

      Attribute
      Description
      Required

      name

      string Unique, request-friendly identifier name.

      Yes

      displayName

      string Unique, human-readable identifier name.

      Yes

      description

      Examples are provided below.

    2. Run immuta sdd classifier create <filepath> [flags], referencing the file you just created. The options you can specify include

      • -h or --help: Get more information about the command.

      • -o or --output json | yaml

    Example

    Get an identifier

    Run immuta sdd classifier get <classifierName> [flags], specifying the name of the identifier you would like to get. Options you can specify include

    • -h or --help: Get more information about the command.

    • -o or --output json | yaml: Specify the output format.

    • --outputTemplate string: Format the response using a Go template.

    Example

    The example below illustrates a user getting an identifier called ACCOUNT_NUMBER_IDENTIFIER.

    Search identifiers

    Run immuta sdd classifier search [string] [flags] to list all identifiers or search identifiers by name. Options you can specify include

    • -h, --help: Help for search.

    • --limit int The search limit for pagination (default 25).

    • --offset int: The search offset for pagination.

    • --order asc | desc: The sort order.

    • -o, --output json | yaml: The output format.

    • --outputTemplate string: Format the response using a Go template.

    • -s, --sort id | name | displayName | type | createdAt | updatedAt: Field to sort by.

    • --type regex | columnNameRegex | dictionary | builtIn: Limit results to the specified criteria type.

    Example

    The example below illustrates a user searching all identifiers containing account.

    Update an identifier

    1. Update your identifier in a valid YAML or JSON file using these attributes:

      Attribute
      Description
      Required

      name

      string Unique, request-friendly identifier name.

      Yes

      displayName

      string Unique, human-readable identifier name.

      Yes

      description

    2. Run immuta sdd classifier update <classifierName> <filepath> [flags], referencing the file you just updated. The options you can specify include

      • -h or --help: Get more information about the command.

      • -o or --output json | yaml

    Example

    The example below illustrates a user updating an identifier named ACCOUNT_NUMBER_IDENTIFIER.

    Delete an identifier

    Run immuta sdd classifier delete <classifierName> [flags] to delete the identifier. The options you can specify include

    • -h or --help: Get more information about the command.

    • -o or --output json | yaml: Specify the output format.

    • --outputTemplate string: Format the response using a Go template.

    Example

    Sensitive data discovery must be enabled

    Configure a Starburst (Trino) Integration

    The Starburst (Trino) resource allows you to create and manage your Starburst (Trino) integration. In this integration, Immuta policies are translated into Starburst rules and permissions and applied directly to tables within users’ existing catalogs.

    Use the /integrations endpoint to

    • configure a Starburst (Trino) integration

    • get a Starburst (Trino) integration

    Requirements

    • APPLICATION_ADMIN Immuta permission

    • A valid

    Configure the integration

    To configure the Starburst (Trino) integration, complete the following steps:

    Generate the configuration snippet

    1. Copy the request example. The example provided uses JSON format, but the request also accepts YAML.

    2. Replace the Immuta URL and with your own.

    Response

    The response returns the status of the Starburst (Trino) integration configuration connection. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Configure the cluster

    1. Navigate to the Immuta App Settings page and click the Integrations tab.

    2. Click your enabled Starburst (Trino) integration and copy the configuration snippet displayed.

    3. Follow the steps in the configure the Immuta system access control plugin in or section to add the configuration in the appropriate immuta-access-control.properties file to finish configuring your cluster.

    Get an integration

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    3. Replace the {id} request parameter with the unique identifier of the integration you want to get. Alternatively, you can get a list of all integrations and their IDs with the .

    Response

    The response returns a Starburst (Trino) integration configuration and the Immuta API key used to configure the Starburst cluster. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Get all integrations

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    Response

    The response returns the configuration for all integrations. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Generate a new Immuta API key

    Cluster restart required

    To update your API key in Starburst (Trino), you must shut down your cluster, generate and update the API key, and then restart your cluster. If you do not shut down your cluster, generating a new API key using the endpoint below will cause downtime for your deployment.

    1. .

    2. Copy the request example below and replace these values:

      • Replace the Immuta URL and with your own.

      • Replace the {id} request parameter with the unique identifier of the Starburst (Trino) integration you want to regenerate the Immuta API key for.

    Response

    The response includes your new Immuta API key.

    Delete an integration

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    3. Replace the {id} request parameter with the unique identifier of the integration you want to delete.

    Response

    The response returns the status of the Starburst (Trino) integration configuration that has been deleted. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Manage Write Policies

    Write policies API endpoint reference guide

    The policies resource allows you to manage and apply policies to your data sources. The endpoints and examples provided in this guide are specific to creating global write policies.

    Endpoints

    Method
    Endpoint
    Description

    POST

    POST /dataSource/{dataSourceId}/access

    Manually grants write access to a user.

    Request parameter

    Parameter
    Description

    Body parameters

    The request accepts a JSON or YAML payload. See the for parameter details.

    Response

    The response returns the following JSON object. See the for details about the response schema.

    POST /policy/global

    Creates a global policy.

    The example below grants write access to users with the attribute has.write and applies the global policy to all data sources.

    The example below grants users write access when they are individually selected by data owners and applies the policy to data sources with columns tagged Discovered.Person Name.

    Body parameters

    The request accepts a JSON or YAML payload. See the for parameter details.

    Response

    The response returns the global policy configuration. See the for details about the response schema.

    DELETE /policy/global/{policyId}

    Deletes the specified policy.

    Request parameter

    Parameter
    Description

    Response

    The response returns the deleted global policy configuration. See the for details about the response schema.

    GET /policy/global/{policyId}

    Gets the specified policy.

    Request parameter

    Parameter
    Description

    Response

    The response returns the global policy configuration. See the for details about the response schema.

    PUT /policy/global/{policyId}

    Updates the specified policy.

    Body parameters

    The request accepts a JSON or YAML payload. See the for parameter details.

    Response

    The response returns the updated global policy configuration. See the for details about the response schema.

    Manage Notifications

    Activity API reference guide

    This page describes the activity endpoint of the Immuta API, which allows you to view your activity notifications.

    Additional fields may be included in some responses you receive; however, these attributes are for internal purposes and are therefore undocumented.

    Review your notifications

    Method
    Path
    Purpose

    Review your activity notifications

    GET /activity

    View your activity notification feed.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request gets 5 activities for the current user and sorts them in descending order.

    Response example

    Review your unread notifications

    GET /activity/hasUnread

    Determine whether you have unread activity notifications.

    Response parameters

    Attribute
    Description

    Request example

    This request determines whether or not the requesting user has unread activities.

    Response example

    {
      "name": "MY_REGEX_IDENTIFIER",
      "displayName": "My Regex Identifier",
      "description": "A regex identifier",
      "type": "regex",
      "config": {
        "regex": "^[A-Z][a-z]+",
        "tags": ["Discovered.regex-example"]
      }
    }
    {
      "name": "MY_DICTIONARY_IDENTIFIER",
      "displayName": "My Dictionary Identifier",
      "description": "A dictionary identifier",
      "type": "dictionary",
      "config": {
        "values": ["Bob", "Eve"],
        "caseSensitive": true,
        "tags": ["Discovered.dictionary-example", "Discovered.dictionary-example"]
      }
    }
    {
      "name": "MY_COLUMN_NAME_REGEX_IDENTIFIER",
      "displayName": "My Column Name Regex Identifier",
      "description": "A column name regex identifier",
      "type": "columnNameRegex",
      "config": {
        "columnNameRegex": "ssn|social ?security",
        "tags": ["Discovered.column-name-regex-example"]
      }
    }
    $ immuta sdd classifier -h
    Manage Sensitive Data Discovery Classifiers
    
    Usage:
      immuta sdd classifier [command]
    
    Available Commands:
      create      Create an SDD classifier
      delete      Delete the passed SDD classifier
      get         Get an SDD classifier
      search      Search all classifiers
      update      Update an SDD classifier
    
    Flags:
      -h, --help   Help for classifier
    
    Global Flags:
          --config string    Config file (default $HOME/.immutacfg.yaml)
      -p, --profile string   Specifies the profile for what instance/api the cli will use (default "default")
    
    Use "immuta sdd classifier [command] --help" for more information about a command.
    $ immuta sdd classifier create ./account-classifier.json
    Creating classifier from ./account-classifier...
    Create successful.
    $ immuta sdd classifier get ACCOUNT_NUMBER_IDENTIFIER
    Getting classifier ACCOUNT_NUMBER_IDENTIFIER...
    {
      "createdBy": {
        "id": 1,
        "name": "Example User",
        "email": "[email protected]"
      },
      "name": "ACCOUNT_NUMBER_IDENTIFIER",
      "displayName": "Account Number Identifier",
      "description": "This identifier recognizes account numbers using a regex critiera",
      "type": "regex",
      "config": {
        "tags": [
          "Discovered.account-number"
        ],
        "regex": "^[0-9]{9}-[0-9]{3}-[0-9]{1}$"
      },
      "id": 69,
      "createdAt": "2022-03-28T14:52:14.004Z",
      "updatedAt": "2022-03-28T14:52:14.004Z"
    }
    $ immuta sdd classifier search account
    Searching all classifiers...
    ACCOUNT_NUMBER_IDENTIFIER This identifier recognizes account numbers using a regex criteria.
    $ immuta sdd classifier update ACCOUNT_NUMBER_IDENTIFIER ./account-classifier -o json
    {
      "createdBy": {
        "id": 1,
        "name": "Example User",
        "email": "[email protected]"
      },
      "name": "ACCOUNT_NUMBER_IDENTIFIER",
      "displayName": "Account Number Identifier",
      "description": "This identifier recognizes account numbers using a regex criteria.",
      "type": "regex",
      "config": {
        "tags": [
          "Discovered.account-number"
        ],
        "regex": "^[0-9]{9}-[0-9]{3}-[0-9]{1}$"
      },
      "id": 69,
      "createdAt": "2022-03-28T14:52:14.004Z",
      "updatedAt": "2022-03-28T15:25:28.575Z"
    }
    $ immuta sdd classifier delete ACCOUNT_NUMBER_IDENTIFIER -o json
    {
      "createdBy": {
        "id": 1,
        "name": "Example User",
        "email": "[email protected]"
      },
      "name": "ACCOUNT_NUMBER_IDENTIFIER",
      "displayName": "Account Number Identifier",
      "description": "This identifier recognizes account numbers using a regex criteria.",
      "type": "regex",
      "config": {
        "tags": [
          "Discovered.account-number"
        ],
        "regex": "^[0-9]{9}-[0-9]{3}-[0-9]{1}$"
      },
      "id": 69,
      "createdAt": "2022-03-28T14:52:14.004Z",
      "updatedAt": "2022-03-28T15:25:28.575Z"
    }
    : Specify the output format.
  • --outputTemplate string: Format the response using a Go template.

  • : Specify the output format.
  • --outputTemplate string: Format the response using a Go template.

  • Search all identifiers.

    update

    None

    Update an identifier.

    string The identifier description.

    Yes

    type

    string The type of criteria: regex, dictionary, columnNameRegex, or builtIn.

    Yes

    config

    object The configuration of the identifier, which may include config.values, config.caseSensitive, config.regex, config.columnNameRegex, and config.tags.

    Yes

    config.tags

    array[string] The name of the tags to apply to the data source.

    Yes

    config.regex

    string A case-insensitive regular expression to match against column values.

    No

    config.columnNameRegex

    string A case-insensitive regular expression to match against column names.

    No

    config.values

    array[string] The list of words to include in the dictionary.

    No

    config.caseSensitive

    boolean Indicates whether or not values are case sensitive. Defaults to false.

    No

    string The identifier description.

    Yes

    type

    string The type of criteria: regex, dictionary, columnNameRegex, or builtIn.

    Yes

    config

    object The configuration of the identifier, which may include config.values, config.caseSensitive, config.regex, config.columnNameRegex, and config.tags.

    Yes

    config.tags

    array[string] The name of the tags to apply to the data source.

    Yes

    config.regex

    string A case-insensitive regular expression to match against column values.

    No

    config.columnNameRegex

    string A case-insensitive regular expression to match against column names.

    No

    config.values

    array[string] The list of words to include in the dictionary.

    No

    config.caseSensitive

    boolean Indicates whether or not values are case sensitive. Defaults to false.

    No

    create
    delete
    get
    search

    /dataSource/{dataSourceId}/access

    Manually grants write access to a user

    POST

    /policy/global

    Creates a global write access policy

    DELETE

    /policy/global/{policyId}

    Deletes the specified global write access policy

    GET

    /policy/global/{policyId}

    Gets the global policy with the given policy ID

    PUT

    /policy/global/{policyId}

    Updates the specified global policy

    dataSourceId integer

    The unique identifier of the data source.

    policyId integer

    The unique identifier of the policy.

    policyId integer

    The unique identifier of the policy.

    write access manual grant payload description
    payload reference guide
    global policy payload description
    payload reference guide
    payload reference guide
    payload reference guide
    global policy payload description
    payload reference guide

    size

    integer The number of records to return in this query.

    No

    modelType

    string The type of object to get activity for (i.e., data source, script, etc.).

    No

    modelId

    string The ID for the model (i.e., the data source ID).

    No

    sortField

    string The field to use for sorting.

    No

    sortOrder

    string The sort order to use. The default is desc.

    No

    searchText

    string If set, will use text to search through notification types and return all matched types.

    No

    notificationType

    string If set, will only return activities of this type.

    No

    permission

    string If set, will only return activities from users with a given permission if current user has it as well.

    No

    GET

    /activity

    View your activity notification feed.

    GET

    /activity/hasUnread

    Determine whether you have unread activity notifications.

    excludeMine

    boolean If true, excludes activities that were initiated by the calling user.

    No

    nonRequestActivity

    boolean If true, excludes data source access requests from the returned activities.

    No

    new

    boolean If true, excludes activities that are marked as 'read'.

    No

    offset

    integer Used in combination with size to fetch pages.

    count

    integer The total number of results available.

    unread

    integer The number of unread activities.

    activities

    metadata The information about the individual activities.

    unread

    boolean If true, the user has unread activities.

    No

    curl -X 'POST' \
        'https://www.organization.immuta.com/dataSource/6/access' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "profileId": 3,
        "state": "subscribed",
        "accessGrant": "WRITE"
        }'
    {
      "isSubscriptionOverride": true,
      "id": 23,
      "modelId": "6",
      "modelType": "datasource",
      "state": "subscribed",
      "metadata": {},
      "admin": 2,
      "denialReasoning": null,
      "profile": 3,
      "group": null,
      "policy": false,
      "expiration": null,
      "acknowledgeRequired": false,
      "createdAt": "2023-10-11T14:43:00.726Z",
      "updatedAt": "2023-10-11T14:43:00.726Z",
      "accessGrant": "WRITE",
      "approved": true
    }
    curl -X 'POST' \
        'https://www.organization.immuta.com/policy/global' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "subscription",
        "name": "Allow users with specific entitlements to have write access",
        "actions": [{
          "type": "subscription",
          "subscriptionType": "policy",
          "accessGrant": "WRITE",
          "exceptions": {
            "operator": "and",
            "conditions": [{
              "type": "authorizations",
              "authorization": {
                "auth": "has",
                "value": "write"
              }
          }]
        },
        }],
        "staged": false
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/policy/global' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "subscription",
        "name": "Data owners grant specific users write access",
        "actions": [{
          "type": "subscription",
          "subscriptionType": "manual",
          "accessGrant": "WRITE"
        }],
        "staged": false,
        "circumstances": [{
        "type": "columnTags",
        "columnTag": {
          "name": "Discovered.Person Name",
          "displayName": "Discovered . Person Name",
          "hasLeafNodes": false
          }
        }]
        }'
    {
      "policyKey": "Manual global write policy",
      "name": "Manual global write policy",
      "type": "subscription",
      "template": true,
      "staged": false,
      "systemGenerated": false,
      "deleted": false,
      "certification": null,
      "actions": [
        {
          "type": "subscription",
          "accessGrant": "WRITE",
          "description": null,
          "allowDiscovery": false,
          "subscriptionType": "manual",
          "shareResponsibility": false,
          "automaticSubscription": false
        }
      ],
      "circumstances": null,
      "metadata": null,
      "clonedFrom": null,
      "createdBy": 2,
      "id": 4,
      "createdAt": "2023-10-10T13:18:37.270Z",
      "updatedAt": "2023-10-10T13:18:37.270Z",
      "createdByName": "Taylor",
      "ownerRestrictions": null
    }
    {
      "policyKey": "Manual global write policy",
      "name": "Manual global write policy",
      "type": "subscription",
      "template": true,
      "staged": false,
      "systemGenerated": false,
      "deleted": false,
      "certification": null,
      "actions": [
        {
          "type": "subscription",
          "accessGrant": "WRITE",
          "description": null,
          "allowDiscovery": false,
          "subscriptionType": "manual",
          "shareResponsibility": false,
          "automaticSubscription": false
        }
      ],
      "circumstances": [{
        "type": "columnTags",
        "columnTag": {
          "name": "Discovered.Person Name",
          "displayName": "Discovered . Person Name",
          "hasLeafNodes": false
          }
        }],
      "metadata": null,
      "clonedFrom": null,
      "createdBy": 2,
      "id": 4,
      "createdAt": "2023-10-10T13:18:37.270Z",
      "updatedAt": "2023-10-10T13:18:37.270Z",
      "createdByName": "Taylor",
      "ownerRestrictions": null
    }
    curl -X 'DELETE' \
        'https://www.organization.immuta.com/policy/global/4' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    curl -X 'GET' \
        'https://www.organization.immuta.com/policy/global/4' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    curl -X 'PUT' \
        'https://www.organization.immuta.com/policy/global/4' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "subscription",
        "name": "Manual global write policy",
        "template": true,
        "actions": [{
          "type": "subscription",
          "subscriptionType": "manual",
          "description": "This updated policy only applies to data sources tagged Discovered.Healthcare NPI.",
          "accessGrant": "WRITE"
        }],
        "staged": false,
        "circumstances": [{
          "operator": "or",
          "type": "columnTags",
          "columnTag": {
            "name": "Discovered.Healthcare NPI",
            "displayName": "Discovered . Healthcare NPI",
            "hasLeafNodes": false
          }
        }]
        }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/activity?size=5&sortOrder=desc
    {
      "count": 210,
      "activities": [
        {
          "modelType": "datasource",
          "modelId": "105",
          "createdAt": "2021-05-04T18:39:08.712Z",
          "notificationType": "modelUserDeleted",
          "metadata": {
            "dataSourceName": "Public Uciml Census Income Enriched",
            "activity": "access",
            "action": "revoked"
          },
          "read": false,
          "id": 1255,
          "updatedAt": "2021-05-04T18:39:08.712Z",
          "actionBy": {
            "id": 2,
            "name": "John",
            "email": "[email protected]"
          },
          "targetUser": {
            "id": 2,
            "name": "John",
            "email": "[email protected]"
          }
        },
        {
          "modelType": "datasource",
          "modelId": "106",
          "createdAt": "2021-05-04T18:39:08.696Z",
          "notificationType": "modelUserDeleted",
          "metadata": {
            "dataSourceName": "Public Fake Medical Claims 2017",
            "activity": "access",
            "action": "revoked"
          },
          "read": false,
          "id": 1254,
          "updatedAt": "2021-05-04T18:39:08.696Z",
          "actionBy": {
            "id": 2,
            "name": "John",
            "email": "[email protected]"
          },
          "targetUser": {
            "id": 2,
            "name": "John",
            "email": "[email protected]"
          }
        },
        {
          "modelType": "datasource",
          "modelId": "105",
          "createdAt": "2021-05-04T18:39:08.649Z",
          "notificationType": "modelDeleted",
          "metadata": {
            "dataSourceName": "Public Uciml Census Income Enriched",
            "fields": {
            "deleted": true
          }
        },
          "read": false,
          "id": 1253,
          "updatedAt": "2021-05-04T18:39:08.649Z",
          "actionBy": {
            "id": 2,
            "name": "John",
            "email": "[email protected]"
          },
          "targetUser": {
            "id": 2,
            "name": "John",
            "email": "[email protected]"
          }
        },
        {
          "modelType": "datasource",
          "modelId": "106",
          "createdAt": "2021-05-04T18:39:08.650Z",
          "notificationType": "modelDeleted",
          "metadata": {
            "dataSourceName": "Public Fake Medical Claims 2017",
            "fields": {
            "deleted": true
          }
        },
          "read": false,
          "id": 1252,
          "updatedAt": "2021-05-04T18:39:08.650Z",
          "actionBy": {
            "id": 2,
            "name": "John",
            "email": "[email protected]"
          },
          "targetUser": {
            "id": 2,
            "name": "John",
            "email": "[email protected]"
          }
        },
        {
          "modelType": "datasource",
          "modelId": "103",
          "createdAt": "2021-05-04T18:39:08.555Z",
          "notificationType": "modelUserDeleted",
          "metadata": {
            "dataSourceName": "Public Credit Transactions",
            "activity": "access",
            "action": "revoked"
          },
          "read": false,
          "id": 1251,
          "updatedAt": "2021-05-04T18:39:08.555Z",
          "actionBy": {
            "id": 2,
            "name": "John",
            "email": "[email protected]"
          },
         "targetUser": {
            "id": 2,
            "name": "John",
            "email": "[email protected]"
          }
        }
      ],
      "unread": 210,
      "next": "1251_2021-05-04T18:39:08.555Z"
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/activity/hasUnread
    {
      "unread": false
    }

    Once you make this request, your old Immuta API key will be deleted and will no longer be valid.

  • The response includes your new Immuta API key. Replace the old immuta.apikey value in the Immuta access control properties file with this new key.

  • Enable your Starburst (Trino) cluster.

  • get all integrations
    generate a new Immuta API key
    delete a Starburst (Trino) integration
    Starburst Enterprise license
    Generate the configuration snippet
    Configure your Starburst cluster
    API key
    response schema reference
    HTTP status codes and error messages
    Starburst
    Trino
    API key
    GET /integrations endpoint
    response schema reference
    HTTP status codes and error messages
    API key
    response schema reference
    HTTP status codes and error messages
    Disable your Starburst (Trino) cluster
    API key
    API key
    response schema reference
    HTTP status codes and error messages
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Trino"
        }'
    {
      "id": "123456789",
      "status": "creating",
      "validationResults": {
        "status": "passed",
        "validationTests": [ ]
      }
    }
    {
      "statusCode": 422,
      "error": "Unprocessable entity",
      "message": "Validation of prerequisite setup failed. Unable to create integration."
    }
    curl -X 'GET' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    {
      "id": "123456789",
      "status": "enabled",
      "type": "Trino",
      "config": {
        "apiKey": "3ea2cde7******461b02ebaa"
      }
    }
    curl -X 'GET' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    [
      {
        "id": "1",
        "status": "enabled",
        "validationResults": {
          "status": "passed",
          "validationTests": [
            {
              "name": "Initial Validation: Basic Connection Test",
              "status": "passed"
            },
            {
              "name": "Initial Validation: Default Warehouse Access Test",
              "status": "passed",
              "result": []
            },
            {
              "name": "Initial Validation: Validate access to Privileged Role",
              "status": "passed",
              "result": []
            },
            {
              "name": "Validate Automatic: Database Does Not Exist",
              "status": "passed"
            },
            {
              "name": "Validate Automatic: Impersonation Role Does Not Exist",
              "status": "skipped"
            },
            {
              "name": "Validate Automatic Bootstrap User Grants",
              "status": "passed"
            }
          ]
        },
        "type": "Snowflake",
        "autoBootstrap": true,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "port": 443,
          "audit": {
            "enabled": false
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "lineage": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "<REDACTED>",
          "password": "<REDACTED>",
          "role": "ACCOUNTADMIN"
        }
      },
      {
        "id": "2",
        "status": "enabled",
        "type": "Databricks",
        "validationResults": {
          "status": "passed",
          "validationTests": [
            {
              "name": "Metastore validation",
              "status": "passed"
            },
            {
              "name": "Basic Connection Test",
              "result": [
                {
                  "1": 1
                }
              ],
              "status": "passed"
            }
          ]
        },
        "autoBootstrap": true,
        "config": {
          "workspaceUrl": "www.example-workspace.cloud.databricks.com",
          "httpPath": "sql/protocolv1/o/0/0000-00000-abc123",
          "token": "REDACTED",
          "audit": {
            "enabled": false
          },
          "catalog": "immuta"
        }
      }
    ]
    { "newKey": "5bb6cae9******300c21acbb" }
    curl -X 'DELETE' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    {
      "id": "123456789",
      "status": "deleting",
      "validationResults": {
        "status": "passed",
        "validationTests": []
      }
    }
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/{id}/regenerate' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'

    Immuta V2 API

    Policy as code benefits

    • Reduces complexity: The data source API has been simplified to only require the connection information in most instances and one endpoint for all database technologies.

    • Maintains less state: Whether updating or creating, the same endpoint is used, and the same data is passed. No ids are required, so no additional state is required.

    • Requires fewer steps: Only an API key is required; no additional authentication step is required before using the API.

    • Integrates with Git: Define data sources and policies in files that can be tracked in Git and easily pushed to Immuta. Both JSON and YAML are supported for more flexibility. (For example, use YAML to add comments in files.)

    Authentication

    Before using the Immuta API, users need to authenticate with an API key. To generate an API key, complete the following steps in the Immuta UI.

    1. Click your initial in the top right corner of the screen and select Profile.

    2. Go to the API Keys tab and then click Generate Key.

    3. Complete the required fields in the modal and click Create.

    4. Pass the key that is provided in the Authorization header:

    Endpoints and details

    All of the API endpoints described below take either JSON or YAML, and the endpoint and payload are the same for both creating and updating data sources, policies, projects, and purposes.

    Create a data source

    The V2 API is built to easily enable an “as-code” approach to managing your data sources, so each time you POST data to this endpoint, you are expected to provide complete details of what you want in Immuta. The two examples below illustrate this design:

    • If you POST once explicitly defining a single table under sources, and then POST a second time with a different table, this will result in a single data source in Immuta pointing to the second table and the first data source will be deleted or disabled (depending on the value specified for ).

    • If you POST once with two tableTags specified (e.g., Tag.A and Tag.B) and do a follow-up POST with tableTags: [Tag.C], only Tag.C will exist on all of the tables specified; tags Tag.A and Tag.B

    Through this endpoint, you can create or update all data sources for a given schema or database.

    POST /api/v2/data

    Query parameters

    Parameter
    Description

    Payload

    Attribute
    Description

    Note: See for more details about these attributes.

    Request payload examples

    Create a policy

    POST /api/v2/policy

    Requirements:

    • Immuta permission GOVERNANCE

    Query parameters

    Parameter
    Description

    Payload

    Attribute
    Description

    Note: See for payload details.

    Request payload examples**

    • Data Policies:

    Create a project

    POST /api/v2/project

    Query parameters

    Parameter
    Description

    Payload

    Attribute
    Description

    Note: See for payload details.

    Request payload examples

    Create a purpose

    POST /api/v2/purpose

    Query parameters

    Parameter
    Description

    Payload

    Attribute
    Description

    Note: See for payload details.

    Request payload examples

    Best practices

    • Register in a schema by enabling . Schema monitoring will negate the need to re-call the /data endpoint when you have new tables because schema monitoring will automatically recognize and register them.

    • To frequently update data tags on a data source, instead of the/data endpoint.

    • Use the . Rather than relying on re-calling the /data endpoint after a dbt run to update your data sources, follow the dbt and transform workflow and use schema monitoring to recognize changes to your data sources and reapply policies.

    Getting Started

    The integrations API is a REST API that allows you to integrate your remote data platform with Immuta so that Immuta can manage and enforce access controls on your data.

    To configure an integration using the API, you must have the APPLICATION_ADMIN Immuta permission.

    Authenticate with the API

    There are two methods for making an authenticated request to the integrations API. Select a tab below for instructions.

    Search Audit Logs

    Audit API reference guide

    This endpoint has been deprecated and replaced by .

    This page describes the audit endpoint API. The audit API allows users to programmatically search for audit records in Immuta.

    Additional fields may be included in some responses you receive; however, these attributes are for internal purposes and are therefore undocumented.

    will be removed from all the data sources.
    Note: If you are frequently using the v2 API to update data tags, consider using the
    instead.
    Snowflake Data Source (Specifies Sources)

    circumstanceOperator (optional)

    all or any Specify whether "all" of the circumstances must be met for the policy to be applied, or just "any" of them.

    staged (optional)

    boolean Whether or not this global policy is in a staged. status. Default: false

    certification (optional)

    object Certification information for the global policy.

    Minimize Data Created Between

  • Purpose Restrictions

  • Row-level Policies

  • Multiple Policies

  • datasources (optional)

    string[] The list of data sources to add to this project.

    subscriptionPolicy (optional)

    object The policy for which users can subscribe to this project. Default: manual subscription policy

    workspace (optional)

    object If this is a workspace project, this is the workspace configuration. The project will automatically be equalized.

    equalization (optional)

    boolean If true, will normalize all users to the same entitlements so that everyone sees the same data. Default: false

    tags (optional)

    string[] Tags to add to the project.

    Project with Databricks Spark Workspace
  • Project with Snowflake Workspace

  • dryRun

    boolean If true, no updates will actually be made. Default: false

    wait

    number The number of seconds to wait for data sources to be created before returning. Anything less than 0 will wait indefinitely. Default: 0

    connectionKey

    string A key/name to uniquely identify this collection of data sources.

    connection

    object Connection information.

    nameTemplate (optional)

    object Supply a template to override naming conventions. Immuta will use the system default if not supplied.

    options (optional)

    object Override options for these sources. If not provided, system defaults will all be used.

    owners (optional)

    object Specify owners for all data sources created. If an empty array is provided, all data owners (other than the calling user) will be removed from the data source. To allow for an external process (or the UI) to control data owners, if the element is completely missing from the payload, data owners will not be modified.

    sources (optional)

    object Configure which sources are created. If not provided, all sources from the given connection will be created.

    dryRun

    boolean If true, no updates will actually be made. Default: false

    reCertify

    boolean If true (and if the certification has changed), someone will need to re-certify this policy on all impacted data sources. Default: false

    policyKey

    string A key/name to uniquely identify this policy.

    name

    string The name of the policy.

    type

    subscription or data The type of policy.

    actions

    object The actual rules for this policy (see examples).

    ownerRestrictions (optional)

    object[] Object identifying the entities to which this global policy should be restricted.

    circumstances (optional)

    object When this policy should get applied

    dryRun

    boolean If true, no updates will actually be made. Default: false

    deleteDataSourcesOnWorkspaceDelete

    boolean If true, will delete all data and the data sources associated with a project workspace when the workspace is deleted. Default: false

    projectKey

    string A key/name to uniquely identify this project.

    name

    string The name of the project.

    description (optional)

    string A short description for the project.

    documentation (optional)

    object Markdown-supported documentation for this project.

    allowedMaskedJoins (optional)

    boolean If true, will allow joining on masked columns between data sources in this project. Only certain policies allow masked join. Default: false

    purposes (optional)

    string[] The list of purposes to add to this project.

    dryRun

    boolean If true, no updates will actually be made. Default: false

    reAcknowledgeRequired

    boolean If true, will require all users of any projects using this purpose to re-acknowledge any updated acknowledgement statements. Default: false

    name

    string The name of the purpose.

    description (optional)

    string A short description for the purpose.

    acknowledgement (optional)

    string The acknowledgement that users must agree to when joining a project with this purpose. If not provided, the system default will be used.

    kAnonNoiseReduction (optional)

    string The level of reduction allowed when doing policy adjustments on data sources in projects with this purpose.

    hardDelete
    Create Data Source Payload Attribute Details
    Basic Data Source
    Databricks Data Source (Override Naming Convention)
    Impala Data Source (with userFile)
    Basic Postgres Data Source
    Policy Request Payload Examples
    Subscription Policies
    Data Owner Restrictions
    Masking Policies
    Project Request Payload Examples
    Basic Project
    Project: Anyone Can Subscribe
    Project: Anyone Who is Approved
    Project: Users with Specific Groups or Attributes
    Purposes Request Payload Examples
    Basic Purpose
    Advanced Purpose
    Sub-Purpose
    all tables
    schema monitoring
    use the custom REST catalog integration
    Data engineering with limited policy downtime guide
    custom REST catalog integration
    curl --data-binary project.yaml -H "Authorization: ${IMMUTA_API_KEY}" -H "Content-Type: text/plain" https:/<immuta-url>/api/v2/project
    Generate your API key on the API Keys tab on your profile page and save the API key somewhere secure.
  • You will pass this API key in the authorization header when you make a request, as illustrated in the example below:

    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: 846e9e43c86a4ct1be14290d95127d13f" \
        https://www.organization.immuta.com/integrations
    1. Generate your API key on the API Keys tab on your profile page and save the API key somewhere secure.

    2. Save your API key in a .json file.

      {
      "apikey": "846e9e43c86a4ct1be14290d95127d13f"
      }
    3. Make the following request to the authentication endpoint:

      curl \
          --request POST \
          --header "Content-Type: application/json" \
          --data @example_payload.json \
          https://www.organization.immuta.com/bim/apikey/authenticate
    4. You will receive a response that includes your bearer token. Pass that bearer token in the Authorization header when you make a request, as illustrated in the example below:

    Configure your integration

    Use the POST /integrations endpoint to configure the integration so that Immuta can enforce access controls on tables registered as Immuta data sources. See a section below for a sample request and details about configuring your integration.

    Amazon S3 example

    Private preview: The Amazon S3 integration is available to select accounts. Reach out to your Immuta representative for details.

    1. Set up an Access Grants instance.

    2. Copy the request example.

    3. Replace the values in the request with your Immuta URL and API key or bearer token.

    4. Change the config values to your own, where

      • name is the name for the integration that is unique across all Amazon S3 integrations configured in Immuta.

      • awsAccountId is the ID of your AWS account.

      • awsRegion is the account's AWS region (such as us-east1).

      • awsLocationRole is the AWS IAM role ARN assigned to the base access grants location. This is the role the AWS Access Grants service assumes to vend credentials to the grantee.

      • awsLocationPath is the base S3 location prefix that Immuta will use for this connection when registering S3 data sources. This path must be unique across all S3 integrations configured in Immuta.

      • awsAccessKeyId is the AWS access key ID of the AWS account configuring the integration.

      • awsSecretAccessKey is the AWS secret access key of the AWS account configuring the integration.

    For more configuration examples, see the Configure an Amazon S3 integration guide. For information about the configuration payload, see the Integration payload reference guide.

    Azure Synapse Analytics example

    Replace the values in the request with your Immuta URL and API key or bearer token, and change the config values to your own, where

    • host is the URL of your Azure Synapse Analytics account.

    • schema is the name of the Immuta-managed schema where all your secure views will be created and stored.

    • database is the name of an existing database where the Immuta system user will store all Immuta-generated schemas and views.

    • username and password are the username and password of the system account that can act on Azure Synapse Analytics objects and configure the integration.

    The example sets autoBootstrap to true, which grants Immuta one-time access to credentials to configure the resources in your Azure Synapse Analytics environment for you. If you set autoBootstrap to false, you must manually run the bootstrap script in your Azure Synapse Analytics environment yourself before making the request.

    For more configuration examples, see the Configure an Azure Synapse Analytics integration guide. For information about the configuration payload, see the Integration payload reference guide.

    Databricks Unity Catalog example

    Replace the values in the request with your Immuta URL and API key or bearer token, and change the config values to your own, where

    • workspaceUrl is your Databricks workspace URL.

    • httpPath is the HTTP path of your Databricks cluster or SQL warehouse.

    • token is the Databricks personal access token. This is the access token for the Immuta service principal.

    • catalog is the name of the Databricks catalog Immuta will create to store internal entitlements and other user data specific to Immuta. This catalog will only be readable for the Immuta service principal and should not be granted to other users. The catalog name may only contain letters, numbers, and underscores and cannot start with a number.

    For more configuration examples, see the Configure a Databricks Unity Catalog integration guide. For information about the configuration payload, see the Integration payload reference guide.

    Google BigQuery example

    Private preview: This integration is available to select accounts. Reach out to your Immuta representative for details.

    1. Create a Google Cloud service account and role by either using the Google Cloud console or the provided Immuta script.

    2. Copy the request example. The example uses JSON format, but the request also accepts YAML.

    3. Replace the Immuta URL and API key with your own.

    4. Change the config values to your own, where

      • role is the Google Cloud role used to connect to Google BigQuery.

      • datasetSuffix is the suffix to postfix to the name of each dataset created to store secure views. This string must start with an underscore.

      • dataset is the name of the BigQuery dataset to provision inside of the project for Immuta metadata storage.

      • location is the dataset's location, which can be any valid GCP location (such as us-east1

    For more configuration examples, see the Configure a Google BigQuery integration guide. For information about the configuration payload, see the Integration payload reference guide.

    Redshift example

    Replace the values in the request with your Immuta URL and API key or bearer token, and change the config values to your own, where

    • host is the URL of your Redshift account.

    • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

    • initialDatabase is the name of an existing database in Redshift that Immuta initially connects to and creates the Immuta-managed database.

    • authenticationType is the type of authentication to use when connecting to Redshift.

    • username and password are the credentials for the system account that can act on Redshift objects and configure the integration.

    The example sets autoBootstrap to true, which grants Immuta one-time access to credentials to configure the resources in your Redshift environment for you. If you set autoBootstrap to false, you must manually run the bootstrap script in your Redshift environment yourself before making the request.

    For more configuration examples, see the Configure a Redshift integration guide. For information about the configuration payload, see the Integration payload reference guide.

    Snowflake example

    Replace the values in the request with your Immuta URL and API key or bearer token, and change the config values to your own, where

    • host is the URL of your Snowflake account.

    • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

    • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

    • authenticationType is the type of authentication to use when connecting to Snowflake.

    • username and password are the credentials for the system account that can act on Snowflake objects and configure the integration.

    The example sets autoBootstrap to true, which grants Immuta one-time access to credentials to configure the resources in your Snowflake environment for you. If you set autoBootstrap to false, you must manually run the bootstrap script in your Snowflake environment yourself before making the request.

    For more configuration examples, see the Configure a Snowflake integration guide. For information about the configuration payload, see the Integration payload reference guide.

    Starburst (Trino) example

    1. Replace the values in the request with your Immuta URL and API key or bearer token.

    2. Navigate to the Immuta App Settings page and click the Integrations tab.

    3. Click your enabled Starburst (Trino) integration and copy the configuration snippet displayed.

    4. Follow the steps in the configure the Immuta system access control plugin in or section to add the configuration in the appropriate immuta-access-control.properties file to finish configuring your cluster.

    Protect your data

    Map usernames and create policies before you register your metadata to ensure that policies are enforced on tables and views immediately.

    1. Map usernames to Immuta to ensure Immuta properly enforces policies and audits user queries.

    2. Build global policies in Immuta to enforce access controls:

      • Create policies via the API

      • Create subscription policies in the UI

    Register metadata

    Register your metadata using the API or Immuta UI:

    • API how-to guides

      • Amazon S3

      • Azure Synapse Analytics

      • Databricks

    • UI how-to guide:

    Additional resources

    How-to guides

    See the following how-to guides for configuration examples and steps for creating, managing, or disabling your integration:

    • Amazon S3 integration API reference

    • Azure Synapse Analytics integration API reference

    • Databricks Unity Catalog integration API reference

    • Google BigQuery integration API reference

    Reference guides

    See the following reference guides for information about the integrations API endpoints, payloads, and responses:

    • Integrations API endpoints

    • Integrations API payloads

    • Integrations API response schema

    • HTTP status codes and error messages

    Workflow

    1. Search all audit records.

    2. Retrieve a specific audit record.

    3. Search for recent activities using the API key.

    4. Search for queries for a specific data source.

    Search for audit records

    GET /audit

    Search for audit records.

    Query parameters

    Attribute
    Description
    Required

    dataSourceId

    array[integer] The data source ID.

    No

    projectId

    array[integer] The project ID.

    No

    profileId

    array[integer] The user profile ID.

    No

    recordType

    array[integer] The type of audit event being captured. This also corresponds to the additional information in the record field.

    Response parameters

    Attribute
    Description

    hits

    metadata Details regarding the returned list of audits.

    Request example

    The following request searches for all audit records.

    Response example

    Retrieve a specific audit record

    GET /audit/{recordId}

    Retrieve a specific audit record.

    Query parameters

    Attribute
    Description
    Required

    recordId

    string The audit record ID.

    Yes

    Response parameters

    Attribute
    Description

    hits

    metadata Details regarding the returned audit record.

    Request example

    The following request retrieves a specific audit record.

    Response Example

    Query for activity by API key

    GET /audit/apikey/activity

    Queries for the recent activity using the API key.

    Query parameters

    Attribute
    Description
    Required

    recordId

    string The audit record ID.

    Yes

    Response parameters

    Attribute
    Description

    value

    metadata regarding the recent activity.

    Request example

    The following request queries for the recent activity using the API key.

    Response example

    Search for query list by data source

    GET /audit/queries/dataSource/{dataSourceId}/mine

    Returns the list of the current user's distinct queries for the specified data source.

    Query parameters

    Attribute
    Description
    Required

    dataSourceId

    array[integer] The data source ID.

    Yes

    offset

    integer Used in combination with size to fetch pages.

    No

    size

    integer Pages results by default; size is the number of results to return per page. Default 50

    No

    sortField

    string Sorts results by field. Default dateTime

    Response parameters

    Attribute
    Description

    auditId

    array[integer] The audit ID.

    lastRun

    integer The date and time the query was last run in Unix.

    timesRun

    integer The number of times the audit has been run.

    name

    string The name of the query.

    Request example

    The following request returns the list of the current user's distinct queries.

    Response example

    Export UAM records

    Create an Azure Blob Storage Data Source

    Azure Blob Storage data source API reference guide

    The azureblob endpoint allows you to connect and manage Azure Blob Storage data sources in Immuta.

    Additional fields may be included in some responses you receive; however, these attributes are for internal purposes and are therefore undocumented.

    Azure Blob workflow

    1. .

    2. .

    3. .

    Create a data source

    POST /azureblob/handler

    Save the provided connection for an Azure Blob Storage data source.

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    The following request saves the provided connection information (in example-payload.json) as a data source.

    Request payload example

    Response example

    Get information about a data source

    GET /azureblob/handler/{handlerId}

    Return the handler metadata associated with the provided handler ID.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    The following request returns the handler metadata associated with the provided handler ID.

    Response example

    Manage data sources

    Method
    Path
    Purpose

    Update a specific data source

    PUT /azureblob/handler/{handlerId}

    Update the provided information for an Azure Blob Storage data source.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    The following request with the payload below updates the metadata for the data source with the handler ID 18.

    Payload example

    Response example

    Update multiple data sources

    PUT /azureblob/bulk

    Update the data source metadata associated with the provided connection string.

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    The following request updates the autoIngest value to true for data sources with the connection string specified in the payload below.

    Payload example

    Response example

    Re-crawl the data source

    PUT /azureblob/handler/{handlerId}/crawl

    Re-crawls the data source and updates the metadata.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    The response returns a string of characters that identify the job run.

    Request example

    The following request re-crawls the data source.

    Response example

    Response Schema

    The table below outlines the response schema for all integration configurations.

    Property
    Description

    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Trino"
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Native S3",
        "autoBootstrap": false,
        "config": {
            "name": "S3 integration",
            "awsAccountId": "123456789",
            "awsRegion": "us-east-1",
            "awsLocationRole": "arn:aws:iam::123456789:role/access-grants-instance-role",
            "awsLocationPath": "s3://",
            "authenticationType": "accessKey",
            "awsAccessKeyId": "123456789",
            "awsSecretAccessKey": "123456789"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Azure Synapse Analytics",
        "autoBootstrap": true,
        "config": {
            "host": "organization.azure.com",
            "schema": "immuta",
            "database": "sample_database",
            "username": "[email protected]",
            "password": "abc1234",
            "authenticationType": "userPassword"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Databricks",
        "autoBootstrap": true,
        "config": {
            "workspaceUrl": "www.example-workspace.cloud.databricks.com",
            "httpPath": "sql/protocolv1/o/0/0000-00000-abc123",
            "authenticationType": "token",
            "token": "REDACTED",
            "catalog": "immuta"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Google BigQuery",
        "autoBootstrap": false,
        "config": {
            "role": "immuta",
            "datasetSuffix": "_secureView",
            "dataset": "immuta",
            "location": "us-east1",
            "credential": "{\"type\":\"service_account\",\"project_id\":\"innate-conquest-123456\",\"private_key_id\":\"9163c12345690924f5dd218ff39\",\"private_key\":\"-----BEGIN PRIVATE KEY-----\nXXXXXXXro0s\n/yQlPQijowkccmrmWJyr93kdLnwJzBvLHCto/+W\ncvF2ygX9oM/dyUK//z//4nptMp+Ck//Yw3D4rIBwGu4DWiR1qRnf\nDoGyXfThPTQ==\n-----END PRIVATE KEY-----\n\",\"client_email\":\"service-account-id@innate-conquest-123456.iam.gserviceaccount.com\",\"client_id\":\"1166290***432952487857\",\"auth_uri\":\"https://accounts.google.com/o/oauth2/auth\",\"token_uri\":\"https://oauth2.googleapis.com/token\",\"auth_provider_x509_cert_url\":\"https://www.googleapis.com/oauth2/v1/certs\",\"client_x509_cert_url\":\"https://www.googleapis.com/robot/v1/metadata/x509/service-accound-id%40innate-conquest-123456.iam.gserviceaccount.com\",\"universe_domain\":\"googleapis.com\"}"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Redshift",
        "autoBootstrap": true,
        "config": {
            "host": "organization.aws.amazon.com",
            "database": "immuta",
            "initialDatabase": "REDSHIFT_SAMPLE_DATA",
            "authenticationType": "userPassword",
            "username": "[email protected]",
            "password": "abc1234"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": true,
        "config": {
            "host": "organization.us-east-1.snowflakecomputing.com",
            "warehouse": "SAMPLE_WAREHOUSE",
            "database": "SNOWFLAKE_SAMPLE_DATA",
            "authenticationType": "userPassword",
            "username": "[email protected]",
            "password": "abc1234",
            "role": "ACCOUNTADMIN"
        }
        }'
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/audit?size=2&sortField=dateTime&sortOrder=desc
    {
      "hits": [
        {
          "dateTime": "1632756753272",
          "dataSourceName": null,
          "projectName": null,
          "recordType": "auditQuery",
          "blobId": null,
          "userId": "[email protected]",
          "profileId": 2,
          "purposeIds": null,
          "success": true,
          "failureReason": null,
          "id": "480d9d3f-4128-445d-8eec-3cccb34f9935",
          "fingerprintVersionName": null,
          "email": "[email protected]"
        },
        {
          "dateTime": "1632755783628",
          "dataSourceName": null,
          "projectName": null,
          "recordType": "authenticate",
          "blobId": null,
          "userId": "[email protected]",
          "profileId": 2,
          "purposeIds": null,
          "success": true,
          "failureReason": null,
          "id": "d143719b-6af9-4af3-aa99-8055be40e877",
          "fingerprintVersionName": null,
          "email": "[email protected]"
        }
      ],
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/audit/480d9d3f-4128-445d-8eec-3cccb34f9935
    {
      "id": "480d9d3f-4128-445d-8eec-3cccb34f9935",
      "dateTime": "1632756753272",
      "month": 1460,
      "profileId": 2,
      "userId": "[email protected]",
      "dataSourceId": null,
      "dataSourceName": null,
      "projectId": null,
      "projectName": null,
      "purposeIds": null,
      "policyId": null,
      "policyName": null,
      "fingerprintVersionId": null,
      "fingerprintVersionName": null,
      "count": 1,
      "recordType": "auditQuery",
      "success": true,
      "failureReason": null,
      "failureDetails": null,
      "subscriptionState": null,
      "accessedId": null,
      "accessedIdType": null,
      "accessedIamId": null,
      "accessedUserId": null,
      "groupAccessType": null,
      "groupIamId": null,
      "accessedGroupId": null,
      "component": "audit",
      "accessType": null,
      "blobId": null,
      "queryId": null,
      "extra": {
        "params": {
          "size": 50,
          "sortField": "dateTime",
          "sortOrder": "desc",
          "offset": 0
        }
      },
      "dataSourceSchemaName": null,
      "dataSourceTableName": null,
      "featureKey": null,
      "sqlUser": null,
      "action": null,
      "blobSize": null,
      "hardDelete": null,
      "keyAction": null,
      "keyId": null,
      "keyIamId": null,
      "keyUserId": null,
      "createdAt": "2021-09-27T15:32:33.274Z",
      "updatedAt": "2021-09-27T15:32:33.274Z"
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/audit/apikey/activity?keyid=650&count=1
    {
      "id": "480d9d3f-4128-445d-8eec-3cccb34f9935",
      "dateTime": "1632756753272",
      "month": 1460,
      "profileId": 2,
      "userId": "[email protected]",
      "dataSourceId": null,
      "dataSourceName": null,
      "projectId": null,
      "projectName": null,
      "purposeIds": null,
      "policyId": null,
      "policyName": null,
      "fingerprintVersionId": null,
      "fingerprintVersionName": null,
      "count": 1,
      "recordType": "auditQuery",
      "success": true,
      "failureReason": null,
      "failureDetails": null,
      "subscriptionState": null,
      "accessedId": null,
      "accessedIdType": null,
      "accessedIamId": null,
      "accessedUserId": null,
      "groupAccessType": null,
      "groupIamId": null,
      "accessedGroupId": null,
      "component": "audit",
      "accessType": null,
      "blobId": null,
      "queryId": null,
      "extra": {
        "params": {
          "size": 50,
          "sortField": "dateTime",
          "sortOrder": "desc",
          "offset": 0
        }
      },
      "dataSourceSchemaName": null,
      "dataSourceTableName": null,
      "featureKey": null,
      "sqlUser": null,
      "action": null,
      "blobSize": null,
      "hardDelete": null,
      "keyAction": null,
      "keyId": null,
      "keyIamId": null,
      "keyUserId": null,
      "createdAt": "2021-09-27T15:32:33.274Z",
      "updatedAt": "2021-09-27T15:32:33.274Z"
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/audit/queries/dataSource/23/mine?size=10&sortField=lastrun&sortOrder=desc
    {
      "hits": [
        {
          "auditId": "ff264e8e-2ccc-468f-9129-bb0995c9cdf5",
          "lastrun": "1631627763345",
          "timesrun": "5",
          "name": "Name"
        },
        {
          "auditId": "f722042f-f0f3-4c83-bd33-7672892d918f",
          "lastrun": "1631200121550",
          "timesrun": "3",
          "name": null
        }
      ],
      "count": 2
    }

    No

    outcome

    Array[integer]

    No

    minDate

    timestamp The minimum date.

    No

    maxDate

    timestamp The maximum date.

    No

    blobId

    string The blob ID.

    No

    offset

    integer Used in combination with size to fetch pages.

    No

    size

    integer Pages results by default; size is the number of results to return per page. Default 50

    No

    sortField

    string Sorts results by field. Default dateTime

    No

    sortOrder

    string Sorts results by order, which must be asc or desc. Default desc

    No

    No

    sortOrder

    string Sorts results by order, which must be asc or desc. Default desc

    No

    type

    string The type of data source: ingested (metadata will exist in Immuta) or queryable (metadata is dynamically queried).

    Yes

    name

    string The name of the data source. It must be unique within the Immuta instance.

    Yes

    sqlTableName

    string A string that represents this data source's table in Immuta.

    Yes

    organization

    string The organization that owns the data source.

    Yes

    category

    string The category of the data source.

    No

    description

    string The description of the data source.

    No

    hasExamples

    boolean When true, the data source contains examples.

    No

    private

    boolean When false, the data source will be publicly available in the Immuta UI.

    Yes

    blobHandler

    array[object] A list of full URLs providing the locations of all blob store handlers to use with this data source.

    Yes

    blobHandlerType

    string Describes the type of underlying blob handler that will be used with this data source (e.g., MS SQL).

    Yes

    recordFormat

    string The data format of blobs in the data source, such as json, xml, html, or jpeg.

    id

    integer The handler ID.

    dataSourceId

    integer The ID of the data source.

    warnings

    string This message describes issues with the created data source, such as the data source being unhealthy.

    connectionString

    string The connection string used to connect the data source to Immuta.

    handlerId

    integer The specific handler ID.

    Yes

    skipCache

    boolean If true, the handler cache will be skipped when retrieving the handler data.

    No

    dataSourceId

    integer The data source ID.

    value

    array Details regarding the handler, including container, accountname, sasTokenURL, ingestUserId, tagAttributes, dataSourceName, refreshInterval, eventTimeAttribute, useDirectoryForTags.

    PUT

    /azureblob/handler/{handlerId}

    Update the provided information for an Azure Blob Storage data source.

    PUT

    /azureblob/bulk

    Update the handler metadata associated with the provided connection string.

    PUT

    /azureblob/handler/{handlerId}/crawl

    Re-crawl the data source and update the metadata.

    handlerId

    integer The specific handler ID.

    Yes

    skipCache

    boolean When true, will skip the handler cache when retrieving metadata.

    No

    id

    integer The ID of the handler.

    dataSourceId

    integer The data source ID.

    metadata

    array Details regarding the updated information.

    handler

    metadata Includes metadata about the handler, such as ssl, port, database, hostname, username, and password.

    Yes

    connectionString

    string The connection string used to connect to the data sources.

    Yes

    bulkId

    string The ID of the bulk data source update.

    connectionString

    string The connection string shared by the data sources bulk updated.

    jobsCreated

    integer The number of jobs that ran to update the data sources; this number corresponds to the number of data sources updated.

    HandlerId

    integer The specific handler ID.

    Yes

    Create a data source
    Get information about a data source
    Manage data sources

    Yes

    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://your-immuta-url.com/azureblob/handler
    {
      "handler": {
        "metadata": {
          "tagAttributes": [],
          "eventTimeAttribute": "",
          "useDirectoryForTags": false,
          "sasToken": "?sv=your=sas?token",
          "sasTokenUrl": "https://your.blob.example.windows.net/sastoken-url",
          "container": "demodata"
        }
      },
      "dataSource": {
        "blobHandler": {
          "scheme": "https",
          "url": ""
        },
        "blobHandlerType": "Azure Blob Storage",
        "recordFormat": "",
        "type": "ingested",
        "name": "dev",
        "sqlTableName": "dev"
      }
    }
    {
      "id": 18,
      "dataSourceId": 18
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/azureblob/handler/67
    {
      "dataSourceId": 427,
      "metadata": {
        "container": "integration",
        "accountName": "integration-tests",
        "sasTokenUrl": "https://your.blob.example.windows.net/",
        "ingestUserId": "azure blob storage_indexer_example",
        "tagAttributes": [],
        "dataSourceName": "Test",
        "refreshInterval": 0,
        "eventTimeAttribute": "",
        "useDirectoryForTags": false
      },
      "type": "azureBlobStorageHandler",
      "connectionString": "integration-tests/integration",
      "id": 427,
      "createdAt": "2021-09-22T18:45:47.744Z",
      "updatedAt": "2021-09-22T18:45:47.969Z"
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://your-immuta-url.com/azureblob/handler/18
    {
      "dataSourceId": 18,
      "metadata": {
        "container": "testdata",
        "accountName": "integration-tests",
        "sasTokenUrl": "https://your.blob.example.windows.net/",
        "ingestUserId": "azure blob storage_indexer_example",
        "tagAttributes": [],
        "dataSourceName": "dev",
        "refreshInterval": 0,
        "eventTimeAttribute": "",
        "useDirectoryForTags": false
      },
      "type": "azureBlobStorageHandler",
      "connectionString": "your/testdata",
      "id": 18,
      "createdAt": "2021-09-23T18:47:52.976Z",
      "updatedAt": "2021-09-23T18:47:53.194Z"
    }
    {
      "id": 18,
      "dataSourceId": 18,
      "metadata": {
        "sasToken": "2:your?sastoken==",
        "container": "testdata",
        "accountName": "your-account-name",
        "sasTokenUrl": "2:your?sastokenurlTS",
        "ingestAPIKey": "996samplee89c1apia7ckey9",
        "ingestUserId": "azure blob storage_indexer_example",
        "tagAttributes": [],
        "dataSourceName": "dev",
        "refreshInterval": 0,
        "eventTimeAttribute": "",
        "useDirectoryForTags": false
      }
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://your-immuta-url.com/azureblob/bulk
    {
      "ids": [
        5, 6
      ],
      "connectionString": "integration-tests/integration",
      "handler": {
        "metadata": {
          "autoIngest": true
        }
      }
    }
    {
      "bulkId": "bulk_ds_update_dd2600809bf8418dbea2706d6f456636",
      "connectionString": "integration-tests/integration",
      "jobsCreated": 0
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/azureblob/hanfler/427/crawl
    a4de5af0-1be1-11ec-8131-6fe77107bfa9
    ).
  • credential is the Google BigQuery service account JSON keyfile credential content. See the Google documentation for guidance on generating and downloading this keyfile.

  • Starburst
    Trino
    Create data policies in the UI
    Redshift
    Snowflake
    Starburst (Trino)
    Create a data source
    Redshift integration API reference
    Snowflake integration API reference
    Starburst (Trino) integration API reference
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/integrations
    Integration statuses

    The status property in the response schema shows the status of the integration. The table below provides definitions for each status and the state of the integration configuration.

    Status
    Description
    State

    createError

    Error occurred during creation of the integration.

    In use

    creating

    Integration is in the process of being created and set up.

    In use

    deleted

    Integration is deleted.

    Not in use

    deleteError

    Error occurred while deleting the integration. The integration has been rolled back to the previous state.

    In use

    Validation results object

    The validationResults object provides details about the status of each test Immuta runs to validate the integration configuration.

    Attribute
    Description
    Possible values

    status string

    Whether or not the connection validation passed.

    • passed

    • failed

    • warning

    validationTests array[]

    This array includes the validation tests run on the integration connection.

    -

    validationTests.name string

    The name of the validation test.

    See the section corresponding to your integration type for a list of test names and messages:

    validationTests.status string

    The status of the validation test.

    Amazon S3 validation tests

    The table below provides the errors and messages for validation tests that fail when configuring or updating the integration.

    Test name
    Description
    Message

    There is no existing integration matching this configuration

    Verifies that the integration configuration does not match an existing one.

    -

    The provided integration name is unique across Immuta S3 integrations

    Verifies that the name of the integration does not match an existing S3 integration name.

    "The Immuta service account does not end with expected value."

    The provided access grants location role is a valid ARN format

    Verifies that the access grants location role is in the correct format.

    "The specified access grants location role is not a valid ARN format."

    The provided AWS credentials allow fetching the caller's identity via the AWS STS API

    Verifies that the integration can use the AWS STS API to get the caller's identity using the provided credentials.

    Azure Synapse Analytics validation tests

    The table below provides the errors and messages for validation tests that fail when configuring or updating the integration.

    Test name
    Description
    Message

    Initial validation: connect

    Verifies that Immuta can connect to Azure Synapse Analytics.

    "Unable to connect to host."

    Initial validation: delimiters test

    Verifies that the delimiters are unique.

    "Hash delimiter and array delimiter must not have the same value."

    Validate automatic: impersonation role does not exist

    Verifies that the user impersonation role specified in the request payload does not already exist.

    "Impersonation role already exists. If this role can be safely dropped please do so and try again. Alternatively, specify a different role name."

    Validate Immuta system user can manage database

    Verifies that the specified user can manage the database.

    Databricks Unity Catalog validation tests

    The table below provides the errors and messages for validation tests that fail when configuring or updating the integration.

    Test name
    Description
    Message

    Basic connection test

    Verifies that Immuta can connect to Databricks Unity Catalog.

    "Could not connect to host, please confirm you are using valid connection parameters."

    Manual catalog setup

    Verifies that the catalog and tables used by Immuta are present and have the correct permissions. This test is run when autoBootstrap is false in the Databricks Unity Catalog integration configuration.

    "Encountered an error looking up catalog metadata for catalog."

    Metastore validation

    Verifies that the Unity Catalog metastore is assigned to the specified workspace.

    "No metastore is assigned to workspace."

    Google BigQuery validation tests

    The table below provides the errors and messages for validation tests that fail when configuring or updating the integration.

    Test name
    Description
    Message

    Basic validation: connection can be made to BigQuery

    Verifies that Immuta can connect to Google BigQuery.

    "Could not connect to the remote BigQuery connection."

    Basic validation: Immuta service account postfix

    Verifies that the service account ends with the expected value of @<projectId>.iam.gserviceaccount.com.

    "The Immuta service account does not end with expected value."

    Basic validation: non-matching service account in key file

    Verifies that the service account matches the one provided in the keyfile.

    "The service account does not match the service account in the provided key file."

    Basic validation: verify service account not being used for data source connection credentials

    Verifies that credentials that have been used to create Google BigQuery data sources are not the same credentials used to configure the Google BigQuery integration.

    Redshift validation tests

    The table below provides the errors and messages for validation tests that fail when configuring or updating the integration.

    Test name
    Description
    Message

    Initial validation: basic connection test

    Verifies that Immuta can connect to Redshift.

    "Unable to connect to host."

    Validate automatic: database does not exist

    Verifies that the database specified in the request payload does not already exist.

    "The database already exists. If this database can be safely dropped, please do so and try again. Alternatively, specify a different database name."

    Validate automatic: impersonation role does not exist

    Verifies that the user impersonation role specified in the request payload does not already exist.

    "Impersonation role already exists. If this role can be safely dropped please do so and try again. Alternatively, specify a different role name."

    Snowflake validation tests

    The table below provides the errors and messages for validation tests that fail when configuring or updating the integration.

    Test name
    Description
    Message

    Initial validation: basic connection test

    Verifies that Immuta can connect to the Snowflake database.

    "Unable to connect to host."

    Initial validation: default warehouse access test

    Verifies that the default warehouse exists and that the Immuta system account user has permissions to act on the default warehouse specified.

    "Unable to access default warehouse. If this was a manual installation, ensure that the user has been granted usage on the specified warehouse."

    Initial validation: table grants role prefix is unique

    Verifies that the prefix for Snowflake table grants does not already exist. If this prefix already exists, navigate to the Integration Settings section on the Immuta app settings page to .

    "The Snowflake table grants role prefix IMMUTA is used by another Immuta instance connected to the same Snowflake host. Please update the table grants role prefix for this Immuta instance and try again."

    Initial validation: validate access to privileged role

    Verifies that the privileged role exists and that it has been assigned to the Immuta system account user.

    id number

    The unique identifier of the integration.

    status string

    The status of the integration. Statuses include createError, creating, deleteError, deleting, editError, editing, enabled, migrateError, and migrating. See the statuses table below for descriptions.

    validationResults object

    The results of the validation tests. See the object description for details.

    config object

    The integration configuration. See the integration configuration payload for Amazon S3, Azure Synapse Analytics, Databricks Unity Catalog, Google BigQuery, Redshift, or Snowflake for details.

    Write Policies Payloads and Response Schema Reference Guide

    Manual write access grant payload

    The parameters for manually granting write access to a data source without using a policy are outlined in the table below.

    Parameter
    Description
    Required or optional
    Default values
    Accepted values

    Global write policy payload

    The parameters for creating a global write policy are outlined in the table below.

    Parameter
    Description
    Required or optional
    Default values
    Accepted values

    Actions array

    The actions array specifies the policy access type and restriction level. Its child parameters are outlined in the table below.

    Parameter
    Description
    Required or optional
    Default values
    Accepted values

    Circumstances object

    The circumstances object specifies the conditions under which the policy applies to a data source. Its child parameters are outlined in the table below.

    Parameter
    Description
    Required or optional
    Default values
    Accepted values

    Global write policy response schema

    Parameter
    Description

    Manual write access grant response schema

    Parameter
    Description

    Manage Licenses

    Admin API reference guide

    This page outlines the admin endpoint, which allows you to manage and review licenses in Immuta.

    Additional fields may be included in some responses you receive; however, these attributes are for internal purposes and are therefore undocumented.

    Admin workflow

    1. .

    2. .

    3. .

    4. .

    Add an Immuta license key

    POST /admin/license

    Add a license key to the Immuta tenant to increase the number of seats or enable features.

    Required Immuta permission: APPLICATION_ADMIN

    Query parameters

    Parameter
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    This example request adds a license key (saved in the example-payload.json file) to the Immuta tenant.

    Request payload example

    Response example

    View license keys

    Method
    Path
    Purpose

    Get a list of license keys

    GET /admin/license

    Get a list of all license keys.

    Required Immuta permission: APPLICATION_ADMIN

    Response schema

    Attribute
    Description

    Request example

    This example request gets the license key for the https://www.organization.immuta.com Immuta tenant.

    Response example

    Get the status of a license

    GET /admin/license/licenseStatus

    Get the status of a license key's features and seat capacity.

    Response schema

    Attribute
    Description

    Request example

    This example request gets the number of seats and active users for the license key associated with the https://www.organization.immuta.com Immuta tenant.

    Response example

    Get license usage

    GET /admin/license/usage

    Get the license usage summary. This endpoint returns a summary of the number of active and inactive users and a list of users.

    Required Immuta permission: APPLICATION_ADMIN

    Query parameters

    Parameter
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    This request gets the license usage for 5 users in the https://www.organization.immuta.com Immuta tenant.

    Response example

    Delete a license key

    DELETE /admin/license/{licenseId}

    Delete the specified license key.

    Required Immuta permission: APPLICATION_ADMIN

    Query parameters

    Parameter
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    This example request deletes the license key with the ID 1.

    Response example

    Policy Handler Objects

    This page describes how to update policies using the Policy Handler API.

    Create policy handler

    Method
    Path
    Successful Status Code

    POST

    /policy/handler

    Request parameters

    The create policy handler endpoint must be a .

    Update policy handler

    Method
    Path
    Successful Status Code

    Request parameters

    The update policy handler endpoint must be a .

    Policy handler object

    • dataSourceId (integer): ID of the data source the policy will be applied to.

      • Example: 1

    • jsonRules (array[object]): Array of JSON rules objects.

    Defining policy rules

    The jsonRules array contains rules objects. The following types of policy rules are supported:

    Not all combination of policy rules are valid. The examples below are supported policy rule combinations:

    • Prerequisite, Visibility, Masking

    • Prerequisite, Masking, Minimization

    Prerequisite policy rule type

    Prerequisite policies are used to limit usage to one or more purposes.

    • type (string): Policy rule type. Must be prerequisite for prerequisite policy rules.

      • Example: "prerequisite"

    • operator (string

    Example:

    In this example, users will only have access to data from this data source when they are acting under the purpose named Purpose Name.

    Visibility policy rule type

    Visibility policies are used to enforce row-level security.

    • type (string): Policy rule type. Must be visibility for row-level security policy rules.

      • Example: "visibility"

    • operator (string

    Note: When adding conditions to a visibility policy rule, the field is required, and the condition value should be left empty. For example, for a group policy condition, the group name is not specified.

    The user must possess the group, attribute, or purpose that matches the value stored in the field.

    Example:

    In this example, users will only see rows when they have an authorization that matches the value in the field department and they belong to a group that matches the value in the field organization.

    Masking policy rule type

    Masking policy rules will mask the value in one or more columns.

    • type (string): Policy rule type. Must be masking for masking policy rules.

      • Example: "masking"

    • fields (array[string]

    Note: When adding conditions to a masking policy rule, the field will be left blank, and the condition value should be populated.

    When using a masking rule, there is an additional field that needs to be sent in the in the policyHandler.maskingConfiguration array field.

    • name (string): Name of the field being masked.

      • Example: "social"

    • type (string): Type of masking to apply. Supported values are "Consistent Value"

    Masking configuration metadata

    Consistent value

    • constant (string|null): Constant value to mask to. If this field is not defined, the value will be hashed.

      • Example: "REDACTED"

    Regular expression

    • regex (string): Regex to match against when masking columns.

      • Example: "[0-9]{3}-[0-9]{2}"

    • replacement (string): String used to replace the matched regex.

    Grouping

    • bucketSize (integer): For number fields. Size of buckets to round numbers to.

      • Example: 100

    • timePrecision (string): For time fields. Time precision to round to. Possible values: "MIN"

    Example policy handler update with masking configuration metadata:

    Example:

    In this example, the fields email and location will be masked unless the user belongs to the group admins.

    Minimization rule type

    Minimization policy rules will show a limited percentage of the data, based on a high cardinality column, for everyone unless the user fulfills the policy conditions.

    • type (string): Policy rule type. Must be additional for minimization policy rules.

      • Example: "additional"

    • name (string

    Note: When adding conditions to a minimization policy rule the field will be left blank.

    When using a minimization rule, there is an additional field that needs to be sent in the in the policyHandler.additionalFilters.minimization field.

    • percent (integer): Percentage of the data to show to the users. This percentage will be based off of unique values in the hashPhrase column.

      • Example: 50

    • hashPhrase

    Example policy handler rule:

    In this example, 50 percent of the data, based on the name field, will be visible to users unless they fulfill the policy conditions.

    Example data source update (partial):

    Time-based rule type

    Time-based rules will make a limited portion of the data available based on event time. The data source must contain an event time column in order for this policy type to be valid. For instance, users who do not fulfill the policy conditions will only see data from within the defined time window.

    • type (string): Policy rule type. Must be additional for minimization policy rules.

      • Example: "additional"

    • name (string

    Note: When adding conditions to a time based policy rule the field will be left blank.

    When using a time based rule, there is an additional field that needs to be sent in the in the policyHandler.additionalFilters field.

    • time (integer): Age in seconds of the oldest data a user will be allowed to see. This counts backward from the present.

      • Example: 14400

    Example policy handler rule:

    In this example, only data from the last 4 hours will be visible to users unless they fulfill the policy conditions.

    Example data source update (partial):

    Policy conditions

    There are three types of policy conditions:

    Group policy condition

    The group policy condition restricts access to the condition when a user is a member of a group.

    • type (string): Type of policy condition. Must be "groups" for the group policy condition.

      • Example: "groups"

    • group (object

    Example:

    Group object

    • name (string): Name of group user must belong to in order to satisfy the policy condition.

      • Example: "users"

    • iam (string): ID of the IAM containing the group.

    Attribute policy condition

    The attribute policy condition restricts access to the condition when a user possesses an attribute.

    • type (string): Type of policy condition. Must be "authorizations" for the attribute policy condition.

      • Example: "authorizations"

    • authorization (

    Example:

    Attribute object

    • auth (string): Name of attribute to check for attribute value.

      • Example: "accesses"

    • value (string): Value of attribute user must possess in order to satisfy the policy condition.

    Purpose policy condition

    The purpose policy condition restricts access to the condition when a user is acting under a purpose.

    • type (string): Type of policy condition. Must be "purposes" for the purpose policy condition.

      • Example: "purpopses"

    • value (string

    Example:

    Manage Access Requests

    Subscription API reference guide

    This page describes the subscription endpoint, which allows you to view and manage access requests.

    Additional fields may be included in some responses you receive; however, these attributes are for internal purposes and are therefore undocumented.

    Delete a license key.

    seats

    integer The number of user seats available.

    createdAt

    timestamp The date the license key was generated.

    notice

    string This notice appears on the login page.

    noticeOnExpire

    string This notice appears on the login page after the license expires.

    createdAt

    timestamp The date the license key was generated.

    notice

    string This notice appears on the login page.

    noticeOnExpire

    string This notice appears on the login page after the license expires.

    users.active

    boolean If true, the user is active. This is determined by whether Immuta has tracked any activity by the user in the last year.

    summary

    object The summary of license usage that covers all users, not just the subset returned by a call to this endpoint.

    summary.dataConsumers

    array Includes a summary of the dataConsumers type.

    summary.dataConsumers.totalCount

    integer The total number of users of this type known to Immuta.

    summary.dataConsumers.activeCount

    integer The number of active data consumers known to Immuta, determined by whether Immuta has tracked any activity by the user in the last year. Minimum value is 0.

    summary.dataConsumers.inactiveCount

    integer The number of inactive data consumers known to Immuta, determined by whether Immuta has tracked any activity by the user in the last year. Minimum value is 0.

    summary.policyOwners

    object Includes a summary of the policyOwners type.

    summary.policyOwners.totalCount

    integer The total number of users of this type known to Immuta.

    deleted

    boolean If true, the license key has been deleted.

    features

    array The features included in the license.

    handlers

    array The data handlers included in the license.

    hardExpiration

    boolean When true, all data access is blocked when the license expires.

    notice

    string This notice appears on the login page.

    noticeOnExpire

    string This notice appears on the login page after the license expires.

    createdAt

    timestamp The date the license key was generated.

    updatedAt

    timestamp The date the license key was deleted.

    hardDelete

    boolean If true, the license key cannot be re-added after it is deleted.

    expired

    boolean If true, the license has expired.

    licenseKey

    string The license key, as a payload.

    Yes

    licenseKey

    string The license key.

    id

    integer The ID of the license.

    uuid

    string The unique universal identifier.

    features

    array The features included in the license.

    handlers

    array The data handlers included in the license.

    expires

    timestamp The date the license expires.

    GET

    /admin/license

    Get a list of all license keys.

    GET

    /admin/license/licenseStatus

    Get the status of a license key's features and seat capacity.

    id

    integer The ID of the license.

    uuid

    string The unique universal identifier.

    features

    array The features included in the license.

    handlers

    array The data handlers included in the license.

    expires

    timestamp The date the license expires.

    seats

    integer The number of user seats available.

    activeUserCount

    integer The number of active users in the Immuta tenant.

    licenseSeats

    integer The total number of seats available in the license.

    canAddUser

    boolean When true, the administrator can add user accounts to the Immuta tenant.

    hardSeats

    integer The number of licensed seats available.

    offset

    integer The start index of the records to return. You can combine the offset and size parameters to return a specific set of user records. For example, to return the second and third user records in the response, you would set offset=1 and size=2. The default start index is 0.

    No

    size

    integer The number of user records to return. The default size is 10.

    No

    users

    array[] An array of user records.

    users.userType

    string The type of user. Value can be dataConsumer or policyOwner.

    users.name

    string The name of the user.

    users.email

    string The user's email address.

    users.iamid

    string The IAM the user belongs to.

    users.userid

    string The user's username.

    licenseId

    integer The ID of the license key you want to delete.

    Yes

    id

    integer The license key ID.

    licenseKey

    string The license key.

    seats

    integer The number of seats in the license.

    softSeats

    integer The number of users that can be added beyond seats without access being blocked.

    expires

    timestamp The date the license expires.

    uuid

    string The unique universal identifier.

    Add an Immuta license key to increase the number of seats or enable features
    View a list of license keys
    View the status of license seat capacity and features
    View license usage

    Example: See defining policy rules

    Time-based
    ): Operator to be applied on conditions. Possible values:
    and
    ,
    or
    .
    • Example: "or"

  • conditions (array[object]): Conditions to be applied for the rule. Multiple values will be evaluated according to the operator.

    • Example: See purpose condition object

  • ): Operator to be applied on conditions. Possible values:
    and
    ,
    or
    .
    • Example: "or"

  • conditions (array[object]): Conditions to be applied for the rule. Multiple values will be evaluated according to the operator.

    • Example: See policy conditions

  • ): Fields that will be masked when a user does not fulfill policy conditions.
    • Example: ["email", "location"]

  • operator (string): Operator to be applied on conditions. Possible values: and, or.

    • Example: "or"

  • conditions (array[object]): Conditions to be applied for the rule. Multiple values will be evaluated according to the operator.

    • Example: See policy conditions

  • ,
    "Grouping"
    ,
    "Regular Expression"
    • Example: "Consistent Value"

  • metadata (object): Extra metadata used when masking the value.

    • Example: See masking configuration metadata

  • Example: "xxx-xx"

  • ,
    "HOUR"
    ,
    "DAY"
    ,
    "WEEK"
    ,
    "MONTH"
    ,
    "YEAR"
    • Example: "HOUR"

    ): Name of
    additional
    policy. Must be
    minimization
    for minimization policy rules.
    • Example: "minimization"

  • operator (string): Operator to be applied on conditions. Possible values: and, or.

    • Example: "or"

  • conditions (array[object]): Conditions to be applied for the rule. Multiple values will be evaluated according to the operator.

    • Example: See policy conditions

  • (
    string
    ): Column to base the percentage off of. This should be a high cardinality column in the data source.
    • Example: "name"

    ): Name of
    additional
    policy. Must be
    time
    for time based policy rules.
    • Example: "time"

  • operator (string): Operator to be applied on conditions. Possible values: and, or.

    • Example: "or"

  • conditions (array[object]): Conditions to be applied for the rule. Multiple values will be evaluated according to the operator.

    • Example: See policy conditions

  • ): Object describing group user must belong to in order to satisfy the policy condition.
    • Example: See group object

  • field (string): Data field to match group name against when checking policy.

    • Example: "department"

  • Example: "active_directory"

  • object
    ): Object describing attribute user must possess in order to satisfy the policy condition.
    • Example: See group object

  • field (string): Data field to match attribute value against when checking policy.

    • Example: "department"

  • Example: "PII"

  • iam (string): ID of the IAM user must receive the attribute from.

    • Example: "active_directory"

  • ): Purpose name user must be acting under in order to satisfy the policy condition.
    • Example: "Purpose"

  • field (string): Data field to match purpose name against when checking policy.

    • Example: "department"

  • 200

    PUT

    /policy/handler

    200

    policy handler object
    policy handler object
    Prerequisite
    Visibility
    Masking
    Minimization
    update data source request
    update data source request
    update data source request
    Groups
    Attributes
    Purposes
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8"
        --data @example-payload.json \
        https://www.organization.immuta.com/admin/license
    {
      "licensekey": "licensekey0123456789abcdefghijklstring"
    }
    {
      "id": 1,
      "licenseKey": "licensekey0123456789abcdefghijklstring",
      "seats": 20,
      "softSeats": 0,
      "expires": "2022-09-09T00:00:00.000Z",
      "uuid": "4ceaf808-the-u-u--id4a753fc5a",
      "deleted": false,
      "invalidated": false,
      "features": {
        "FPE": {
          "enabled": true
        }
      },
      "handlers": {},
      "hardExpiration": false,
      "renewalToken": null,
      "notice": null,
      "noticeOnExpire": null,
      "classifyUsername": null,
      "classifyToken": null,
      "createdAt": "2021-09-09T13:47:02.473Z",
      "updatedAt": "2021-10-07T17:55:54.806Z",
      "expired": false
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://www.organization.immuta.com/admin/license
    [
      {
        "id": 1,
        "uuid": "4cthe808-uniq-uec9-univ-ersal753fcid",
        "features": {
          "FPE": {
            "enabled": true
          }
        },
        "handlers": {},
        "expires": "2022-09-09T00:00:00.000Z",
        "seats": 20,
        "createdAt": "2021-09-09T13:47:02.473Z",
        "notice": null,
        "noticeOnExpire": null
      }
    ]
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://www.organization.immuta.com/admin/license/licenseStatus
    {
      "activeUserCount": 1,
      "licenseSeats": 20,
      "canAddUser": true,
      "hardSeats": 20
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://www.organization.immuta.com/admin/license/usage?offset=0&size=5
    {
      "summary": {
        "dataConsumers": {
          "totalCount": 25,
          "activeCount": 10,
          "inactiveCount": 25
        },
        "policyOwners": {
          "totalCount": 1
        }
      },
      "users": [{
          "userType": "policyOwner",
          "name": "Kris",
          "email": "[email protected]",
          "userid": "[email protected]",
          "iamid": "bim"
        },
        {
          "userType": "dataConsumer",
          "active": true,
          "name": "Taylor",
          "email": "[email protected]",
          "userid": "[email protected]",
          "iamid": "AzureOIDC"
        },
        {
          "userType": "dataConsumer",
          "active": true,
          "name": "Deepu",
          "email": "[email protected]",
          "userid": "[email protected]",
          "iamid": "AzureSAML"
        },
        {
          "userType": "dataConsumer",
          "active": false,
          "name": "Marc",
          "email": "[email protected]",
          "userid": "[email protected]",
          "iamid": "OIDC"
        },
        {
          "userType": "dataConsumer",
          "active": true,
          "name": "Mandeep",
          "email": "[email protected]",
          "userid": "[email protected]",
          "iamid": "SAML"
        }
      ]
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://www.organization.immuta.com/admin/license/1
    {
      "id": 1,
      "licenseKey": "<your-license-key>",
      "seats": 20,
      "softSeats": 0,
      "expires": "2022-09-09T00:00:00.000Z",
      "uuid": "4cthe808-uniq-uec9-univ-ersal753fcid",
      "deleted": true,
      "invalidated": false,
      "features": {
        "FPE": {
          "enabled": true
        }
      },
      "handlers": {},
      "hardExpiration": false,
      "notice": null,
      "noticeOnExpire": null,
      "createdAt": "2021-09-09T13:47:02.473Z",
      "updatedAt": "2021-09-13T16:53:39.280Z",
      "hardDelete": false,
      "expired": false
    }
    {
        "type": "prerequisite",
        "operator": "or",
        "conditions": [{
            "type": "purposes",
            "value": "Purpose Name"
        }]
    }
    {
        "type": "groups",
        "field": "organization",
        "group": {
            "iam": "active_directory"
        }
    }
    {
        "type": "visibility",
        "operator": "and",
        "conditions": [{
            "type": "authorizations",
            "field": "department",
            "authorization": {
                "auth": "accesses",
                "iam": "active_directory"
            }
        }, {
            "type": "groups",
            "field": "organization",
            "group": {
                "iam": "active_directory"
            }
        }]
    }
    {
        "type": "groups",
        "group": {
            "name": "users",
            "iam": "active_directory"
        }
    {
        "policyHandler": {
            "maskingConfiguration": [{
                "type": "Consistent Value",
                "name": "age",
                "metadata": {
                    "constant": "REDACTED"
                }
            }]
        }
    }
    {
        "type":"masking",
        "fields": ["email", "location"],
        "operator":"or",
        "conditions":[{
            "type":"groups",
            "group":{
                "name":"admins",
                "iam":"active_directory"
            }
        }]
    }
    {
        "type": "groups",
        "group": {
            "name": "users",
            "iam": "active_directory"
        }
    {
        "type": "additional",
        "name": "minimization",
        "operator": "or",
        "conditions": {
            "type":"groups",
            "group":{
                "name":"admins",
                "iam":"active_directory"
            }
        }
    }
    {
        "policyHandler": {
            "additionalFilters": {
                "minimization": {
                    "percent": 50,
                    "hashPhrase": "name"
                }
            }
        }
    }
    {
        "type": "groups",
        "group": {
            "name": "users",
            "iam": "active_directory"
        }
    {
        "type": "additional",
        "name": "time",
        "operator": "or",
        "conditions": {
            "type":"groups",
            "group":{
                "name":"admins",
                "iam":"active_directory"
            }
        }
    }
    {
        "policyHandler": {
            "additionalFilters": {
                "time": 14400
            }
        }
    }
    {
        "type": "groups",
        "group": {
            "name": "users",
            "iam": "active_directory"
        },
        "field": "department"
    }
    {
        "type": "authorizations",
        "authorization": {
            "auth": "accesses",
            "value": "PII",
            "iam": "active_directory"
        },
        "field": "department"
    }
    {
        "type": "purposes",
        "value": "Purpose",
        "field": "department"
    }

    template boolean

    Specifies whether or not the policy should be available as a template.

    Optional

    false

    • true

    • false

    Specifies the policy access type and restriction level. See the for details.

    Required

    -

    staged boolean

    When true, the policy is not active or applied to any data sources.

    Required

    -

    • true

    • false

    This object specifies the conditions under which the policy applies to a data source. Set the value to null to enforce the policy only when it is applied by data owners. Do not include this object in your payload to apply the policy to all data sources. See the for additional parameters and details.

    Optional

    By default, the policy applies to all data sources.

    -

    description string

    The description of the policy.

    Optional

    null

    -

    subscriptionType string

    The restriction level of the subscription policy.

    Required

    -

    • approval: Users are granted access when approved by a specified user

    • automatic: Anyone is granted access

    • manual: Individually selected users are granted access

    columnRegex object

    This object indicates that the policy should apply to data sources with column names that match the regular expression. Its child parameters are outlined below.

    Required when type is columnRegex.

    -

    -

    columnRegex.regex string

    A regular expression that matches names of columns.

    Required when type is columnRegex.

    -

    -

    columnRegex.caseInsensitive boolean

    When true, the regular expression is case insensitive.

    Optional

    false

    • true

    • false

    columnTag object

    This object specifies the column tags required for the policy to apply to the data source. Child parameters are outlined below.

    Required if type is columnTags.

    -

    -

    columnTag.name string

    The name of the tag.

    Required if type is columnTags

    -

    -

    columnTag.displayName string

    The display name of the tag.

    Optional

    -

    -

    columnTag.hasLeafNodes boolean

    When true, the tag applied has child tags.

    Optional

    -

    -

    server string

    The server that contains the data sources the policy should be applied to.

    Required when type is server.

    -

    -

    startDate string

    Applies the policy to data sources created on or after this startDate and before the endDate (if the endDate is specified).

    Required when type is time.

    -

    -

    endDate string

    Applies the policy to data sources created on or before this endDate and after the startDate.

    Optional

    null

    -

    deleted boolean

    When true, the policy has been deleted.

    id integer

    The unique identifier of the policy.

    type string

    The type of policy. For write access policies, the type is subscription.

    name string

    The name of the policy.

    template boolean

    Specifies whether or not the policy is available as a template.

    certification object

    The certification object only applies to data policies, not write access policies.

    actions array[]

    Specifies the policy access type and restriction level.

    actions.type string

    The type of policy. For write access policies, the type is subscription.

    actions.accessGrant string

    The type of access the user is granted. For write access policies, actions.accessGrant is WRITE.

    actions.description string

    The description of the policy.

    actions.allowDiscovery boolean

    When true, users can still see that the data source exists in Immuta, even if they do not have the attributes and groups specified by the policy.

    actions.subscriptionType string

    The restriction level of the subscription policy.

    actions.shareResponsibility boolean

    When true, users need to meet the conditions in this policy OR another share responsibility policy that applies to the data source. This parameter is not applicable to policies with actions.subscriptionType with a value of manual.

    actions.automaticSubscription boolean

    When true, users will automatically be subscribed to the data source when they meet the conditions specified in the policy. This parameter is not applicable to policies with actions.subscriptionType with a value of manual.

    staged boolean

    When true, the policy is staged and not active on any data sources.

    circumstances array[]

    Specifies the conditions under which the policy applies to a data source. See the for child parameters.

    denialReasoning string

    If the user was denied access to the data source, this field contains the reason entered by the owner who denied access.

    profile integer

    The unique identifier of the user who has been granted write access.

    group string

    The name of the group that has been granted write access, when applicable.

    policy boolean

    When true, the access has been granted by a policy on the data source.

    expiration string

    The date the user's access expires.

    acknowledgeRequired boolean

    When true, the users must manually request access to the data source.

    createdAt string

    The date and time the user's access to the data source was granted.

    updatedAt string

    The date and time the user's access to the data source was updated.

    accessGrant string

    The type of access the user has to the data source: READ or WRITE.

    approved boolean

    When true, the user's access to the data source has been approved.

    profileId integer

    The unique identifier of the user to whom you are granting write access.

    Required

    -

    -

    state string

    The user's role on the data source.

    Required

    -

    • expert

    • owner

    • subscribed

    accessGrant string

    The type of access to grant the user.

    Required

    -

    • READ

    • WRITE

    type string

    The type of policy to create.

    Required

    -

    subscription

    name string

    The name of the policy.

    Required

    -

    -

    type string

    The type of policy. For write access policies, the type is subscription.

    Required

    -

    • data

    • subscription

    accessGrant string

    The type of access the user is granted.

    Required

    -

    WRITE

    operator string

    Specifies how to combine the conditions of the policy.

    Required

    -

    • and

    • or

    type string

    The type of condition under which to apply the policy.

    Required

    -

    • anyTag

    • columnRegex

    • columnTags

    • noTags

    • server

    • tags

    • time

    policyKey string

    The unique name of the policy.

    createdBy integer

    The unique identifier of the user who created the policy.

    createdByName string

    The username of the user who created the policy.

    createdAt string

    The date the policy was created.

    clonedFrom integer

    The unique identifier of the policy that the new policy was cloned from.

    systemGenerated boolean

    Indicates whether or not the policy is system-generated.

    isSubscriptionOverride boolean

    When true, the user was manually granted write access by a data owner instead of being granted access by a policy on the data source.

    id integer

    The unique identifier of the user's subscription to the data source.

    modelId integer

    The unique identifier of the data source.

    modelType string

    The type of model the subscription policy applies to. For write policies, modelType is dataSource.

    state string

    The type of role the user has, such as expert, owner, or subscribed.

    admin integer

    The unique identifier of the user who granted write access to the data source subscriber.

    skipped
  • Snowflake

  • deleting

    Integration is in the process of being disabled or deleted.

    In use

    disabled

    Integration was force disabled and no cleanup was performed on the remote platform.

    Not in use

    editError

    Error occurred while editing the integration. The integration has been rolled back to the previous state.

    In use

    editing

    The integration is in the process of being edited.

    In use

    enabled

    The integration is enabled and active.

    In use

    migrateError

    Error occurred while performing a migration of the integration. The integration has been rolled back to the previous state.

    In use

    migrating

    Migration is being performed on the integration. An example of a migration is a stored procedure update.

    In use

    recurringValidationError

    Validation has failed during the periodic check and the integration may be misconfigured.

    In use

    • passed

    • failed

    • warning

    • skipped

    validationTests.message string

    When a test fails, the message provides context and guidance for addressing the failure.

    See the section corresponding to your integration type for a list of test names and messages:

    • Amazon S3

    • Azure Synapse Analytics

    • Databricks Unity Catalog

    • Google BigQuery

    "Found user ID [], ARN [] using STS."

    An AWS Access Grants instance is configured in the provided AWS account and region

    Verifies that an Access Grants instance has been created in the specified AWS account and region.

    "AccessDenied: Unable to retrieve the access grants instance for account, region: AWS responded with code [403], name [AccessDenied] and message [Access Denied] for request ID []."

    The provided S3 path exists and Immuta can list prefixes

    Verifies that Immuta can access and list prefixes for the provided S3 path.

    "Immuta does not have access to the requested path [s3://]. Without access, Immuta will be unable to assist with S3 path discovery during data source creation."

    An AWS Access Grants location does not yet exist for the provided path

    Verifies that an Access Grants location has not already been registered for the specified S3 path.

    "AccessDenied: Unable to list S3 access grants locations for account [], location scope []: AWS responded with code [403], name [AccessDenied] and message [Access Denied] for request ID []."

    "User does not have permission to manage database."

    "BigQuery doesn't support the reuse of service accounts for integrations that are currently being used for data sources."

    Validate manual: [dataset - create]

    Verifies that the custom role assigned to the service account has the permissions to create the dataset.

    Message includes a permission warning.

    Validate manual: [dataset - delete]

    Verifies that the custom role assigned to the service account has the permissions to delete the Immuta-managed dataset.

    Message includes a permission warning.

    Initialize validation: [dataset - exists]

    Verifies that this dataset does not already exist.

    "An existing Immuta instance exists. Delete this dataset to continue."

    Validate manual: [table - create]

    Verifies that the custom role assigned to the service account has the permissions to create Immuta-managed tables.

    Message includes a permission warning.

    Validate manual: [table - delete]

    Verifies that the custom role assigned to the service account has the permissions to delete Immuta-managed tables.

    Message includes a permission warning.

    Validate manual: [table - get]

    Verifies that the custom role assigned to the service account has the permissions to get Immuta-managed tables.

    Message includes a permission warning.

    Validate manual: [table - insert]

    Verifies that the custom role assigned to the service account has the permissions to insert rows in Immuta-managed tables.

    Message includes a permission warning.

    Validate manual: [table - update]

    Verifies that the custom role assigned to the service account has the permissions to update Immuta-managed tables.

    Message includes a permission warning.

    "User does not have access to the privileged role."

    Validate automatic bootstrap user grants

    Verifies the credentials of the user executing the Immuta bootstrap script in Snowflake.

    -

    Validate automatic: database does not exist

    Verifies that the database specified in the request payload does not already exist.

    "The database already exists. If this database can be safely dropped, please do so and try again. Alternatively, specify a different database name."

    Validate automatic: impersonation role does not exist

    Verifies that the user impersonation role specified in the request payload does not already exist.

    "Impersonation role already exists. If this role can be safely dropped please do so and try again. Alternatively, specify a different role name."

    Azure Synapse Analytics
    Databricks Unity Catalog
    Google BigQuery
    Redshift
    disable Snowflake table grants, re-enable it, and then update the role prefix
    Subscription workflow
    1. Get pending access requests.

    2. Approve access requests.

    3. Deny access requests.

    Get pending access requests

    Method
    Path
    Purpose

    GET

    Get pending access requests the calling user can approve.

    GET

    Get pending request information for specified model and requesting user (or specified entity).

    Get pending access requests you can approve

    GET /subscription/getPendingRequestsForUser

    Get pending access requests the calling user can approve.

    Query parameters

    Attribute
    Description
    Required

    groupByEntity

    boolean If true, group request results by user/group.

    No

    profileId

    integer Match against profile ID.

    No

    groupId

    integer Match against group ID.

    No

    name

    string A partial name to match against user or group names.

    Response parameters

    Attribute
    Description

    hits

    array Metadata details regarding the access requests.

    count

    integer The number of access requests.

    Request example

    The following request gets pending access requests the calling user can approve.

    Response example

    Get pending access requests for a specified model

    GET /subscription/requestInfo/{modelType}/{modelId}

    Get pending request information for specified model and requesting user (or specified entity).

    Query parameters

    Attribute
    Description
    Required

    modelType

    string The model that a pending request is out for. Options are datasource or project.

    Yes

    modelId

    integer The data source or project ID.

    Yes

    profileId

    integer A user ID if you want to get pending requests for another user.

    No

    groupId

    integer A group ID if you want to get pending requests for a whole group.

    Response parameters

    Attribute
    Description

    records

    array Details about each of the pending access requests, including subscriptionId, requiredPermission, state, approverId, ownerModelId, approver, and ownerModelName.

    Request example

    The following request gets pending access requests for the data source with the ID 6 for the current user.

    Response example

    Approve access requests

    Method
    Path
    Purpose

    POST

    Approve specified access requests.

    POST

    Bulk approve access requests.

    Approve specified access requests

    POST /subscription/approve

    Approve specified access requests.

    Payload parameters

    Attribute
    Description
    Required

    id

    integer The subscription ID of the request to approve.

    Yes

    expiration

    date The date to expire this user's access.

    No

    Response parameters

    Attribute
    Description

    id

    integer If the request fails, the response includes the ID of the access request.

    model

    array[object] If the request fails, the response includes details about the data source or project.

    entity

    array[object] If the request fails, the response includes details about the user making the subscription request.

    Request example

    The following request approves the subscription request.

    Payload example

    Response example

    Approve bulk access requests

    POST /subscription/approve/bulk

    Bulk approve access requests.

    Payload parameters

    Attribute
    Description
    Required

    requestIds

    integer A list of the access request IDs to be approved. If requestIds is provided, jobs will only be created for the IDs listed. Otherwise, the id and type values will be used to find and create jobs for all approval requests.

    Yes

    id

    integer The ID for the type. If requestIds is provided, jobs will only be created for the IDs listed. Otherwise, the id and type values will be used to find and create jobs for all approval requests.

    Yes

    type

    string The type of ID: profile. If requestIds is provided, jobs will only be created for the IDs listed. Otherwise, the id and type values will be used to find and create jobs for all approval requests.

    Yes

    Response parameters

    Attribute
    Description

    success

    boolean If true, all of the access requests have been successfully approved.

    Request example

    The following request approves all of the subscription requests.

    Payload example

    Response example

    Deny access requests

    Method
    Path
    Purpose

    POST

    Deny specified access requests.

    POST

    Bulk deny access requests.

    Deny specified access requests

    POST /subscription/deny

    Deny specified access requests.

    Payload parameters

    Attribute
    Description
    Required

    id

    integer The subscription ID of the request to deny.

    Yes

    denialReasoning

    string The reason the user is denied access to the data source or project.

    Yes

    Response parameters

    Attribute
    Description

    id

    integer If the request fails, the response includes the ID of the access request.

    model

    array[object] If the request fails, the response includes details about the data source or project.

    entity

    array[object] If the request fails, the response includes details about the user making the subscription request.

    Request example

    The following request denies the subscription request.

    Payload example

    Response example

    Deny bulk access requests

    POST /subscription/deny/bulk

    Bulk deny access requests.

    Payload parameters

    Attribute
    Description
    Required

    requestIds

    integer A list of the access request IDs to be approved. If requestIds is provided, jobs will only be created for the IDs listed. Otherwise, the id and type values will be used to find and create jobs for all denial requests.

    Yes

    id

    integer The ID for the type you select. If requestIds is provided, jobs will only be created for the IDs listed. Otherwise, the id and type values will be used to find and create jobs for all denial requests.

    Yes

    type

    string The type of ID: profile. If requestIds is provided, jobs will only be created for the IDs listed. Otherwise, the id and type values will be used to find and create jobs for all denial requests.

    Yes

    denialReasoning

    string The reason that you are denying the access requests.

    Response parameters

    Attribute
    Description

    success

    boolean If true, all of the access requests have been successfully denied.

    Request example

    The following request with the payload below denies the subscription requests with the IDs 40 and 41.

    Payload example

    Response example

    Configure a Google BigQuery Integration

    Private preview: This integration is available to select accounts. Reach out to your Immuta representative for details.

    The Google BigQuery resource allows you to create, configure, and manage your Google BigQuery integration. In this integration, Immuta generates policy-enforced views in your configured Google BigQuery dataset for tables registered as Immuta data sources.

    Use the /integrations endpoint to

    • configure a Google BigQuery integration

    Requirements

    • APPLICATION_ADMIN Immuta permission

    • Google BigQuery integration enabled in Immuta (work with your Immuta representative to enable this integration)

    • To execute the Immuta script from your command line to , you must be authenticated to the gcloud CLI utility as a user with all of the following roles:

    Prerequisite

    by either using the Google Cloud console or the provided Immuta script.

    Configure the integration

    1. Copy the request example. The example uses JSON format, but the request also accepts YAML.

    2. Replace the Immuta URL and with your own.

    3. Change the config values to your own, where

      • role is the Google Cloud role used to connect to Google BigQuery.

    See the for parameter definitions, value types, and additional configuration options.

    Response

    The response returns the status of the Google BigQuery integration configuration connection. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Get an integration

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    3. Replace the {id} request parameter with the unique identifier of the integration you want to get. Alternatively, you can get a list of all integrations and their IDs with the .

    Response

    The response returns a Google BigQuery integration configuration. See the for details about the response schema. An unsuccessful response returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Get all integrations

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    Response

    The response returns the configuration for all integrations. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Update an integration configuration

    1. Copy the request example, which updates the private key. The example uses JSON format, but the request also accepts YAML.

    2. Replace the Immuta URL and with your own.

    3. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    4. Change the config values to your own, where

    See the for parameter definitions, value types, and additional configuration options.

    Response

    The response returns the status of the Google BigQuery integration configuration connection. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Delete an integration

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    3. Replace the {id} request parameter with the unique identifier of the integration you want to delete.

    Response

    The response returns the status of the Google BigQuery integration configuration that has been deleted. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Create Policies API Examples

    Subscription Policies

    Anyone Can Subscribe

    Anyone Can Subscribe When Approved

    Users with Specific Groups or Attributes

    Users with Specific Groups or Attributes (Advanced)

    Individual Users You Select

    Data Policies

    Data Owner Restrictions

    Masking Policies

    Conditional Masking

    Conditional Masking (Using Otherwise Clause)

    With a Constant

    Format Preserving Masking

    With Hashing (No Tags)

    K-Anonymization (Using Fingerprint)

    Sample data is processed during computation of k-anonymization policies

    When a k-anonymization policy is applied to a data source, the columns targeted by the policy are queried under a fingerprinting process that generates rules enforcing k-anonymity. The results of this query, which may contain data that is subject to regulatory constraints such as GDPR or HIPAA, are stored in Immuta's metadata database.

    The location of the metadata database depends on your deployment:

    • Self-managed Immuta deployment: The metadata database is located in the server where you have your external metadata database deployed.

    • SaaS Immuta deployment: The metadata database is located in the AWS global segment you have chosen to deploy Immuta.

    To ensure this process does not violate your organization's data localization regulations, you need to first activate this masking policy type before you can use it in your Immuta tenant. To enable k-anonymization for your account, see the .

    K-Anonymization (by Specifying K)

    Sample data is processed during computation of k-anonymization policies

    When a k-anonymization policy is applied to a data source, the columns targeted by the policy are queried under a fingerprinting process that generates rules enforcing k-anonymity. The results of this query, which may contain data that is subject to regulatory constraints such as GDPR or HIPAA, are stored in Immuta's metadata database.

    The location of the metadata database depends on your deployment:

    • Self-managed Immuta deployment: The metadata database is located in the server where you have your external metadata database deployed.

    • SaaS Immuta deployment: The metadata database is located in the AWS global segment you have chosen to deploy Immuta.

    To ensure this process does not violate your organization's data localization regulations, you need to first activate this masking policy type before you can use it in your Immuta tenant. To enable k-anonymization for your account, see the .

    K-Anonymization (by Specifying Re-identification Probability)

    Sample data is processed during computation of k-anonymization policies

    When a k-anonymization policy is applied to a data source, the columns targeted by the policy are queried under a fingerprinting process that generates rules enforcing k-anonymity. The results of this query, which may contain data that is subject to regulatory constraints such as GDPR or HIPAA, are stored in Immuta's metadata database.

    The location of the metadata database depends on your deployment:

    • Self-managed Immuta deployment: The metadata database is located in the server where you have your external metadata database deployed.

    • SaaS Immuta deployment: The metadata database is located in the AWS global segment you have chosen to deploy Immuta.

    To ensure this process does not violate your organization's data localization regulations, you need to first activate this masking policy type before you can use it in your Immuta tenant. To enable k-anonymization for your account, see the .

    Make Null Using Column Regex

    Randomized Response

    Randomized Response (by Specifying Standard Deviation)

    Using a Regex

    With Reversibility

    Using Rounding (Date)

    Using Rounding (Using Fingerprint)

    Using Rounding (Numeric)

    Minimize Data Created Between

    Purpose Restrictions

    Any Purpose

    Purpose in Server

    Row-level Policy

    By Time

    Where User

    Custom Where Clause

    Multiple Policies

    Manage the Data Dictionary

    Data dictionary API reference guide

    The data dictionary API allows you to manage the data dictionary for your data sources.

    Additional fields may be included in some responses you receive; however, these attributes are for internal purposes and are therefore undocumented.

    Data dictionary workflow

    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/subscription/getPendingRequestsForUser?size=15&sortOrder=asc
    {
      "hits": [
        {
          "id": 652,
          "createdAt": "2021-10-14T14:25:16.509Z",
          "metadata": {},
          "model": {
            "type": "datasource",
            "id": 544,
            "name": "Gp Toolkit  Gp Is Append Only"
          },
          "entity": {
            "type": "profile",
            "id": 2,
            "name": "First Last",
            "email": "[email protected]"
          },
          "approvals": [
            {
              "requiredPermission": "OWNER",
              "state": "pending",
              "approverId": null,
              "ownerModelId": null,
              "approver": null,
              "ownerModelName": null
            }
          ]
        }
      ],
      "count": 1
    }
    curl -X 'GET' \
      'https://demo.immuta.com/subscription/requestInfo/datasource/6' \
      -H 'accept: application/json' \
      -H 'Authorization: Bearer 2533855fddf14b688df4483a30e7d57f'
    {
      "records": [
        {
          "subscriptionId": 36,
          "requiredPermission": "OWNER",
          "state": "pending",
          "approverId": null,
          "ownerModelId": null,
          "approver": null,
          "ownerModelName": null
        }
      ]
    }
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://your-immuta-url.com/subscription/approve
    {
      "requests": [
        {
          "id": 652,
          "expiration": "2021-10-14"
        }
      ]
    }
    {
      "failures": []
    }
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://your-immuta-url.com/subscription/approve/bulk
    {
      "id": 4,
      "type": "profile"
    }
    {
      "success": true
    }
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://your-immuta-url.com/subscription/deny
    {
      "requests": [
        {
          "id": 652,
          "denialReasoning": "testdenial"
        }
      ]
    }
    {
      "failures": []
    }
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://your-immuta-url.com/subscription/deny/bulk
    {
      "requestIds": [
        40,
        41
      ],
      "denialReasoning": "The users do not have the right attributes."
    }
    {
      "success": true
    }
    name: Anyone
    policyKey: subscription anyone
    type: subscription
    actions:
      type: anyone
      automaticSubscription: false
      description: Rationale
    circumstances:
    - type: tags
      tag: Discovered
    Redshift
    Snowflake

    policy: Users with specified entitlements are granted access

    actions array[]
    array description
    circumstances object
    object description
    object description

    No

    email

    string A partial email address to match against user or group email addresses.

    No

    modelName

    string A partial name to match against model names.

    No

    modelTypes

    array[string] Model types to include.

    No

    size

    integer The max number of matches to return. Default 15.

    No

    sortField

    string The field to sort results on. Defaults to name.

    No

    sortOrder

    string The order that the results will be sorted in. Default asc.

    No

    offset

    integer Offset to start returning values.

    No

    No

    Yes

    /subscription/getPendingRequestsForUser
    /subscription/requestInfo/{modelType}/{modelId}
    /subscription/approve
    /subscription/approve/bulk
    /subscription/deny
    /subscription/deny/bulk
    k-anonymization section on the app settings how-to guide
    k-anonymization section on the app settings how-to guide
    k-anonymization section on the app settings how-to guide
    name: Approval
    policyKey: subscription approval
    type: subscription
    actions:
      type: approval
      approvals:
      - specificApproverRequired: false
        requiredPermission: OWNER
      - specificApproverRequired: true
        requiredPermission: GOVERNANCE
      description: Rationale
    circumstances:
    - type: columnTags
      columnTag: Discovered
    name: Entitlement
    policyKey: subscription entitlements
    type: subscription
    actions:
      type: entitlements
      entitlements:
        operator: any
        groups:
        - Employee
        attributes:
        - name: auth1
          value: SOMETHING_ELSE
      automaticSubscription: true
      allowDiscovery: false
      description: Some description here
    circumstances:
    - type: columnRegex
      regex: ssn
      caseInsensitive: false
    staged: false
    name: Advanced Entitlement
    policyKey: subscription entitlements advanced boolean
    type: subscription
    actions:
      type: entitlements
      advanced: "@isInGroups('Engineers', 'Founders'') AND @hasAttribute('Auth1', 'Super Secret')"
      automaticSubscription: true
      allowDiscovery: false
      description: Some description here
    circumstances:
    - type: columnRegex
      regex: ssn
      caseInsensitive: false
    staged: false
    name: Manual
    policyKey: subscription manual
    type: subscription
    actions:
      type: manual
      description: Rationale
    name: Owner Restricted Policy
    policyKey: data owner restriction
    type: data
    ownerRestrictions:
      users:
      - iamid: bim
        username: [email protected]
      groups:
      - engineers
    actions:
    - rules:
      - type: Masking
        config:
          fields:
          - type: columnTags
            columnTag: Discovered.Passport
          maskingConfig:
            type: Hash
    circumstances:
    - type: columnTags
      columnTag: Discovered.Passport
    name: Conditional Masking
    policyKey: data conditional masking
    type: data
    actions:
    - rules:
      - type: Masking
        config:
          fields:
          - type: columnTags
            columnTag: Discovered.Passport
          conditionalPredicate: "@columnTagged('Discovered.Country') = 'USA'"
          maskingConfig:
            type: Hash
    circumstanceOperator: all
    circumstances:
    - type: columnTags
      columnTag: Discovered.Passport
    - type: columnTags
      columnTag: Discovered.Country
    name: Conditional
    policyKey: data mask otherwise
    type: data
    actions:
    - rules:
      - type: Masking
        config:
          fields:
          - type: columnTags
            columnTag: Discovered.Country
          maskingConfig:
            type: "Null"
        inclusions:
          groups:
          - Employee
      - type: Masking
        exceptions:
          purposes:
          - Re-identification Prohibited
        config:
          fields:
          - type: columnTags
            columnTag: Discovered.Country
          maskingConfig:
            type: Hash
    circumstances:
    - type: columnTags
      columnTag: Discovered.Country
    name: Mask with Constant
    policyKey: data mask constant
    type: data
    actions:
    - rules:
      - type: Masking
        exceptions:
          operator: any
          attributes:
          - name: auth
            value: SOMETHING_ELSE
          - name: auth1
            value: super secret
        config:
          fields:
          - type: columnTags
            columnTag: Discovered.Country
          - type: columnTags
            columnTag: Discovered.Passport
          maskingConfig:
            type: Constant
            constant: REDACTED
    circumstanceOperator: any
    circumstances:
    - type: columnTags
      columnTag: Discovered.Country
    - type: columnTags
      columnTag: Discovered.Passport
    name: Format Preserving Masking
    policyKey: data mask fpe
    type: data
    actions:
    - rules:
      - type: Masking
        config:
          fields:
          - type: columnTags
            columnTag: Discovered
          maskingConfig:
            type: Format Preserving Masking
    circumstances:
    - type: columnTags
      columnTag: Discovered
    name: Hashing
    policyKey: data mask hashing
    type: data
    actions:
    - rules:
      - type: Masking
        config:
          fields:
          - type: noTags
          maskingConfig:
            type: Hash
    circumstances:
      - type: noTags
    name: K-Anonymization Using Fingerprint on any tags
    policyKey: masking kanon using fingerprint
    type: data
    actions:
    - rules:
      - type: Masking
        config:
          fields:
          - type: anyTag
          maskingConfig:
            type: K-Anonymization
    circumstances:
    - type: anyTag
    name: K-Anonymization using kLevel
    policyKey: data mask kanon specifying k
    type: data
    actions:
    - rules:
      - type: Masking
        config:
          fields:
          - type: anyTag
          maskingConfig:
            type: K-Anonymization
            kLevel: 5
    circumstances:
    - type: anyTag
    name: K-Anonymization using reIdProbability
    policyKey: data mask kanon specifying re-id
    type: data
    actions:
    - rules:
      - type: Masking
        config:
          fields:
          - type: anyTag
          maskingConfig:
            type: K-Anonymization
            reIdProbability: 15
    circumstances:
    - type: anyTag
    name: Null using column regex
    policyKey: data mask null
    type: data
    actions:
    - rules:
      - type: Masking
        config:
          fields:
          - type: columnRegex
            regex: ssn
            caseInsensitive: true
          maskingConfig:
            type: "Null"
    circumstances:
    - type: columnRegex
      regex: ssn
      caseInsensitive: true
    name: Random Categorical
    policyKey: data mask random response
    type: data
    actions:
    - rules:
      - type: Masking
        config:
          fields:
          - type: allColumns
          maskingConfig:
            type: Randomized Response
            replacementRatePercent: 10
    name: Random Numeric
    policyKey: data mask random response specifying stddev
    type: data
    actions:
    - rules:
      - type: Masking
        config:
          fields:
          - type: allColumns
          maskingConfig:
            type: Randomized Response
            stddev: 2
            clip: false
    name: Regex
    policyKey: data mask regex
    type: data
    actions:
    - rules:
      - type: Masking
        config:
          fields:
          - type: columnTags
            columnTag: Discovered.Entity.Postal Code
          maskingConfig:
            type: Regular Expression
            regex: "(\\d{4})(\\d)"
            replacement: "$1X"
            caseInsensitive: true
            global: true
    circumstances:
    - type: columnTags
      columnTag: Discovered.Entity.Postal Code
    name: Mask using Reversible
    policyKey: data mask reversible
    type: data
    actions:
    - rules:
      - type: Masking
        config:
          fields:
          - type: columnTags
            columnTag: Discovered.Entity.Social Security Number
          maskingConfig:
            type: Reversible
        exceptions:
          groups:
          - founders
    circumstances:
    - type: columnTags
      columnTag: Discovered.Entity.Social Security Number
    name: RoundingDate
    policyKey: data mask rounding by date
    type: data
    actions:
    - rules:
      - type: Masking
        exceptions:
        config:
          fields:
          - type: columnTags
            columnTag: Discovered.Entity.Date
          maskingConfig:
            type: Grouping
            timePrecision: MONTH
    circumstances:
    - type: columnTags
      columnTag: Discovered.Entity.Date
    name: RoundingFingerprint
    policyKey: data mask round using fingerprint
    type: data
    actions:
    - rules:
      - type: Masking
        config:
          fields:
          - type: columnTags
            columnTag: Discovered.Entity.Date
          maskingConfig:
            type: Grouping
    circumstances:
    - type: columnTags
      columnTag: Discovered.Entity.Date
    name: RoundingNumeric
    policyKey: data mask round numeric
    type: data
    actions:
    - rules:
      - type: Masking
        config:
          fields:
          - type: columnTags
            columnTag: Discovered.Entity.Date
          maskingConfig:
            type: Grouping
            bucketSize: 10
    circumstances:
    - type: columnTags
      columnTag: Discovered.Entity.Date
    name: Minimize
    policyKey: data minimize
    type: data
    actions:
    - rules:
      - type: Minimization
        config:
          percent: 15
    circumstances:
    - type: time
      startDate: '2020-12-01T16:23:54.734Z'
      endDate: '2020-12-31T16:23:54.745Z'
    name: Purpose
    policyKey: data purpose restriction
    type: data
    actions:
    - rules:
      - type: Purpose Restriction
        config:
            operator: any
            purposes:
            - "<ANY PURPOSE>"
    name: Purpose in a specific server
    policyKey: data server circumstance
    type: data
    actions:
    - rules:
      - type: Purpose Restriction
        config:
            purposes:
              - Re-identification Prohibited
    circumstances:
    - type: server
      server: [email protected]:5432/tpc
    name: Row Level By Time
    policyKey: data row-level
    type: data
    actions:
    - rules:
      - type: Time Restriction
        config:
          isOlderOrNewer: newer
          time: 2592000
    circumstances:
    - type: tags
      tag: Discovered.PCI
    name: Row Level Where User
    policyKey: data where user
    type: data
    actions:
    - rules:
      - type: Row Restriction By User Entitlements
        config:
          operator: all
          matches:
            type: group
            tag: Discovered.Entity
    circumstanceOperator: ANY
    circumstances:
    - type: columnTags
      columnTag: Discovered.Entity
    name: Row Level Where
    policyKey: data custom where
    type: data
    actions:
    - rules:
      - type: Row Restriction by Custom Where Clause
        config:
          predicate: "@columnTagged('Discovered.Country')  in ('USA', 'CANADA', 'MEXICO')"
    circumstances:
    - type: tags
      tag: Discovered.Country
    name: Multiple
    policyKey: data multiple
    type: data
    actions:
    - rules:
      - type: Masking
        config:
          fields:
          - type: columnTags
            columnTag: Discovered.Passport
          maskingConfig:
            type: Hash
      description: 'Passport Rule'
    - rules:
      - type: Minimization
        config:
          percent: 25
      description: 'Passport Rule, also'
    - rules:
      - type: Masking
        config:
          fields:
          - type: columnTags
            columnTag: Discovered.Healthcare NPI
          maskingConfig:
            type: "Null"
      description: 'Healthcare NPI Rule'
    circumstanceOperator: any
    circumstances:
    - type: columnTags
      columnTag: Discovered.Passport
    - type: columnTags
      columnTag: Discovered.Person Name
    roles/iam.roleAdmin
  • roles/iam.serviceAccountAdmin

  • roles/serviceusage.serviceUsageAdmin

  • datasetSuffix is the suffix to postfix to the name of each dataset created to store secure views. This string must start with an underscore.

  • dataset is the name of the BigQuery dataset to provision inside of the project for Immuta metadata storage.

  • location is the dataset's location, which can be any valid GCP location (such as us-east1).

  • credential is the Google BigQuery service account JSON keyfile credential content. See the Google documentation for guidance on generating and downloading this keyfile.

  • role is the Google Cloud role used to connect to Google BigQuery.

  • datasetSuffix is the suffix to postfix to the name of each dataset created to store secure views. This string must start with an underscore.

  • dataset is the name of the BigQuery dataset to provision inside of the project for Immuta metadata storage.

  • location is the dataset's location, which can be any valid GCP location (such as us-east1).

  • credential is the Google BigQuery service account JSON keyfile credential content. See the for guidance on generating and downloading this keyfile.

  • get a Google BigQuery integration
    get all integrations
    update a Google BigQuery integration
    delete a Google BigQuery integration
    create a Google Cloud service account and role
    Create a Google Cloud service account and role
    API key
    config object description
    response schema reference
    HTTP status codes and error messages
    API key
    GET /integrations endpoint
    response schema reference
    HTTP status codes and error messages
    API key
    response schema reference
    HTTP status codes and error messages
    API key
    config object description
    response schema reference
    HTTP status codes and error messages
    API key
    response schema reference
    HTTP status codes and error messages

    Manage the dictionary for a data source.

  • Search dictionaries.

  • Delete a dictionary for a data source.

  • Manage data dictionaries

    Method
    Path
    Purpose

    POST

    /dictionary/{dataSourceId}

    .

    PUT

    /dictionary/{dataSourceId}

    .

    Create a data dictionary

    POST /dictionary/{dataSourceId}

    Create the dictionary for the specified data source.

    Query parameters

    Attribute
    Description
    Required

    dataSourceId

    integer The ID of the data source that will contain the data dictionary.

    Yes

    body

    array[object] Data dictionary metadata, including column names, data types, description and tags.

    Yes

    Payload parameters

    Attribute
    Description
    Required

    metadata

    array[string] Metadata for each column in the dictionary.

    Yes

    metadata.name

    string The name of the column.

    Yes

    metadata.dataType

    string The type of data in the column.

    Yes

    metadata.remoteType

    string The type of data in the remote column.

    Response parameters

    Attribute
    Description

    createdAt

    timestamp When the object was created.

    dataSource

    integer The ID of the data source the dictionary is associated with.

    id

    integer The ID of the dictionary object.

    metadata

    array[string] Metadata for the individual fields in the dictionary, including name, dataType, and remoteType.

    types

    array[string] A list of all data types the dictionary contains, such as text, integer, json, or timestamp with time zone.

    Request example

    The following request creates a data dictionary (saved in example-payload.json) for the data source with ID 1.

    Payload example

    Response example

    Other status codes returned include:

    Status Code
    Message

    400

    Bad request: (detailed reason).

    401

    A valid Authorization token must be provided.

    403

    User must have one of the following roles to delete dictionary: owner,expert.

    404

    Data source not found.

    Update a data dictionary

    PUT /dictionary/{dataSourceId}

    Update the dictionary for the specified data source.

    Query parameters

    Attribute
    Description
    Required

    dataSourceId

    integer The ID of the data source that will contain the data dictionary.

    Yes

    body

    array[object] Data dictionary metadata, including column names, data types, description and tags.

    Yes

    Payload parameters

    Attribute
    Description
    Required

    metadata

    array[string] Metadata for each column in the dictionary.

    Yes

    metadata.name

    string The name of the column.

    Yes

    metadata.dataType

    string The type of data in the column.

    Yes

    metadata.remoteType

    string The type of data in the remote column.

    Response parameters

    Attribute
    Description

    createdAt

    timestamp When the object was created.

    dataSource

    integer The ID of the data source the dictionary is associated with.

    id

    integer The ID of the dictionary object.

    metadata

    array[string] Metadata for the individual fields in the dictionary, including name, dataType, and remoteType.

    types

    array[string] A list of all data types the dictionary contains, such as text, integer, json, or timestamp with time zone.

    Request example

    The request below updates the data dictionary for the data source with the ID 1.

    Payload example

    Response example

    Other status codes returned include

    Status Code
    Message

    400

    Bad request: (detailed reason).

    401

    A valid Authorization token must be provided.

    403

    User must have one of the following roles to delete dictionary: owner,expert.

    404

    Data source not found.

    Search data dictionaries

    Method
    Path
    Purpose

    GET

    /dictionary/{dataSourceId}

    .

    GET

    /dictionary/columns

    .

    Get the dictionary for a specified data source

    GET /dictionary/{dataSourceId}

    Get the dictionary for the specified data source.

    Query parameters

    Attribute
    Description
    Required

    dataSourceId

    integer The ID of the data source that contains the data dictionary.

    Yes

    Response parameters

    Attribute
    Description

    createdAt

    timestamp When the object was created.

    dataSource

    integer The ID of the data source the dictionary is associated with.

    id

    integer The ID of the dictionary object.

    metadata

    array[string] Metadata for the individual fields in the dictionary, including name, dataType, and remoteType.

    types

    array[string] A list of all data types the dictionary contains, such as text, integer, json, or timestamp with time zone.

    Request example

    The request below gets the data dictionary for the data source with the ID 1.

    Response example

    Search across all dictionary columns

    GET /dictionary/columns

    Search across all dictionary columns.

    Query parameters

    Attribute
    Description
    Required

    searchText

    string A string used to filter returned columns. The query is executed with a wildcard prefix and suffix.

    No

    limit

    integer The maximum number of search results that will be returned. Default is 10.

    No

    Response parameters

    Attribute
    Description

    columnName

    string The name of the column.

    Request example

    The following request searches for columns in all dictionaries that contain the text address in their name, with a limit of 10 results.

    Response example

    Delete a data dictionary

    DELETE /dictionary/{dataSourceId}

    Delete the data dictionary for the specified data source.

    Query parameters

    Attribute
    Description
    Required

    dataSourceId

    integer The ID of the data source.

    Yes

    Request example

    The request below deletes the data dictionary for the data source with ID 1.

    Response example

    This endpoint returns {} on success.

    Other status codes returned include

    Status Code
    Message

    401

    A valid Authorization token must be provided.

    403

    User must have one of the following roles to delete dictionary: owner,expert.

    404

    Data source not found.

    Create a Snowflake Data Source

    Snowflake data source API reference guide

    The snowflake endpoint allows you to connect and manage Snowflake data sources in Immuta.

    Additional fields may be included in some responses you receive; however, these attributes are for internal purposes and are therefore undocumented.

    Manage Frameworks

    Frameworks API reference guide

    The frameworks resource allows you to create and manage classification frameworks. System-created frameworks cannot be edited, so to make any adjustments.

    Endpoints

    Method
    Endpoint
    Description
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Google BigQuery",
        "autoBootstrap": false,
        "config": {
          "role": "immuta",
          "datasetSuffix": "_secureView",
          "dataset": "immuta",
          "location": "us-east1",
          "credential": "{\"type\":\"service_account\",\"project_id\":\"innate-conquest-123456\",\"private_key_id\":\"9163c12345690924f5dd218ff39\",\"private_key\":\"-----BEGIN PRIVATE KEY-----\nXXXXXXXro0s\n/yQlPQijowkccmrmWJyr93kdLnwJzBvLHCto/+W\ncvF2ygX9oM/dyUK//z//4nptMp+Ck//Yw3D4rIBwGu4DWiR1qRnf\nDoGyXfThPTQ==\n-----END PRIVATE KEY-----\n\",\"client_email\":\"service-account-id@innate-conquest-123456.iam.gserviceaccount.com\",\"client_id\":\"1166290***432952487857\",\"auth_uri\":\"https://accounts.google.com/o/oauth2/auth\",\"token_uri\":\"https://oauth2.googleapis.com/token\",\"auth_provider_x509_cert_url\":\"https://www.googleapis.com/oauth2/v1/certs\",\"client_x509_cert_url\":\"https://www.googleapis.com/robot/v1/metadata/x509/service-accound-id%40innate-conquest-123456.iam.gserviceaccount.com\",\"universe_domain\":\"googleapis.com\"}"
        }
        }'
    {
      "id": "123456789",
      "status": "creating",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Basic Validation: Verify service account not being used for data source connection credentials",
          "status": "passed"
        },
        {
          "name": "Basic Validation: Immuta Service Account postfix",
          "status": "passed"
        },
        {
          "name": "Basic Validation: Non-matching service account in key file",
          "status": "passed"
        },
        {
          "name": "Basic Validation: Connection can be made to BigQuery",
          "status": "passed"
        },
        {
          "name": "Initialize Validation: [Dataset - exists] innate-conquest-123456.immuta",
          "status": "passed"
        },
        {
          "name": "Validate Manual: [Dataset - create] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144",
          "status": "passed"
        },
        {
          "name": "Validate Manual: [Table - create] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE",
          "status": "passed"
        },
        {
          "name": "Validate Manual: [Table - insert] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE",
          "status": "warning",
          "message": "Billing has not been enabled for this project. Enable billing at https://console.cloud.google.com/billing. DML queries are not allowed in the free tier. Set up a billing account to remove this restriction.. Confirm that the bootstrap script was executed without any modifications. This warning will not prevent the connection but continue at your own risk as some features may not function."
        },
        {
          "name": "Validate Manual: [Table - get] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE (After insert)",
          "status": "skipped"
        },
        {
          "name": "Validate Manual: [Table - update] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE",
          "status": "skipped"
        },
        {
          "name": "Validate Manual: [Table - get] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE (After update)",
          "status": "skipped"
        },
        {
          "name": "Validate Manual: [Table - delete] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE",
          "status": "passed"
        },
        {
          "name": "Validate Manual: [Dataset - delete] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144",
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Google BigQuery integration already exists on host organization.cloud.google.com (id = 123456789)"
    }
    curl -X 'GET' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    {
      "id": "123456789",
      "status": "enabled",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Basic Validation: Verify service account not being used for data source connection credentials",
          "status": "passed"
        },
        {
          "name": "Basic Validation: Immuta Service Account postfix",
          "status": "passed"
        },
        {
          "name": "Basic Validation: Non-matching service account in key file",
          "status": "passed"
        },
        {
          "name": "Basic Validation: Connection can be made to BigQuery",
          "status": "passed"
        },
        {
          "name": "Initialize Validation: [Dataset - exists] innate-conquest-123456.immuta",
          "status": "passed"
        },
        {
          "name": "Validate Manual: [Dataset - create] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144",
          "status": "passed"
        },
        {
          "name": "Validate Manual: [Table - create] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE",
          "status": "passed"
        },
        {
          "name": "Validate Manual: [Table - insert] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE",
          "status": "warning",
          "message": "Billing has not been enabled for this project. Enable billing at https://console.cloud.google.com/billing. DML queries are not allowed in the free tier. Set up a billing account to remove this restriction.. Confirm that the bootstrap script was executed without any modifications. This warning will not prevent the connection but continue at your own risk as some features may not function."
        },
        {
          "name": "Validate Manual: [Table - get] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE (After insert)",
          "status": "skipped"
        },
        {
          "name": "Validate Manual: [Table - update] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE",
          "status": "skipped"
        },
        {
          "name": "Validate Manual: [Table - get] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE (After update)",
          "status": "skipped"
        },
        {
          "name": "Validate Manual: [Table - delete] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE",
          "status": "passed"
        },
        {
          "name": "Validate Manual: [Dataset - delete] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144",
          "status": "passed"
        }
        ]
      },
      "type": "Google BigQuery",
      "autoBootstrap": false,
      "config": {
        "port": 443,
        "role": "immuta",
        "datasetSuffix": "_secureView",
        "dataset": "immuta",
        "location": "us-east1",
        "credential": {
          "type": "service_account",
          "project_id": "innate-conquest-123456",
          "private_key_id": "9163c12345690924f5dd218ff39",
          "private_key": "-----BEGIN PRIVATE KEY-----\nXXXXXXXro0s\n/yQlPQijowkccmrmWJyr93kdLnwJzBvLHCto/+W\ncvF2ygX9oM/dyUK//z\//4nptMp+Ck//Yw3D4rIBwGu4DWiR1qRnf\nDoGyXfThPTQ==\n-----END PRIVATE KEY-----\n",
          "client_email": "service-account-id@innate-conquest-123456.iam.gserviceaccount.com",
          "client_id": "1166290***432952487857",
          "auth_uri": "https://accounts.google.com/o/oauth2/auth",
          "token_uri": "https://oauth2.googleapis.com/token",
          "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
          "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/service-accound-id%40innate-conquest-123456.iam.gserviceaccount.com",
          "universe_domain": "googleapis.com"
        }
      }
      }
    curl -X 'GET' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    [
      {
        "id": "1",
        "status": "enabled",
        "validationResults": {
          "status": "passed",
          "validationTests": [
            {
              "name": "Initial Validation: Basic Connection Test",
              "status": "passed"
            },
            {
              "name": "Initial Validation: Default Warehouse Access Test",
              "status": "passed",
              "result": []
            },
            {
              "name": "Initial Validation: Validate access to Privileged Role",
              "status": "passed",
              "result": []
            },
            {
              "name": "Validate Automatic: Database Does Not Exist",
              "status": "passed"
            },
            {
              "name": "Validate Automatic: Impersonation Role Does Not Exist",
              "status": "skipped"
            },
            {
              "name": "Validate Automatic Bootstrap User Grants",
              "status": "passed"
            }
          ]
        },
        "type": "Snowflake",
        "autoBootstrap": true,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "port": 443,
          "audit": {
            "enabled": false
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "lineage": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "<REDACTED>",
          "password": "<REDACTED>",
          "role": "ACCOUNTADMIN"
        }
      },
      {
        "id": "2",
        "status": "enabled",
        "type": "Databricks",
        "validationResults": {
          "status": "passed",
          "validationTests": [
            {
              "name": "Metastore validation",
              "status": "passed"
            },
            {
              "name": "Basic Connection Test",
              "result": [
                {
                  "1": 1
                }
              ],
              "status": "passed"
            }
          ]
        },
        "autoBootstrap": true,
        "config": {
          "workspaceUrl": "www.example-workspace.cloud.databricks.com",
          "httpPath": "sql/protocolv1/o/0/0000-00000-abc123",
          "token": "REDACTED",
          "audit": {
            "enabled": false
          },
          "catalog": "immuta"
        }
      }
    ]
    curl -X 'PUT' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Google BigQuery",
        "autoBootstrap": false,
        "config": {
          "role": "immuta",
          "datasetSuffix": "_secureView",
          "dataset": "immuta",
          "location": "us-east1",
          "credential": "{\"type\":\"service_account\",\"project_id\":\"innate-conquest-123456\",\"private_key_id\":\"9163c12345690924f5dd218ff39\",\"private_key\":\"-----BEGIN PRIVATE KEY-----\nXXXXXXXro0s\n/yQlPQijowkccmrmWJyr93kdLnwJzBvLHCto/+W\ncvF2ygX9oM/dyUK//z//4nptMp+Ck//Yw3D4rIBwGu4DWiR1qRnf\nDoGyXfThPTQ==\n-----END PRIVATE KEY-----\n\",\"client_email\":\"service-account-id@innate-conquest-123456.iam.gserviceaccount.com\",\"client_id\":\"1166290***432952487857\",\"auth_uri\":\"https://accounts.google.com/o/oauth2/auth\",\"token_uri\":\"https://oauth2.googleapis.com/token\",\"auth_provider_x509_cert_url\":\"https://www.googleapis.com/oauth2/v1/certs\",\"client_x509_cert_url\":\"https://www.googleapis.com/robot/v1/metadata/x509/service-accound-id%40innate-conquest-123456.iam.gserviceaccount.com\",\"universe_domain\":\"googleapis.com\"}"
        }
        }'
    {
      "id": "123456789",
      "status": "editing",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Basic Validation: Verify service account not being used for data source connection credentials",
          "status": "passed"
        },
        {
          "name": "Basic Validation: Immuta Service Account postfix",
          "status": "passed"
        },
        {
          "name": "Basic Validation: Non-matching service account in key file",
          "status": "passed"
        },
        {
          "name": "Basic Validation: Connection can be made to BigQuery",
          "status": "passed"
        },
        {
          "name": "Initialize Validation: [Dataset - exists] innate-conquest-123456.immuta",
          "status": "passed"
        },
        {
          "name": "Validate Manual: [Dataset - create] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144",
          "status": "passed"
        },
        {
          "name": "Validate Manual: [Table - create] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE",
          "status": "passed"
        },
        {
          "name": "Validate Manual: [Table - insert] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE",
          "status": "warning",
          "message": "Billing has not been enabled for this project. Enable billing at https://console.cloud.google.com/billing. DML queries are not allowed in the free tier. Set up a billing account to remove this restriction.. Confirm that the bootstrap script was executed without any modifications. This warning will not prevent the connection but continue at your own risk as some features may not function."
        },
        {
          "name": "Validate Manual: [Table - get] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE (After insert)",
          "status": "skipped"
        },
        {
          "name": "Validate Manual: [Table - update] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE",
          "status": "skipped"
        },
        {
          "name": "Validate Manual: [Table - get] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE (After update)",
          "status": "skipped"
        },
        {
          "name": "Validate Manual: [Table - delete] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144.IMMUTA_VERIFY_TABLE",
          "status": "passed"
        },
        {
          "name": "Validate Manual: [Dataset - delete] innate-conquest-123456.IMMUTA_VERIFY_DATASET_144",
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Unable to edit integration with ID 123456789 in current state editing."
    }
    curl -X 'DELETE' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    {
      "id": "123456789",
      "status": "deleting",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Basic Validation: Verify service account not being used for data source connection credentials",
          "status": "passed"
        },
        {
          "name": "Basic Validation: Immuta Service Account postfix",
          "status": "passed"
        },
        {
          "name": "Basic Validation: Non-matching service account in key file",
          "status": "passed"
        },
        {
          "name": "Basic Validation: Connection can be made to BigQuery",
          "status": "passed"
        }
        ]
      }
    }
    curl \
        --request POST \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --header "Content-Type: application/json" \
        --data @example-payload.json \
        https://demo.immuta.com/dictionary/1
    {
      "metadata": [
        {
          "name": "notificationType",
          "dataType": "text",
          "remoteType": "text"
        },
        {
          "name": "actionBy",
          "dataType": "text",
          "remoteType": "integer"
        },
        {
          "name": "targetUser",
          "dataType": "integer",
          "remoteType": "integer"
        },
        {
          "name": "metadata",
          "dataType": "json",
          "remoteType": "json"
        },
        {
          "name": "id",
          "dataType": "integer",
          "remoteType": "integer"
        },
        {
          "name": "notifyInitiator",
          "dataType": "text",
          "remoteType": "boolean"
        },
        {
          "name": "eventTime",
          "dataType": "timestamp with time zone",
          "remoteType": "timestamp with time zone"
        }
      ]
    }
    {
      "createdAt": "2018-03-21T10:52:30.535Z",
      "dataSource": 1,
      "id": 1,
      "metadata": [
        {
          "name": "notificationType",
          "dataType": "text",
          "remoteType": "text"
        },
        {
          "name": "actionBy",
          "dataType": "text",
          "remoteType": "integer"
        },
        {
          "name": "targetUser",
          "dataType": "integer",
          "remoteType": "integer"
        },
        {
          "name": "metadata",
          "dataType": "json",
          "remoteType": "json"
        },
        {
          "name": "id",
          "dataType": "integer",
          "remoteType": "integer"
        },
        {
          "name": "notifyInitiator",
          "dataType": "text",
          "remoteType": "boolean"
        },
        {
          "name": "eventTime",
          "dataType": "timestamp with time zone",
          "remoteType": "timestamp with time zone"
        }
      ],
      "types": [
        "text",
        "integer",
        "json",
        "timestamp with time zone"
      ],
      "updatedAt": "2018-03-21T12:18:25.531Z"
    }
    curl \
        --request PUT \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --header "Content-Type: application/json" \
        --data @example-payload.json \
        https://demo.immuta.com/dictionary/1
    {
      "metadata": [
        {
          "name": "notificationType",
          "dataType": "text",
          "remoteType": "text"
        },
        {
          "name": "actionBy",
          "dataType": "text",
          "remoteType": "integer"
        },
        {
          "name": "targetUser",
          "dataType": "integer",
          "remoteType": "integer"
        },
        {
          "name": "metadata",
          "dataType": "json",
          "remoteType": "json"
        },
        {
          "name": "id",
          "dataType": "integer",
          "remoteType": "integer"
        },
        {
          "name": "notifyInitiator",
          "dataType": "text",
          "remoteType": "boolean"
        },
        {
          "name": "eventTime",
          "dataType": "timestamp with time zone",
          "remoteType": "timestamp with time zone"
        }
      ]
    }
    {
      "createdAt": "2018-03-21T10:52:30.535Z",
      "dataSource": 1,
      "id": 1,
      "metadata": [
        {
          "name": "notificationType",
          "dataType": "text",
          "remoteType": "text"
        },
        {
          "name": "actionBy",
          "dataType": "text",
          "remoteType": "integer"
        },
        {
          "name": "targetUser",
          "dataType": "integer",
          "remoteType": "integer"
        },
        {
          "name": "metadata",
          "dataType": "json",
          "remoteType": "json"
        },
        {
          "name": "id",
          "dataType": "integer",
          "remoteType": "integer"
        },
        {
          "name": "notifyInitiator",
          "dataType": "text",
          "remoteType": "boolean"
        },
        {
          "name": "eventTime",
          "dataType": "timestamp with time zone",
          "remoteType": "timestamp with time zone"
        }
      ],
      "types": [
        "text",
        "integer",
        "json",
        "timestamp with time zone"
      ],
      "updatedAt": "2018-03-21T12:18:25.531Z"
    }
    curl \
        --request GET \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --header "Content-Type: application/json" \
        https://demo.immuta.com/dictionary/1
    {
      "createdAt": "2018-03-21T10:52:30.535Z",
      "dataSource": 1,
      "id": 1,
      "metadata": [
        {
          "name": "notificationType",
          "dataType": "text",
          "remoteType": "text"
        },
        {
          "name": "actionBy",
          "dataType": "text",
          "remoteType": "integer"
        },
        {
          "name": "targetUser",
          "dataType": "integer",
          "remoteType": "integer"
        },
        {
          "name": "metadata",
          "dataType": "json",
          "remoteType": "json"
        },
        {
          "name": "id",
          "dataType": "integer",
          "remoteType": "integer"
        },
        {
          "name": "notifyInitiator",
          "dataType": "text",
          "remoteType": "boolean"
        },
        {
          "name": "eventTime",
          "dataType": "timestamp with time zone",
          "remoteType": "timestamp with time zone"
        }
      ],
      "types": [
        "text",
        "integer",
        "json",
        "timestamp with time zone"
      ],
      "updatedAt": "2018-03-21T12:18:25.531Z"
    }
    curl \
        --request GET \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --header "Content-Type: application/json" \
        https://demo.immuta.com/dictionary/columns?searchText=address&limit=10
    [
      "address_city",
      "address_state",
      "address_street"
    ]
    curl \
        --request DELETE \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --header "Content-Type: application/json" \
        https://demo.immuta.com/dictionary/1
    Google documentation

    Yes

    Yes

    Create the dictionary for the specified data source
    Update the data dictionary for the specified data source
    Get the dictionary for the specified data source
    Search across all dictionary columns
    Snowflake workflow

    Snowflake imported databases

    Immuta does not support Snowflake tables from imported databases. Instead, create a view of the table and register that view as a data source.

    1. Create a data source.

    2. Get information about a data source.

    3. Manage data sources.

    Create a data source

    POST /snowflake/handler

    Save the provided connection information as a data source.

    Payload parameters

    Attribute
    Description
    Required

    private

    boolean When false, the data source will be publicly available in the Immuta UI.

    Yes

    blobHandler

    array[object] The parameters for this array include scheme ("https") and url (an empty string).

    Yes

    blobHandlerType

    string Describes the type of underlying blob handler that will be used with this data source (e.g., MS SQL).

    Yes

    recordFormat

    string The data format of blobs in the data source, such as json, xml, html, or jpeg.

    Response parameters

    Attribute
    Description

    id

    integer The handler ID.

    dataSourceId

    integer The ID of the data source.

    warnings

    string This message describes issues with the created data source, such as the data source being unhealthy.

    connectionString

    string The connection string used to connect the data source to Immuta.

    Request example

    This request creates a Snowflake data source.

    Payload example

    Response example

    Get information about a data source

    GET /snowflake/handler/{handlerId}

    Get the handler metadata associated with the provided handler ID.

    Query parameters

    Attribute
    Description
    Required

    handlerId

    integer The ID of the handler.

    Yes

    skipCache

    boolean When true, will skip the handler cache when retrieving metadata.

    No

    Response parameters

    Attribute
    Description

    body

    array[object] Metadata about the data source, including the data source ID, schema, database, and connection string.

    Request example

    This request returns metadata for the handler with the ID 30.

    Response example

    Manage data sources

    Method
    Path
    Purpose

    PUT

    /snowflake/handler/{handlerId}

    . This endpoint does not perform partial updates, but will allow the dictionary to be omitted. In this case, it uses the current dictionary.

    PUT

    /snowflake/bulk

    .

    PUT

    /snowflake/handler/{handlerId}/triggerHighCardinalityJob

    .

    Update a specific data source

    PUT /snowflake/handler/{handlerId}

    Update the data source metadata associated with the provided handler ID. This endpoint does not perform partial updates, but will allow the dictionary to be omitted. In this case, it uses the current dictionary.

    Query parameters

    Attribute
    Description
    Required

    handlerId

    integer The ID of the handler.

    Yes

    skipCache

    boolean When true, will skip the handler cache when retrieving metadata.

    No

    Payload parameters

    Attribute
    Description
    Required

    handler

    metadata Includes metadata about the handler, such as ssl, port, database, hostname, username, and password.

    Yes

    connectionString

    string The connection string used to connect to the data source.

    Yes

    Response parameters

    Attribute
    Description

    id

    integer The ID of the handler.

    ca

    string The certificate authority.

    columns

    array[object] This is a Data Dictionary object, which provides metadata about the columns in the data source, including the name and data type of the column.

    Request example

    This request updates the metadata for the data source with the handler ID 30.

    Payload example

    The payload below updates the eventTime to MOST_RECENT_ORDER.

    Response example

    Update multiple data sources

    PUT /snowflake/bulk

    Update the data source metadata associated with the provided connection string.

    Payload parameters

    Attribute
    Description
    Required

    handler

    metadata Includes metadata about the handler, such as ssl, port, database, hostname, username, and password.

    Yes

    connectionString

    string The connection string used to connect to the data sources.

    Yes

    Response parameters

    Attribute
    Description

    bulkId

    string The ID of the bulk data source update.

    connectionString

    string The connection string shared by the data sources bulk updated.

    jobsCreated

    integer The number of jobs that ran to update the data sources; this number corresponds to the number of data sources updated.

    Request example

    This request updates the metadata for all data sources with the connection string specified in example-payload.json.

    Payload example

    The payload below updates the database to ANALYST_DEMO for the provided connection string.

    Response example

    Recalculate the high cardinality column for a data source

    PUT /snowflake/handler/{handlerId}/triggerHighCardinalityJob

    Recalculate the high cardinality column for the specified data source.

    Query parameters

    Attribute
    Description
    Required

    handlerId

    integer The ID of the handler.

    Yes

    Response parameters

    The response returns a string of characters that identify the high cardinality job run.

    Request example

    This request re-runs the job that calculates the high cardinality column for the data source with the handler ID 30.

    Response example

    Gets all the frameworks

    POST

    Creates a new framework

    DELETE

    Deletes a framework

    GET

    Gets the framework with the given framework ID

    PUT

    Updates a framework

    POST

    Clones a framework

    GET

    Gets all versions of the framework with the given framework ID

    GET /frameworks

    Get all the frameworks in Immuta.

    Response

    The response returns all the frameworks in Immuta. See the framework reference section for details about the response schema.

    POST /frameworks

    Create a new framework. This example creates a framework that will tag all columns in a data source with the tag "HR Framework . Internal Employee Data" when a single column within the data source has the tag "Employee Name". Then subscription and data policies can be built to only allow HR to access this sensitive employee data.

    Body parameters

    The request accepts a JSON or YAML payload. See the framework payload description for parameter details.

    Response

    The response returns the framework that was created. See the framework reference section for details about the response schema.

    DELETE /frameworks/{frameworkId}

    Deletes the framework you specify in the request.

    Request parameter

    Parameter
    Description
    Required or optional

    id number

    The unique identifier of the framework.

    Required

    Response

    The response returns a 204 response code if the request was successful.

    GET /frameworks/{frameworkId}

    Gets the framework you specify in the request.

    Request parameter

    Parameter
    Description
    Required or optional

    id number

    The unique identifier of the framework.

    Required

    Response

    The response returns the framework specified in the request. See the framework reference section for details about the response schema.

    PUT /frameworks/{frameworkId}

    Update a framework. This example updates a framework to be inactive.

    Request parameter

    Parameter
    Description
    Required or optional

    id number

    The unique identifier of the framework.

    Required

    Body parameters

    The request accepts a JSON or YAML payload. See the framework payload description for parameter options; partial updates are supported.

    Response

    The response returns the framework that was updated. See the framework reference section for details about the response schema.

    POST /frameworks/{frameworkId}/clone

    Clone a framework from an existing framework.

    Request parameter

    Parameter
    Description
    Required or optional

    id number

    The unique identifier of the framework.

    Required

    Response

    The response returns the framework that was created as a clone. See the framework reference section for details about the response schema.

    GET /frameworks/{frameworkId}/versions

    Gets every version of the framework you specify in the request.

    Request parameter

    Parameter
    Description
    Required or optional

    id number

    The unique identifier of the framework.

    Required

    Response

    The response returns a copy of every version of the framework specified in the request. See the framework reference section for details about the response schema.

    Framework payload

    The framework payload is used when creating or updating a framework. See the parameters below.

    Parameter
    Description
    Required or optional
    Default values
    Accepted values

    shortName string

    The short, human-readable name for the framework.

    Required

    -

    -

    name string

    The official, human-readable name for the framework.

    Required

    -

    -

    Tags object

    The tags object specifies the tags created for and used in the framework. It includes metadata for the tags, like sensitivity and descriptions. The table below outlines its child parameters.

    Parameter
    Description
    Required or optional
    Default values
    Accepted values

    name string

    The fully rendered name of the tag, including any parent tags.

    Required

    -

    -

    source string

    The catalog the tag is from. curated is any tag in Immuta.

    Required

    -

    • curated

    • The external catalog ID

    Rules object

    The rules object specifies the rules used in the framework. The table below outlines its child parameters.

    Parameter
    Description
    Required or optional
    Default values
    Accepted values

    name string

    The short, human-readable name for the rule.

    Required

    -

    -

    classificationTag object

    The tag to apply to the data source based on the criteria.

    Required

    -

    -

    Framework reference

    The framework reference is the response for many /frameworks requests. See the parameters described below.

    Parameter
    Description

    id string

    The Immuta-assigned unique ID for the framework.

    version string

    The Immuta-assigned unique ID for the version of this framework. This can be useful when auditing the changes to frameworks.

    shortName string

    The short, human-readable name for the framework.

    name string

    The official, human-readable name for the framework.

    description string

    A description of the framework.

    createdBy integer

    The unique ID of the user who created the framework.

    GET

    create a clone

    Manage Tags

    Tag API reference guide

    This page describes the tag endpoint, which can be used to manage tags on data sources, columns, and projects.

    Additional fields may be included in some responses you receive; however, these attributes are for internal purposes and are therefore undocumented.

    Tagging workflow

    1. .

    2. .

    Create or update a tag

    POST /tag

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    The following request creates a new tag.

    Payload example

    The payload below creates the parent tag Address with 3 child tags: email, work, home.

    The payload below changes the names of the existing child tags of the Address parent tag to state, city, zip.

    Response example

    Search across all tags

    GET /tag

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    The following request searches all tags.

    Response example

    Refresh external tags

    POST /tag/refresh

    Request example

    The following request refreshes external tags.

    Add tags to a data source, column, or project

    POST /tag/{modelType}/{modelId}

    No tags will be processed if any invalid tags are found in the payload.

    Query parameters

    Attribute
    Description
    Required

    Payload parameters

    No tags will be processed if any invalid tags are found in the payload.

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Add tags to a data source example

    Request example

    The following request adds a tag to the data source with the data source ID 22.

    Request payload example

    Response example

    Add tags to a project

    Request example

    The following request adds a tag to the project with the project ID 2.

    Request payload example

    Response example

    Add tags to a data source column

    Request example

    The following request adds a tag to the countrycode column of the data source with the data source ID 6.

    Request payload example

    Response example

    Delete tags

    Endpoint
    Purpose

    Delete a tag

    DELETE /tag/{tag}

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    The following request deletes a tag.

    Response example

    Remove tags from a data source, column, or project

    DELETE /tag/{modelType}/{modelId}/{tag}

    Query parameters

    Attribute
    Description
    Required

    Request example

    The following request deletes a tag.

    Configure a Databricks Unity Catalog Integration

    Immuta’s integration with Unity Catalog allows you to manage multiple Databricks workspaces through Unity Catalog while protecting your data with Immuta policies. Instead of manually creating UDFs or granting access to each table in Databricks, you can author your policies in Immuta and have Immuta manage and enforce Unity Catalog access-control policies on your data in Databricks clusters or SQL warehouses.

    Use the /integrations endpoint to

    • configure a Databricks Unity Catalog integration

    • get a Databricks Unity Catalog integration

    Requirements

    Permissions

    • APPLICATION_ADMIN Immuta permission

    • The Databricks user running the installation script must have the following privileges:

      • Account admin

    See the for more details about Unity Catalog privileges and securable objects.

    Authentication

    • Access token authentication: If using this method, generate a personal access token for the service principal that Immuta will use to manage policies in Unity Catalog. This service principal must have the for the metastore associated with the Databricks workspace.

    • OAuth machine-to-machine (M2M) authentication: If using this method, follow for the Immuta service principal. This service principal must have the for the metastore associated with the Databricks workspace.

    Prerequisite

    1. Click the App Settings icon in the left sidebar.

    2. Scroll to the Global Integrations Settings section and check the Enable Databricks Unity Catalog support in Immuta checkbox.

    Configure the integration

    1. In Databricks, with the privileges below. Immuta uses this service principal continuously to orchestrate Unity Catalog policies and maintain state between Immuta and Databricks.

      1. USE CATALOG and MANAGE on all catalogs containing securables registered as Immuta data sources and USE SCHEMA on all schemas containing securables registered as Immuta data sources.

      2. MODIFY

    Automatic setup

    Required permissions: When performing an automatic setup, the credentials provided must have the .

    Copy the request example, and replace the values with your own as directed to configure the integration settings. The examples provided use JSON format, but the request also accepts YAML.

    See the for parameter definitions, value types, and additional configuration options.

    ```shell curl -X 'POST' \ 'https://www.organization.immuta.com/integrations' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \ -d '{ "type": "Databricks", "autoBootstrap": true, "config": { "workspaceUrl": "www.example-workspace.cloud.databricks.com", "httpPath": "sql/protocolv1/o/0/0000-00000-abc123", "authenticationType": "token", "token": "REDACTED", "catalog": "immuta" } }' ```

    1. Replace the Immuta URL and with your own.

    2. Change the config values to your own, where

    Response

    The response returns the status of the Databricks Unity Catalog integration configuration connection. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Manual setup

    Required permissions: When performing a manual setup, the Databricks user running the script must have the .

    To manually configure the integration, complete the following steps:

    Generate the script

    Copy the request example, and replace the values with your own as directed to configure the integration settings. The examples provided use JSON format, but the request also accepts YAML.

    See the for parameter definitions, value types, and additional configuration options.

    ```shell curl -X 'POST' \ 'https://www.organization.immuta.com/integrations/scripts/create' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \ -d '{ "type": "Databricks", "autoBootstrap": false, "config": { "workspaceUrl": "www.example-workspace.cloud.databricks.com", "httpPath": "sql/protocolv1/o/0/0000-00000-abc123", "authenticationType": "token", "token": "REDACTED", "catalog": "immuta" } }' ```

    1. Replace the Immuta URL and with your own.

    2. Change the config values to your own, where

    Response

    The response returns the script for you to run in your environment.

    Configure the integration in Immuta

    Copy the request example, and replace the values with your own as directed to configure the integration settings. The examples provided use JSON format, but the request also accepts YAML. The payload you provide must match the payload sent when .

    See the for parameter definitions, value types, and additional configuration options.

    ```shell curl -X 'POST' \ 'https://www.organization.immuta.com/integrations' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \ -d '{ "type": "Databricks", "autoBootstrap": false, "config": { "workspaceUrl": "www.example-workspace.cloud.databricks.com", "httpPath": "sql/protocolv1/o/0/0000-00000-abc123", "authenticationType": "token", "token": "REDACTED", "catalog": "immuta" } }' ```

    1. Replace the Immuta URL and with your own.

    2. Pass the same payload you sent when , where

    Response

    The response returns the status of the Databricks Unity Catalog integration configuration connection. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Get an integration

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    3. Replace the {id} request parameter with the unique identifier of the integration you want to get. Alternatively, you can get a list of all integrations and their IDs with the .

    Response

    The response returns a Databricks Unity Catalog integration configuration. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Get all integrations

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    Response

    The response returns the configuration for all integrations. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Update an integration configuration

    Copy the request example, and replace the values with your own as directed to configure the integration settings. The examples provided use JSON format, but the request also accepts YAML.

    See the for parameter definitions, value types, and additional configuration options.

    This example updates the access token.

    1. Replace the Immuta URL and with your own.

    2. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    3. Change the config values to your own, where

      • workspaceUrl

    Response

    The response returns the status of the Databricks Unity Catalog integration configuration connection. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Delete an integration

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    3. Replace the {id} request parameter with the unique identifier of the integration you want to delete.

    Response

    The response returns the status of the Databricks Unity Catalog integration configuration that has been deleted. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/snowflake/handler
    {
      "handler": {
        "metadata": {
          "ssl": true,
          "userFiles": [],
          "authenticationMethod": "userPassword",
          "username": "user",
          "password": "yourpassword",
          "port": 443,
          "hostname": "demo.us-east-1.snowflakecomputing.com",
          "warehouse": "YOUR_WH",
          "database": "ANALYTICS",
          "schema": "TEST",
          "table": "CUSTOMERS",
          "nativeViewName": "customers_immuta",
          "nativeSchemaName": "test_immuta",
          "nativeWorkspaceName": "immuta_analytics",
          "schemaProjectName": "Test",
          "bodataSchemaName": "test",
          "columns": [{
            "name": "CUSTOMER_ID",
            "dataType": "numeric(38,0)",
            "remoteType": "number(38,0)",
            "isPrimaryKey": false,
            "nullable": true
          }, {
            "name": "FIRST_NAME",
            "dataType": "text",
            "remoteType": "varchar(16777216)",
            "isPrimaryKey": false,
            "nullable": true
          }, {
            "name": "LAST_NAME",
            "dataType": "text",
            "remoteType": "varchar(16777216)",
            "isPrimaryKey": false,
            "nullable": true
          }, {
            "name": "FIRST_ORDER",
            "dataType": "date",
            "remoteType": "date",
            "isPrimaryKey": false,
            "nullable": true
          }, {
            "name": "MOST_RECENT_ORDER",
            "dataType": "date",
            "remoteType": "date",
            "isPrimaryKey": false,
            "nullable": true
          }, {
            "name": "NUMBER_OF_ORDERS",
            "dataType": "numeric(18,0)",
            "remoteType": "number(18,0)",
            "isPrimaryKey": false,
            "nullable": true
          }, {
            "name": "TOTAL_ORDER_AMOUNT",
            "dataType": "numeric",
            "remoteType": "number(38,6)",
            "isPrimaryKey": false,
            "nullable": true
          }],
          "eventTime": "FIRST_ORDER",
          "staleDataTolerance": 86400,
          "bodataTableName": "customers",
          "dataSourceName": "Customers"
        }
      },
      "dataSource": {
        "blobHandler": {
          "scheme": "https",
          "url": ""
        },
        "blobHandlerType": "Snowflake",
        "recordFormat": "",
        "type": "queryable",
        "schemaEvolutionId": null,
        "columnEvolutionEnabled": true,
        "name": "Customers",
        "sqlTableName": "customers"
      },
      "schemaEvolution": {
        "ownerProfileId": 2,
        "config": {
          "nameTemplate": {
            "nameFormat": "<Schema> <Tablename>",
            "tableFormat": "<tablename>",
            "sqlSchemaNameFormat": "<schema>",
            "schemaProjectNameFormat": "<Schema>"
          }
        },
        "schemas": []
      }
    }
    {
      "id": 30,
      "dataSourceId": 30,
      "warnings": []
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/snowflake/handler/30
    {
      "dataSourceId": 30,
      "metadata": {
        "ssl": true,
        "port": 443,
        "query": null,
        "table": "CUSTOMERS",
        "schema": "TEST",
        "database": "ANALYTICS",
        "hostname": "demo.us-east-1.snowflakecomputing.com",
        "username": "user",
        "eventTime": "FIRST_ORDER",
        "userFiles": [],
        "warehouse": "YOUR_WH",
        "dataSourceName": "Customers",
        "bodataTableName": "customers",
        "highCardinality": "CUSTOMER_ID",
        "bodataSchemaName": "test",
        "columnsNormalized": true,
        "schemaProjectName": "Test",
        "staleDataTolerance": 86400,
        "authenticationMethod": "userPassword"
      },
      "type": "odbcHandler",
      "connectionString": "[email protected]:443/ANALYTICS",
      "id": 30,
      "createdAt": "2021-10-01T16:19:23.562Z",
      "updatedAt": "2021-10-01T16:19:28.556Z",
      "dbms": {
        "name": "snowflake"
      }
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/snowflake/handler/30
    {
      "handler": {
        "policyHandler": null,
        "dataSourceId": 30,
        "metadata": {
          "ssl": true,
          "port": 443,
          "table": "CUSTOMERS",
          "schema": "TEST",
          "database": "ANALYTICS",
          "hostname": "demo.us-east-1.snowflakecomputing.com",
          "username": "user",
          "eventTime": "MOST_RECENT_ORDER",
          "userFiles": [],
          "warehouse": "YOUR_WH",
          "dataSourceName": "Customers",
          "bodataTableName": "customers",
          "highCardinality": "CUSTOMER_ID",
          "bodataSchemaName": "test",
          "columnsNormalized": true,
          "schemaProjectName": "Test",
          "staleDataTolerance": 86400,
          "authenticationMethod": "userPassword",
          "columns": [{
            "name": "CUSTOMER_ID",
            "dataType": "numeric(38,0)",
            "nullable": true,
            "remoteType": "number(38,0)",
            "isPrimaryKey": false,
            "remoteColumn": "CUSTOMER_ID"
          }, {
            "name": "FIRST_NAME",
            "dataType": "text",
            "nullable": true,
            "remoteType": "varchar(16777216)",
            "isPrimaryKey": false,
            "remoteColumn": "FIRST_NAME"
          }, {
            "name": "LAST_NAME",
            "dataType": "text",
            "nullable": true,
            "remoteType": "varchar(16777216)",
            "isPrimaryKey": false,
            "remoteColumn": "LAST_NAME"
          }, {
            "name": "FIRST_ORDER",
            "dataType": "date",
            "nullable": true,
            "remoteType": "date",
            "isPrimaryKey": false,
            "remoteColumn": "FIRST_ORDER"
          }, {
            "name": "MOST_RECENT_ORDER",
            "dataType": "date",
            "nullable": true,
            "remoteType": "date",
            "isPrimaryKey": false,
            "remoteColumn": "MOST_RECENT_ORDER"
          }, {
            "name": "NUMBER_OF_ORDERS",
            "dataType": "numeric(18,0)",
            "nullable": true,
            "remoteType": "number(18,0)",
            "isPrimaryKey": false,
            "remoteColumn": "NUMBER_OF_ORDERS"
          }, {
            "name": "TOTAL_ORDER_AMOUNT",
            "dataType": "numeric",
            "nullable": true,
            "remoteType": "number(38,6)",
            "isPrimaryKey": false,
            "remoteColumn": "TOTAL_ORDER_AMOUNT"
          }]
        },
        "type": "odbcHandler",
        "connectionString": "[email protected]:443/ANALYTICS",
        "id": 30,
        "createdAt": "2021-10-01T16:19:23.562Z",
        "updatedAt": "2021-10-01T17:19:35.853Z",
        "dbms": {
          "name": "snowflake"
        }
      }
    }
    {
      "id": 30,
      "ca": ["-----BEGIN CERTIFICATE-----\ncertificatedata\n-----END CERTIFICATE-----"],
      "metadata": {
        "columns": [{
          "name": "customer_id",
          "dataType": "numeric(38,0)",
          "remoteType": "number(38,0)",
          "isPrimaryKey": false,
          "nullable": true,
          "remoteColumn": "CUSTOMER_ID"
        }, {
          "name": "first_name",
          "dataType": "text",
          "remoteType": "varchar(16777216)",
          "isPrimaryKey": false,
          "nullable": true,
          "remoteColumn": "FIRST_NAME"
        }, {
          "name": "last_name",
          "dataType": "text",
          "remoteType": "varchar(16777216)",
          "isPrimaryKey": false,
          "nullable": true,
          "remoteColumn": "LAST_NAME"
        }, {
          "name": "first_order",
          "dataType": "date",
          "remoteType": "date",
          "isPrimaryKey": false,
          "nullable": true,
          "remoteColumn": "FIRST_ORDER"
        }, {
          "name": "most_recent_order",
          "dataType": "date",
          "remoteType": "date",
          "isPrimaryKey": false,
          "nullable": true,
          "remoteColumn": "MOST_RECENT_ORDER"
        }, {
          "name": "number_of_orders",
          "dataType": "numeric(18,0)",
          "remoteType": "number(18,0)",
          "isPrimaryKey": false,
          "nullable": true,
          "remoteColumn": "NUMBER_OF_ORDERS"
        }, {
          "name": "total_order_amount",
          "dataType": "numeric",
          "remoteType": "number(38,6)",
          "isPrimaryKey": false,
          "nullable": true,
          "remoteColumn": "TOTAL_ORDER_AMOUNT"
        }]
      }
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/snowflake/bulk
    {
      "handler": {
        "metadata": {
          "ssl": true,
          "port": 443,
          "database": "ANALYST_DEMO",
          "hostname": "demo.us-east-1.snowflakecomputing.com",
          "username": "yourusername",
          "userFiles": [],
          "warehouse": "YOUR_WH",
          "authenticationMethod": "userPassword",
          "password": "yourpassword"
        }
      },
      "connectionString": "demo.us-east-1.snowflakecomputing.com:443/ANALYST_DEMO"
    }
    {
      "bulkId": "bulk_ds_update_54ada6bhashedvaluea0c80cecd9d62",
      "jobsCreated": 5
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/snowflake/handler/30/triggerHighCardinalityJob
    c12fd320-22d8-11ec-b2b8-874838eeef05
    curl -X 'GET' \
        'https://www.organization.immuta.com/frameworks' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    curl -X 'POST' \
        'https://www.organization.immuta.com/frameworks' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "active": true,
        "shortName": "HR Information",
        "name": "HR Information Framework",
        "description": "This framework finds internal employee information and tags it for HR.",
        "tags": [
        {
          "name": "HR Framework.Internal Employee Data",
          "source": "curated",
          "sensitivities": []
        }],
        "rules": [
        { "name": "HR Rule 1",
          "classificationTag": {
            "name": "HR Framework.Internal Employee Data",
            "source": "curated"
          },
          "columnTags": [],
          "neighborColumnTags": [
            {
            "name": "Employee Name",
            "source": "curated"
            }
          ],
          "tableTags": []
          }
        ]}'
    {
      "id": "9a6bf3b1-823c-4b2e-aef9-570dac6793cc",
      "version": "4e823e0b-8e38-455d-b23c-1f03200d203a",
      "shortName": "HR Information",
      "name": "HR Information Framework",
      "description": "This framework finds internal employee information and tags it for HR.",
      "createdBy": 2,
      "createdAt": "2023-10-19T16:14:39.109Z",
      "tags": [
        {
          "name": "HR Framework.Internal Employee Data",
          "source": "curated",
          "sensitivities": []
        }
      ],
      "rules": [
        {  "name": "HR Rule 1",
          "classificationTag": {
            "name": "HR Framework.Internal Employee Data",
            "source": "curated"
          },
          "columnTags": [],
          "neighborColumnTags": [
            {
              "name": "Employee Name",
              "source": "curated"
            }
          ],
          "tableTags": []
        }
      ],
      "active": true
    }
    curl -X 'DELETE' \
        'https://www.organization.immuta.com/frameworks/123456' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    curl -X 'GET' \
        'https://www.organization.immuta.com/frameworks/123456' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    curl -X 'PUT' \
        'https://www.organization.immuta.com/frameworks/123456' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "active": false
        }'
    {
      "id": "123456",
      "version": "4e823e0b-8e38-455d-b23c-1f03200d203a",
      "shortName": "HR Information",
      "name": "HR Information Framework",
      "description": "This framework finds internal employee information and tags it for HR.",
      "createdBy": 2,
      "createdAt": "2023-10-19T16:14:39.109Z",
      "tags": [
        {
          "name": "HR Framework.Internal Employee Data",
          "source": "curated",
          "sensitivities": []
        }
      ],
      "rules": [
        { "name": "HR Rule 1",
          "classificationTag": {
            "name": "HR Framework.Internal Employee Data",
            "source": "curated"
          },
          "columnTags": [],
          "neighborColumnTags": [
            {
              "name": "Employee Name",
              "source": "curated"
            }
          ],
          "tableTags": []
        }
      ],
      "active": false
    }
    curl -X 'POST' \
        'https://www.organization.immuta.com/frameworks/123456/clone' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    {
      "id": "123456",
      "version": "4e823e0b-8e38-455d-b23c-1f03200d203a",
      "shortName": "HR Information",
      "name": "HR Information Framework",
      "description": "This framework finds internal employee information and tags it for HR.",
      "createdBy": 2,
      "createdAt": "2023-10-19T16:14:39.109Z",
      "tags": [
        {
          "name": "HR Framework.Internal Employee Data",
          "source": "curated",
          "sensitivities": []
        }
      ],
      "rules": [
        { "name": "HR Rule 1",
          "classificationTag": {
            "name": "HR Framework.Internal Employee Data",
            "source": "curated"
          },
          "columnTags": [],
          "neighborColumnTags": [
            {
              "name": "Employee Name",
              "source": "curated"
            }
          ],
          "tableTags": []
        }
      ],
      "active": false
    }
    curl -X 'GET' \
        'https://www.organization.immuta.com/frameworks/123456/versions' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'

    Yes

    type

    string The type of data source: ingested (metadata will exist in Immuta) or queryable (metadata is dynamically queried).

    Yes

    name

    string The name of the data source. It must be unique within the Immuta tenant.

    Yes

    sqlTableName

    string A string that represents this data source's table in Immuta.

    Yes

    organization

    string The organization that owns the data source.

    Yes

    category

    string The category of the data source.

    No

    description

    string The description of the data source.

    No

    hasExamples

    boolean When true, the data source contains examples.

    No

    Update the data source metadata associated with the provided handler ID
    Update the data source metadata associated with the provided connection string
    Recalculate the high cardinality column for the specified data source

    description string

    A description of the framework.

    Required

    -

    -

    tags array[]

    The tags used in the framework and the sensitivity attached to them. Each tag used must have a tags object. See the tags object description for child parameters.

    Required

    -

    -

    rules array[]

    The rules used to apply the tags in the framework. See the rules object description for child parameters.

    Required

    -

    -

    active boolean

    When true, the framework will be actively used on data sources in Immuta.

    Required

    -

    • true

    • false

    description string

    A description of the classification tag.

    Required

    -

    -

    sensitivities object

    The sensitivity assigned to the tag. This sensitivity can drive the Detect dashboards and monitors.

    Optional

    []

    -

    sensitivities.dimension string

    The type of sensitivity assigned to the tag.

    Required if adding sensitivities

    -

    confidentiality

    sensitivities.sensitivity integer

    The sensitivity assigned to the tag.

    Required if adding sensitivities

    -

    • 0 - This tag signifies non-sensitive data.

    • 1 - This tag signifies sensitive data.

    • 2 - This tag signifies highly-sensitive data.

    classificationTag.name string

    The name of the tag to apply.

    Required

    -

    -

    classificationTag.source string

    The catalog the tag is from. curated is any tag in Immuta.

    Required

    -

    • curated

    • The external catalog ID

    columnTags object

    The criteria for applying tags. Tags will be applied to a column when these tags are found on the same column.

    Optional

    []

    -

    columnTags.name string

    The name of the column tag. When matched, the classification tag will be applied to the same column.

    Required if using columnTags criteria

    -

    -

    columnTags.source string

    The catalog the column tag is from. curated is any tag in Immuta.

    Required if using columnTags criteria

    -

    • curated

    • The external catalog ID

    neighborColumnTags object

    The criteria for applying tags. Tags will be applied to all columns within a data source if this tag is found already applied to any column within the data source.

    Optional

    []

    -

    neighborColumnTags.name string

    The name of the neighboring column tag. When matched, the classification tag will be applied to all columns within that data source.

    Required if using neighborColumnTags criteria

    -

    -

    neighborColumnTags.source string

    The catalog the neighboring column tag is from. curated is any tag in Immuta.

    Required if using neighborColumnTags criteria

    -

    • curated

    • The external catalog ID

    tableTags object

    The criteria for applying tags. Tags will be applied to all columns in a data source when this tag is found applied to the data source.

    Optional

    []

    -

    tableTags.name string

    The name of the data source tag. When matched, the classification tag will be applied to all columns within that data source.

    Required if using tableTags criteria

    -

    -

    tableTags.source string

    The catalog the data source tag is from. curated is any tag in Immuta.

    Required if using tableTags criteria

    -

    • curated

    • The external catalog ID

    createdAt timestamp

    A timestamp of when the framework was created.

    tags array[]

    The tags used in the framework and the sensitivity attached to them. See the tags object description for child parameters.

    rules array[]

    The rules used to apply the tags in the framework. See the rules object description for child parameters.

    active boolean

    If true, the framework is actively being used on data sources in Immuta.

    /frameworks
    /frameworks
    /frameworks/{frameworkId}
    /frameworks/{frameworkId}
    /frameworks/{frameworkId}
    /frameworks/{frameworkId}/clone
    /frameworks/{frameworkId}/versions
    Delete tags.

    rootTag.name

    string The name of the parent tag to update.

    Required if rootTag is provided.

    rootTag.source

    string The source from which the parent tag was created. Acceptable value is curated.

    No

    rootTag.deleteHierarchy

    boolean When true, all of the existing child tags will be deleted and replaced with the new child tags you include in the tags array. If this value is false, the existing child tags will remain.

    No

    displayName

    string The tag name that will display in the console.

    protected

    boolean When true, indicates the tag cannot be updated. Tags created by Immuta will always be protected. This value will be false for tags you create.

    systemCreated

    boolean When you create a tag, this value will be false, which indicates that this tag was not created by Immuta.

    excludedHierarchies

    array[string] A string used to filter returned tags. The query is executed with a wildcard prefix and suffix.

    No

    limit

    integer The maximum number of search results that will be returned.

    No

    systemCreated

    boolean When true, the tag was created by Immuta.

    systemCreated

    boolean When true, the tag was created by Immuta.

    No

    addedBy

    integer The profile ID of the user who added the tag to the data source, column, or project.

    No

    deleted

    boolean When true, the tag has been deleted.

    No

    hasLeafNodes

    boolean When true, parent tags exist within the tag hierarchy that have no child tags.

    No

    createdBy

    integer The profile ID of the user who created the tag.

    No

    createdAt

    date When the tag was created.

    No

    updatedAt

    date When the tag was last updated.

    No

    systemCreated

    boolean When true, the tag was created by Immuta.

    createdBy

    string The profile ID of the creator.

    createdAt

    timestamp The date and time of the tag creation.

    updatedAt

    timestamp The date and time of the tag update.

    tags

    array[string] A list of tags to create or update.

    Yes

    tags.name

    string The fully-qualified tag name. The name of the parent tag and its child tags are delimited by a .. See the payload example below. If you are updating an existing parent tag with new child tags, the parent value for this attribute should be the same as the value of rootTag.name.

    Yes

    tags.id

    integer The unique identifier of the tag you want to update.

    Required for updating an existing tag. This attribute should not be included when creating a new tag.

    rootTag

    object When provided, allows the requestor to update an existing parent tag.

    id

    integer The tag ID.

    name

    string The fully-qualified tag name.

    source

    string The system the tag was created by. When curated, the tag was created in Immuta.

    createdBy

    integer The profile ID of the creator.

    createdAt

    timestamp The date and time of the tag creation.

    updatedAt

    timestamp The date and time of the tag update.

    searchText

    string A string used to filter returned tags. The query is executed with a wildcard prefix and suffix.

    No

    source

    string Filter tags by the source that created them.

    No

    excludedSource

    string Only return tags that do not have this source.

    No

    includeAllSystemTags

    boolean If true, includes all system tags even if they have been deleted. Otherwise, set to false to filter out all system-created tags.

    id

    integer The tag ID.

    name

    string The fully-qualified tag name.

    color

    string An uneditable tag field.

    description

    string An uneditable tag field that appears as a tag description in the UI. Built-in tags come with descriptions pre-populated.

    source

    string The system the tag was created by. When curated, the tag was created in Immuta.

    deleted

    boolean If true, the tag has been deleted.

    modelType

    string The Immuta component to add the tag to: datasource, column, or project.

    Yes

    modelId

    string The ID of the column, data source, or project. Note: The modelId for a column is the data source ID followed by _OBJECTID (For example, 49_OBJECTID).

    Yes

    name

    string The fully-qualified name of the tag.

    Yes

    id

    integer The tag ID.

    No

    displayName

    string The tag's name that is displayed in the console.

    No

    source

    string The name of the system that created the tag. When curated, the tag was created in Immuta.

    name

    string The fully-qualified name of the tag.

    source

    string The system the tag was created by. When curated, the tag was created in Immuta.

    addedBy

    integer The profile ID of the user who added the tag.

    deleted

    boolean When true, the tag has been deleted.

    /tag/{tag}

    Delete a tag.

    /tag/{modelType}/{modelId}/{tag}

    Remove tags from a data source, column, or project.

    tag

    string The fully-qualified name of the tag.

    Yes

    deleteHierarchy

    boolean If true it will delete the entire tag hierarchy.

    No

    id

    integer The tag ID.

    name

    string The fully-qualified tag name.

    color

    string An uneditable tag field.

    description

    string An uneditable tag field that appears as a tag description in the UI. Built-in tags come with descriptions pre-populated.

    source

    string The system the tag was created by. When curated, the tag was created in Immuta.

    deleted

    boolean If true, the tag has been deleted.

    tag

    string The name of the tag.

    Yes

    modelType

    string The Immuta component to remove the tag from: datasource, column, or project.

    Yes

    modelId

    string The ID of the column, data source, or project. Note: The modelId for a column is the data source ID followed by _OBJECTID (For example, 49_OBJECTID).

    Yes

    Create or update a tag
    Search across all tags
    Refresh external tags.
    Add tags to a data source, column, or project.

    No

    No

    No

    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example_payload.json \
        https://your-immuta-url.com/tag
    {
      "tags": [{
        "name": "Address.email"
      }, {
        "name": "Address.work"
      }, {
        "name": "Address.home"
      }]
    }
    {
      "rootTag": {
        "name": "Address",
        "deleteHierarchy": false
      },
      "tags": [{
        "id": 129,
        "name": "Address.state"
      }, {
        "id": 130,
        "name": "Address.city"
      }, {
        "id": 131,
        "name": "Address.zip"
      }]
    }
    [{
      "id": 129,
      "name": "Address.email",
      "color": null,
      "description": null,
      "source": "curated",
      "deleted": false,
      "systemCreated": false,
      "createdBy": 2,
      "createdAt": "2021-10-08T20:53:22.946Z",
      "updatedAt": "2021-10-08T20:53:22.946Z"
    }, {
      "id": 130,
      "name": "Address.work",
      "color": null,
      "description": null,
      "source": "curated",
      "deleted": false,
      "systemCreated": false,
      "createdBy": 2,
      "createdAt": "2021-10-08T20:53:22.946Z",
      "updatedAt": "2021-10-08T20:53:22.946Z"
    }, {
      "id": 131,
      "name": "Address.home",
      "color": null,
      "description": null,
      "source": "curated",
      "deleted": false,
      "systemCreated": false,
      "createdBy": 2,
      "createdAt": "2021-10-08T20:53:22.946Z",
      "updatedAt": "2021-10-08T20:53:22.946Z"
    }]
    [{
        "id": 129,
        "name": "Address.state",
        "source": "curated",
        "deleted": false,
        "systemCreated": false,
        "createdBy": 2,
        "createdAt": "2025-08-25T19:23:06.709Z",
        "updatedAt": "2025-08-25T19:23:54.860Z",
        "color": null,
        "description": null,
        "displayName": "state",
        "protected": false
      },
      {
        "id": 130,
        "name": "Address.city",
        "source": "curated",
        "deleted": false,
        "systemCreated": false,
        "createdBy": 2,
        "createdAt": "2025-08-25T19:23:06.709Z",
        "updatedAt": "2025-08-25T19:23:54.863Z",
        "color": null,
        "description": null,
        "displayName": "city",
        "protected": false
      },
      {
        "id": 131,
        "name": "Address.zip",
        "source": "curated",
        "deleted": false,
        "systemCreated": false,
        "createdBy": 2,
        "createdAt": "2025-08-25T19:23:06.709Z",
        "updatedAt": "2025-08-25T19:23:54.867Z",
        "color": null,
        "description": null,
        "displayName": "zip",
        "protected": false
      }
    ]
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/tag
    [
      {
        "id": 114,
        "name": "DataProperties.Cross-Sectional",
        "color": null,
        "description": null,
        "source": "curated",
        "deleted": false,
        "systemCreated": true
      },
      {
        "id": 2,
        "name": "Discovered.Country.Argentina",
        "color": null,
        "description": null,
        "source": "curated",
        "deleted": false,
        "systemCreated": true
      },
      {
        "id": 9,
        "name": "Discovered.Country.Australia",
        "color": null,
        "description": null,
        "source": "curated",
        "deleted": false,
        "systemCreated": true
      }
    ]
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/tag/refresh
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example_payload.json \
        https://your-immuta-url.com/tag/datasource/22
    [{
      "name": "Discovered.Passport",
      "source": "curated"
    }]
    [{
      "name": "Discovered.Passport",
      "source": "curated",
      "addedBy": 2,
      "deleted": false
    }]
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example_payload.json \
        https://your-immuta-url.com/tag/project/2
    [{
      "name": "Confidential",
      "source": "curated"
    }]
    [{
      "name": "Confidential",
      "source": "curated",
      "context": "manual",
      "addedBy": 2,
      "deleted": false
    }]
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example_payload.json \
        https://your-immuta-url.com/tag/column/6_countrycode
    [{
      "name": "Discovered.Passport",
      "source": "curated"
    }]
    [{
      "name":"Discovered.Passport",
      "source":"curated",
      "context":"manual",
      "addedBy":2,
      "deleted":false
    }]
    curl \
        --request DELETE \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/tag/DataProperties.Cross-Sectional
    [
      {
        "id": 114,
        "name": "DataProperties.Cross-Sectional",
        "color": null,
        "description": null,
        "source": "curated",
        "deleted": true,
        "systemCreated": true,
        "createdBy": null,
        "createdAt": "2021-06-24T15:08:53.119Z",
        "updatedAt": "2021-09-27T19:00:38.828Z"
      }
    ]
    curl \
        --request DELETE \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/tag/datasource/523/Discovered.Country.Canada

    CREATE CATALOG privilege on the Unity Catalog metastore to create an Immuta-owned catalog and tables

  • Metastore admin (only required if enabling query audit)

  • and
    SELECT
    on all securables registered as Immuta data sources.
    MANAGE
    and
    MODIFY
    are required so that the service principal can apply row filters and column masks on the securable; to do so, the service principal must also have
    SELECT
    on the securable as well as
    USE CATALOG
    on its parent catalog and
    USE SCHEMA
    on its parent schema. Since privileges are inherited, you can grant the service principal the
    MODIFY
    and
    SELECT
    privilege on all catalogs or schemas containing Immuta data sources, which automatically grants the service principal the
    MODIFY
    and
    SELECT
    privilege on all current and future securables in the catalog or schema. The service principal also inherits
    MANAGE
    from the parent catalog for the purpose of applying row filters and column masks, but that privilege must be set directly on the parent catalog in order for grants to be fully applied.
  • Opt to enable query audit for Unity Catalog:

    1. Enable a system schema where the <SCHEMA_NAME> is access.

    2. Enable verbose audit logs in Unity Catalog.

    3. If you will configure the integration using the manual setup option, the Immuta script you will generate includes the SQL statements for granting required privileges to the service principal, so you can skip this step and continue to the manual setup section. Otherwise, manually grant the Immuta service principal access to the Databricks Unity Catalog system tables. For Databricks Unity Catalog audit to work, the service principal must have the following access at minimum:

      • USE CATALOG on the system catalog

      • USE SCHEMA on the system.access schema

      • SELECT on the following system tables:

  • You have two options for configuring your Databricks Unity Catalog integration. Select the method you prefer below to navigate to configuration instructions:

    • Automatic setup: Immuta creates the catalogs, schemas, tables, and functions using the service principal you created.

    • Manual setup: Run the Immuta script in Databricks yourself to create the catalog. You can also modify the script to customize your storage location for tables, schemas, or catalogs. The user running the script must have the Databricks privileges listed above.

  • workspaceUrl is your Databricks workspace URL.
  • httpPath is the HTTP path of your Databricks cluster or SQL warehouse.

  • token is the Databricks personal access token. This is the access token for the Immuta service principal.

  • catalog is the name of the Databricks catalog Immuta will create to store internal entitlements and other user data specific to Immuta. This catalog will only be readable for the Immuta service principal and should not be granted to other users. The catalog name may only contain letters, numbers, and underscores and cannot start with a number.

    {% hint style="warning" %} Create a separate Immuta catalog for each Immuta tenant

    If multiple Immuta tenants are connected to your Databricks environment, create a separate Immuta catalog for each of those tenants. Having multiple Immuta tenants use the same Immuta catalog causes failures in policy enforcement. {% endhint %}

  • ```shell curl -X 'POST' \ 'https://www.organization.immuta.com/integrations' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \ -d '{ "type": "Databricks", "autoBootstrap": true, "config": { "workspaceUrl": "www.example-workspace.cloud.databricks.com", "httpPath": "sql/protocolv1/o/0/0000-00000-abc123", "authenticationType": "oAuthM2M", "oAuthClientConfig": { "clientId": "123456abc", "clientSecret": "secret", "authorityUrl": "example.authority.com" }, "catalog": "immuta" } }' ```

    1. Replace the Immuta URL and API key with your own.

    2. Change the config values to your own, where

      • workspaceUrl is your Databricks workspace URL.

      • httpPath is the HTTP path of your Databricks cluster or SQL warehouse.

      • oAuthClientConfig specifies your client ID, client secret, and authority URL. See the for details about child parameters.

      • catalog is the name of the Databricks catalog Immuta will create to store internal entitlements and other user data specific to Immuta. This catalog will only be readable for the Immuta service principal and should not be granted to other users. The catalog name may only contain letters, numbers, and underscores and cannot start with a number.

        {% hint style="warning" %} Create a separate Immuta catalog for each Immuta tenant

        If multiple Immuta tenants are connected to your Databricks environment, create a separate Immuta catalog for each of those tenants. Having multiple Immuta tenants use the same Immuta catalog causes failures in policy enforcement. {% endhint %}

    workspaceUrl is your Databricks workspace URL.
  • httpPath is the HTTP path of your Databricks cluster or SQL warehouse.

  • token is the Databricks personal access token. This is the access token for the Immuta service principal.

  • catalog is the name of the Databricks catalog Immuta will create to store internal entitlements and other user data specific to Immuta. This catalog will only be readable for the Immuta service principal and should not be granted to other users. The catalog name may only contain letters, numbers, and underscores and cannot start with a number.

    {% hint style="warning" %} Create a separate Immuta catalog for each Immuta tenant

    If multiple Immuta tenants are connected to your Databricks environment, create a separate Immuta catalog for each of those tenants. Having multiple Immuta tenants use the same Immuta catalog causes failures in policy enforcement. {% endhint %}

  • Run the script returned in the response in your Databricks environment.

  • ```shell curl -X 'POST' \ 'https://www.organization.immuta.com/integrations/scripts/create' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \ -d '{ "type": "Databricks", "autoBootstrap": false, "config": { "workspaceUrl": "www.example-workspace.cloud.databricks.com", "httpPath": "sql/protocolv1/o/0/0000-00000-abc123", "authenticationType": "oAuthM2M", "oAuthClientConfig": { "clientId": "123456abc", "clientSecret": "secret", "authorityUrl": "example.authority.com" }, "catalog": "immuta" } }' ```

    1. Replace the Immuta URL and API key with your own.

    2. Change the config values to your own, where

      • workspaceUrl is your Databricks workspace URL.

      • httpPath is the HTTP path of your Databricks cluster or SQL warehouse.

      • oAuthClientConfig specifies your client ID, client secret, and authority URL. See the for details about child parameters.

      • catalog is the name of the Databricks catalog Immuta will create to store internal entitlements and other user data specific to Immuta. This catalog will only be readable for the Immuta service principal and should not be granted to other users. The catalog name may only contain letters, numbers, and underscores and cannot start with a number.

        {% hint style="warning" %} Create a separate Immuta catalog for each Immuta tenant

        If multiple Immuta tenants are connected to your Databricks environment, create a separate Immuta catalog for each of those tenants. Having multiple Immuta tenants use the same Immuta catalog causes failures in policy enforcement. {% endhint %}

    3. Run the script returned in the response in your Databricks environment.

    workspaceUrl is your Databricks workspace URL.
  • httpPath is the HTTP path of your Databricks cluster or SQL warehouse.

  • token is the Databricks personal access token. This is the access token for the Immuta service principal.

  • catalog is the name of the Databricks catalog Immuta will create to store internal entitlements and other user data specific to Immuta. This catalog will only be readable for the Immuta service principal and should not be granted to other users. The catalog name may only contain letters, numbers, and underscores and cannot start with a number.

    {% hint style="warning" %} Create a separate Immuta catalog for each Immuta tenant

    If multiple Immuta tenants are connected to your Databricks environment, create a separate Immuta catalog for each of those tenants. Having multiple Immuta tenants use the same Immuta catalog causes failures in policy enforcement. {% endhint %}

  • ```shell curl -X 'POST' \ 'https://www.organization.immuta.com/integrations' \ -H 'accept: application/json' \ -H 'Content-Type: application/json' \ -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \ -d '{ "type": "Databricks", "autoBootstrap": false, "config": { "workspaceUrl": "www.example-workspace.cloud.databricks.com", "httpPath": "sql/protocolv1/o/0/0000-00000-abc123", "authenticationType": "oAuthM2M", "oAuthClientConfig": { "clientId": "123456abc", "clientSecret": "secret", "authorityUrl": "example.authority.com" }, "catalog": "immuta" } }' ```

    1. Replace the Immuta URL and API key with your own.

    2. Pass the same payload you sent when generating the script, where

      • workspaceUrl is your Databricks workspace URL.

      • httpPath is the HTTP path of your Databricks cluster or SQL warehouse.

      • oAuthClientConfig specifies your client ID, client secret, and authority URL. See the for details about child parameters.

      • catalog is the name of the Databricks catalog Immuta will create to store internal entitlements and other user data specific to Immuta. This catalog will only be readable for the Immuta service principal and should not be granted to other users. The catalog name may only contain letters, numbers, and underscores and cannot start with a number.

        {% hint style="warning" %} Create a separate Immuta catalog for each Immuta tenant

        If multiple Immuta tenants are connected to your Databricks environment, create a separate Immuta catalog for each of those tenants. Having multiple Immuta tenants use the same Immuta catalog causes failures in policy enforcement. {% endhint %}

    is your Databricks workspace URL.
  • httpPath is the HTTP path of your Databricks cluster or SQL warehouse.

  • token is the Databricks personal access token. This is the access token for the Immuta service principal.

  • catalog is the name of the Databricks catalog Immuta will create to store internal entitlements and other user data specific to Immuta. This catalog will only be readable for the Immuta service principal and should not be granted to other users. The catalog name may only contain letters, numbers, and underscores and cannot start with a number.

    {% hint style="warning" %} Create a separate Immuta catalog for each Immuta tenant

    If multiple Immuta tenants are connected to your Databricks environment, create a separate Immuta catalog for each of those tenants. Having multiple Immuta tenants use the same Immuta catalog causes failures in policy enforcement. {% endhint %}

  • get all integrations
    update a Databricks Unity Catalog integration
    delete a Databricks Unity Catalog integration
    Databricks documentation
    privileges listed above
    Databricks documentation to create a client secret
    privileges listed above
    create a service principal
    permissions listed above
    config object description
    API key
    response schema reference
    HTTP status codes and error messages
    permissions listed above
    Generate the Immuta script and run it in your Databricks environment.
    Configure the integration in Immuta.
    config object description
    API key
    generating the script
    config object description
    API key
    generating the script
    response schema reference
    HTTP status codes and error messages
    API key
    GET /integrations endpoint
    response schema reference
    HTTP status codes and error messages
    API key
    response schema reference
    HTTP status codes and error messages
    config object description
    API key
    response schema reference
    HTTP status codes and error messages
    API key
    response schema reference
    HTTP status codes and error messages

    Create a Presto Data Source

    Presto API reference guide

    This page describes the presto (Presto data sources) endpoint.

    Additional fields may be included in some responses you receive; however, these attributes are for internal purposes and are therefore undocumented.

    Presto workflow

    1. .

    2. .

    3. .

    Create a data source

    POST /presto/handler

    Save the provided connection information as a data source.

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This request creates a Presto data source.

    Payload example

    Response example

    Search Presto data sources

    Search for handler metadata

    GET /presto/handler/{handlerId}

    Get the handler metadata associated with the provided handler ID.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    The following request returns the handler metadata associated with the provided handler ID.

    Response example

    Update Presto data sources

    Endpoint
    Purpose

    Update handler metadata

    PUT /presto/handler/{handlerId}

    Updates the handler metadata associated with the provided handler ID. This endpoint does not perform partial updates, but will allow the dictionary to be omitted. In this case it uses the current dictionary.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This request updates the data source name to Marketing Data for the data source with the handler ID 67.

    Request payload example

    Response example

    Update multiple data sources

    PUT /presto/bulk

    Updates the data source metadata associated with the provided connection string.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This request updates the metadata for all data sources with the connection string specified in example-payload.json.

    Payload example

    The payload below adds a certificate (certificate.json) to the data sources with the provided connection.

    Response example

    Recalculate high cardinality columns

    PUT /presto/handler/{handlerId}/triggerHighCardinalityJob

    Recalculates the high cardinality column for the provided handler ID.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    The response returns a string of characters that identify the high cardinality job run.

    Request example

    The following request recalculates the high cardinality column for the provided handler ID.

    Response example

    Create an Azure Synapse Analytics Data Source

    Azure Synapse Analytics API reference guide

    This page describes the asa (Azure Synapse Analytics data sources) endpoint.

    Additional fields may be included in some responses you receive; however, these attributes are for internal purposes and are therefore undocumented.

    Manage Purposes

    Governance API reference guide

    This page describes the governance endpoint of the Immuta API and its request and response parameters used to manage purposes.

    Additional fields may be included in some responses you receive; however, these attributes are for internal purposes and are therefore undocumented.

    {
      "id": "123456789",
      "status": "creating",
      "validationResults": {
        "status": "passed",
        "validationTests": [
          {
            "name": "Metastore validation",
            "status": "passed"
          },
          {
            "name": "Basic Connection Test",
            "result": [
              {
                "1": 1
              }
            ],
            "status": "passed"
          }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Databricks Unity Catalog integration already exists on www.example-workspace.cloud.databricks.com (id = 123456789)"
    }
    {
      "id": "123456789",
      "status": "creating",
      "validationResults": {
        "status": "passed",
        "validationTests": [
          {
            "name": "Metastore validation",
            "status": "passed"
          },
          {
            "name": "Basic Connection Test",
            "result": [
              {
                "1": 1
              }
            ],
            "status": "passed"
          }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Databricks Unity Catalog integration already exists on www.example-workspace.cloud.databricks.com (id = 123456789)"
    }
    curl -X 'GET' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    {
      "id": "123456789",
      "status": "enabled",
      "validationResults": {
        "status": "passed",
        "validationTests": [
          {
            "name": "Metastore validation",
            "status": "passed"
          },
          {
            "name": "Basic Connection Test",
            "result": [
              {
                "1": 1
              }
            ],
            "status": "passed"
          }
        ]
      },
      "type": "Databricks",
      "autoBootstrap": false,
      "config": {
        "port": 443,
        "workspaceUrl": "www.example-workspace.cloud.databricks.com",
        "httpPath": "sql/protocolv1/o/0/0000-00000-abc123",
        "authenticationType": "token",
        "token": "REDACTED",
        "audit": {
          "enabled": false
        },
        "catalog": "immuta"
      }
    }
    curl -X 'GET' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    [
      {
        "id": "1",
        "status": "enabled",
        "validationResults": {
          "status": "passed",
          "validationTests": [
            {
              "name": "Initial Validation: Basic Connection Test",
              "status": "passed"
            },
            {
              "name": "Initial Validation: Default Warehouse Access Test",
              "status": "passed",
              "result": []
            },
            {
              "name": "Initial Validation: Validate access to Privileged Role",
              "status": "passed",
              "result": []
            },
            {
              "name": "Validate Automatic: Database Does Not Exist",
              "status": "passed"
            },
            {
              "name": "Validate Automatic: Impersonation Role Does Not Exist",
              "status": "skipped"
            },
            {
              "name": "Validate Automatic Bootstrap User Grants",
              "status": "passed"
            }
          ]
        },
        "type": "Snowflake",
        "autoBootstrap": true,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "port": 443,
          "audit": {
            "enabled": false
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "lineage": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "<REDACTED>",
          "password": "<REDACTED>",
          "role": "ACCOUNTADMIN"
        }
      },
      {
        "id": "2",
        "status": "enabled",
        "type": "Databricks",
        "validationResults": {
          "status": "passed",
          "validationTests": [
            {
              "name": "Metastore validation",
              "status": "passed"
            },
            {
              "name": "Basic Connection Test",
              "result": [
                {
                  "1": 1
                }
              ],
              "status": "passed"
            }
          ]
        },
        "autoBootstrap": true,
        "config": {
          "workspaceUrl": "www.example-workspace.cloud.databricks.com",
          "httpPath": "sql/protocolv1/o/0/0000-00000-abc123",
          "authenticationType": "token",
          "token": "REDACTED",
          "audit": {
            "enabled": false
          },
          "catalog": "immuta"
        }
      }
    ]
    curl -X 'PUT' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Databricks",
        "autoBootstrap": true,
        "config": {
          "workspaceUrl": "www.example-workspace.cloud.databricks.com",
          "httpPath": "sql/protocolv1/o/0/0000-00000-abc123",
          "authenticationType": "token",
          "token": "REDACTED",
          "catalog": "immuta"
        }
        }'
    {
      "id": "123456789",
      "status": "editing",
      "validationResults": {
        "status": "passed",
        "validationTests": [
          {
            "name": "Metastore validation",
            "status": "passed"
          },
          {
            "name": "Basic Connection Test",
            "result": [
              {
                "1": 1
              }
            ],
            "status": "passed"
          }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Unable to edit integration with ID 123456789 in current state editing."
    }
    curl -X 'DELETE' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    {
      "id": "123456789",
      "status": "deleting",
      "validationResults": {
        "status": "passed",
        "validationTests": [
          {
            "name": "Metastore validation",
            "status": "passed"
          },
          {
            "name": "Basic Connection Test",
            "result": [
              {
                "1": 1
              }
            ],
            "status": "passed"
          }
        ]
      }
    }
  • system.access.audit

  • system.access.table_lineage

  • system.access.column_lineage

  • Access to system tables is governed by Unity Catalog. No user has access to these system schemas by default. To grant access, a user that is both a metastore admin and an account admin must grant USE and SELECT permissions on the system schemas to the service principal. See Manage privileges in Unity Catalog for more details.

    object description
    object description
    object description

    type

    string The type of data source: ingested (metadata will exist in Immuta) or queryable (metadata is dynamically queried).

    Yes

    name

    string The name of the data source. It must be unique within the Immuta instance.

    Yes

    sqlTableName

    string A string that represents this data source's table in Immuta.

    Yes

    organization

    string The organization that owns the data source.

    Yes

    category

    string The category of the data source.

    No

    description

    string The description of the data source.

    No

    hasExamples

    boolean When true, the data source contains examples.

    No

    private

    boolean When false, the data source will be publicly available in the Immuta UI.

    Yes

    blobHandler

    array[object] A list of full URLs providing the locations of all blob store handlers to use with this data source.

    Yes

    blobHandlerType

    string Describes the type of underlying blob handler that will be used with this data source (e.g., MS SQL).

    Yes

    recordFormat

    string The data format of blobs in the data source, such as json, xml, html, or jpeg.

    id

    integer The handler ID.

    dataSourceId

    integer The ID of the data source.

    warnings

    string This message describes issues with the created data source, such as the data source being unhealthy.

    connectionString

    string The connection string used to connect the data source to Immuta.

    handlerId

    integer The specific handler ID.

    Yes

    skipCache

    boolean If true the handler cache will be skipped when retrieving the handler data.

    No

    dataSourceId

    integer The data source ID.

    value

    metadata Details regarding the handler.

    /presto/handler/{handlerId}

    Updates the handler metadata associated with the provided handler ID.

    /presto/bulk

    Updates the data source metadata associated with the provided connection string.

    /presto/handler/{handlerId}/triggerHighCardinalityJob

    Recalculates the high cardinality column for the provided handler ID.

    handlerId

    integer The specific handler ID.

    Yes

    skipCache

    boolean If true the handler cache will be skipped when retrieving the handler data.

    No

    dataSourceId

    integer The data source ID.

    body

    array[object] Details regarding the handler, including schema, name format, and data source metadata.

    body

    array[object] This payload includes data source metadata and specifies the connection string.

    Yes

    bulkId

    integer The bulk handler metadata ID.

    connectionString

    string The specified connection string.

    jobsCreated

    integer Number of jobs created.

    handlerId

    integer The specific handler ID.

    Yes

    Create a Presto data source
    Search Presto data sources
    Update Presto data sources

    Yes

    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/presto/handler
    {
      "handler": {
        "metadata": {
          "staleDataTolerance": 86400,
          "schemaProjectName": "Public",
          "bodataSchemaName": "public",
          "columns": [{
            "name": "c_customer_sk",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_customer_id",
            "dataType": "text",
            "remoteType": "char(16)",
            "nullable": true
          }, {
            "name": "c_current_cdemo_sk",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_current_hdemo_sk",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_current_addr_sk",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_first_shipto_date_sk",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_first_sales_date_sk",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_salutation",
            "dataType": "text",
            "remoteType": "varchar(10)",
            "nullable": true
          }, {
            "name": "c_first_name",
            "dataType": "text",
            "remoteType": "varchar(20)",
            "nullable": true
          }, {
            "name": "c_last_name",
            "dataType": "text",
            "remoteType": "varchar(30)",
            "nullable": true
          }, {
            "name": "c_preferred_cust_flag",
            "dataType": "text",
            "remoteType": "char(1)",
            "nullable": true
          }, {
            "name": "c_birth_day",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_birth_month",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_birth_year",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_birth_country",
            "dataType": "text",
            "remoteType": "varchar(20)",
            "nullable": true
          }, {
            "name": "c_login",
            "dataType": "text",
            "remoteType": "char(13)",
            "nullable": true
          }, {
            "name": "c_email_address",
            "dataType": "text",
            "remoteType": "varchar(50)",
            "nullable": true
          }, {
            "name": "c_last_review_date",
            "dataType": "text",
            "remoteType": "varchar(10)",
            "nullable": true
          }],
          "hostname": "example-presto.host.io",
          "port": 8080,
          "ssl": false,
          "authenticationMethod": "No Authentication",
          "connectionStringOptions": "",
          "userFiles": [],
          "database": "your_database",
          "sid": "postgres",
          "table": "customer",
          "schema": "public",
          "bodataTableName": "customer",
          "dataSourceName": "Customer"
        }
      },
      "dataSource": {
        "blobHandler": {
          "scheme": "https",
          "url": ""
        },
        "blobHandlerType": "Presto",
        "recordFormat": "",
        "type": "queryable",
        "schemaEvolutionId": null,
        "columnEvolutionEnabled": true,
        "name": "Customer",
        "sqlTableName": "customer"
      },
      "schemaEvolution": {
        "ownerProfileId": 1,
        "config": {
          "nameTemplate": {
            "nameFormat": "<Tablename>",
            "tableFormat": "<tablename>",
            "sqlSchemaNameFormat": "<schema>",
            "schemaProjectNameFormat": "<Schema>"
          }
        },
        "schemas": []
      }
    }
    {
      "connectionString": "your-username@us-east-1/tpc"
      "id": 1,
      "dataSourceId": 1,
      "dataSource": {
        "blobHandler": {
          "accessKey": "REDACTED",
          "url": "https://REDACTED/presto/handler/1",
          "ca": ["-----BEGIN CERTIFICATE-----\nyourdXRhIENcertificate\n-----END CERTIFICATE-----"],
          "manualDictionary": false
        },
        "blobHandlerType": "Presto",
        "recordFormat": "Not Provided",
        "type": "queryable",
        "schemaEvolutionId": 1,
        "columnEvolutionEnabled": true,
        "name": "Customer",
        "sqlTableName": "customer",
        "sqlSchemaName": "public",
        "workspace": null,
        "rowCount": 0,
        "seeded": false,
        "owner": {},
        "documentation": "# Customer",
        "statsExpiration": "2022-07-19T18:55:21.300Z",
        "recordCount": 0,
        "createdBy": 1,
        "policyHandler": null,
        "subscriptionType": "manual",
        "id": 1,
        "description": null,
        "deleted": false,
        "policyHandlerType": "None",
        "subscriptionPolicy": null,
        "globalPolicies": null,
        "status": null,
        "statusInfo": null,
        "expiration": null,
        "catalogMetadata": null,
        "sddTemplate": null,
        "createdAt": "2022-07-19T18:55:21.302Z",
        "updatedAt": "2022-07-19T18:55:21.302Z",
        "tags": []
      },
      "warnings": []
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/presto/handler/67
    {
      "dataSourceId": 67,
      "metadata": {
        "ssl": true,
        "port": 1433,
        "query": null,
        "table": "table_108",
        "schema": "elliott_dev",
        "database": "your_database",
        "hostname": "example-presto.host.io",
        "username": "your-username",
        "eventTime": null,
        "dataSourceName": "Dev Table 108",
        "bodataTableName": "table_108",
        "disableClassify": false,
        "highCardinality": "col_1",
        "bodataSchemaName": "dev",
        "columnsNormalized": false,
        "schemaProjectName": "Dev",
        "staleDataTolerance": 2592000
      },
      "type": "odbcHandler",
      "connectionString": "[email protected]:1433/your_database",
      "id": 67,
      "createdAt": "2021-09-17T14:15:10.256Z",
      "updatedAt": "2021-09-17T14:15:19.547Z",
      "dbms": {
        "name": "presto"
      }
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example_payload.json
        https://your-immuta-url.com/presto/handler/67
    {
      "handler": {
        "policyHandler": null,
        "dataSourceId": 67,
        "metadata": {
          "sid": "postgres",
          "ssl": false,
          "port": 8080,
          "query": null,
          "table": "customer",
          "schema": "public",
          "database": "your_database",
          "hostname": "presto-example.io",
          "ephemeral": true,
          "eventTime": null,
          "userFiles": [],
          "dataSourceName": "Marketing Data",
          "bodataTableName": "customer",
          "highCardinality": "c_customer_sk",
          "bodataSchemaName": "public",
          "columnsNormalized": false,
          "schemaProjectName": "Public",
          "staleDataTolerance": 0,
          "authenticationMethod": "No Authentication",
          "connectionStringOptions": "",
          "columns": [{
            "name": "c_customer_sk",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_customer_id",
            "dataType": "text",
            "remoteType": "char(16)",
            "nullable": true
          }, {
            "name": "c_current_cdemo_sk",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_current_hdemo_sk",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_current_addr_sk",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_first_shipto_date_sk",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_first_sales_date_sk",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_salutation",
            "dataType": "text",
            "remoteType": "varchar(10)",
            "nullable": true
          }, {
            "name": "c_first_name",
            "dataType": "text",
            "remoteType": "varchar(20)",
            "nullable": true
          }, {
            "name": "c_last_name",
            "dataType": "text",
            "remoteType": "varchar(30)",
            "nullable": true
          }, {
            "name": "c_preferred_cust_flag",
            "dataType": "text",
            "remoteType": "char(1)",
            "nullable": true
          }, {
            "name": "c_birth_day",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_birth_month",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_birth_year",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_birth_country",
            "dataType": "text",
            "remoteType": "varchar(20)",
            "nullable": true
          }, {
            "name": "c_login",
            "dataType": "text",
            "remoteType": "char(13)",
            "nullable": true
          }, {
            "name": "c_email_address",
            "dataType": "text",
            "remoteType": "varchar(50)",
            "nullable": true
          }, {
            "name": "c_last_review_date",
            "dataType": "text",
            "remoteType": "varchar(10)",
            "nullable": true
          }]
        },
        "type": "odbcHandler",
        "connectionString": "presto-example.io:8080/postgres/public",
        "id": 1,
        "createdAt": "2022-07-19T18:55:21.220Z",
        "updatedAt": "2022-07-19T18:55:23.466Z",
        "dbms": {
          "name": "presto"
        }
      }
    }
    {
      "id": 67,
      "ca": ["-----BEGIN CERTIFICATE-----\nMIIuyourcertificate\n-----END CERTIFICATE-----"],
      "metadata": {
        "columns": [{
          "name": "c_customer_sk",
          "dataType": "integer",
          "remoteType": "integer",
          "nullable": true
        }, {
          "name": "c_customer_id",
          "dataType": "text",
          "remoteType": "char(16)",
          "nullable": true
        }, {
          "name": "c_current_cdemo_sk",
          "dataType": "integer",
          "remoteType": "integer",
          "nullable": true
        }, {
          "name": "c_current_hdemo_sk",
          "dataType": "integer",
          "remoteType": "integer",
          "nullable": true
        }, {
          "name": "c_current_addr_sk",
          "dataType": "integer",
          "remoteType": "integer",
          "nullable": true
        }, {
          "name": "c_first_shipto_date_sk",
          "dataType": "integer",
          "remoteType": "integer",
          "nullable": true
        }, {
          "name": "c_first_sales_date_sk",
          "dataType": "integer",
          "remoteType": "integer",
          "nullable": true
        }, {
          "name": "c_salutation",
          "dataType": "text",
          "remoteType": "varchar(10)",
          "nullable": true
        }, {
          "name": "c_first_name",
          "dataType": "text",
          "remoteType": "varchar(20)",
          "nullable": true
        }, {
          "name": "c_last_name",
          "dataType": "text",
          "remoteType": "varchar(30)",
          "nullable": true
        }, {
          "name": "c_preferred_cust_flag",
          "dataType": "text",
          "remoteType": "char(1)",
          "nullable": true
        }, {
          "name": "c_birth_day",
          "dataType": "integer",
          "remoteType": "integer",
          "nullable": true
        }, {
          "name": "c_birth_month",
          "dataType": "integer",
          "remoteType": "integer",
          "nullable": true
        }, {
          "name": "c_birth_year",
          "dataType": "integer",
          "remoteType": "integer",
          "nullable": true
        }, {
          "name": "c_birth_country",
          "dataType": "text",
          "remoteType": "varchar(20)",
          "nullable": true
        }, {
          "name": "c_login",
          "dataType": "text",
          "remoteType": "char(13)",
          "nullable": true
        }, {
          "name": "c_email_address",
          "dataType": "text",
          "remoteType": "varchar(50)",
          "nullable": true
        }, {
          "name": "c_last_review_date",
          "dataType": "text",
          "remoteType": "varchar(10)",
          "nullable": true
        }]
      }
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/presto/bulk
    {
      "handler": {
        "metadata": {
          "sid": "postgres",
          "ssl": false,
          "port": 8080,
          "database": "your_database",
          "hostname": "presto-example.io",
          "userFiles": [{
            "keyName": "certificate",
            "filename": "576d8b38e9e8bc3749599489408a0b9f605b2a8d.md",
            "userFilename": "certificate.json"
          }],
          "authenticationMethod": "No Authentication",
          "connectionStringOptions": ""
        }
      },
      "connectionString": "presto-example.io:8080/postgres/your_database"
    }
    {
      "bulkId": "bulk_ds_update_657dd563e6e746069bf040de5e6909a9",
      "connectionString": "presto-example.io:8080/postgres/your_database",
      "jobsCreated": 4
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/presto/handler/67/triggerHighCardinalityJob
    25424a50-17df-11ec-b388-0fe1d33b5af1
    ASA workflow
    1. Create an Azure Synapse Analytics data source.

    2. Search Azure Synapse Analytics data sources.

    3. Update Azure Synapse Analytics data sources.

    Create a data source

    POST /asa/handler

    Save the provided connection information as a data source.

    Payload parameters

    Attribute
    Description
    Required

    private

    boolean When false, the data source will be publicly available in the Immuta UI.

    Yes

    blobHandler

    array[object] A list of full URLs providing the locations of all blob store handlers to use with this data source.

    Yes

    blobHandlerType

    string Describes the type of underlying blob handler that will be used with this data source (e.g., MS SQL).

    Yes

    recordFormat

    string The data format of blobs in the data source, such as json, xml, html, or jpeg.

    Response parameters

    Attribute
    Description

    id

    integer The handler ID.

    dataSourceId

    integer The ID of the data source.

    warnings

    string This message describes issues with the created data source, such as the data source being unhealthy.

    connectionString

    string The connection string used to connect the data source to Immuta.

    Request example

    The following request saves the provided connection information as a data source.

    Request example payload

    Response example

    Search ASA data sources

    Search for handler metadata

    GET /asa/handler/{handlerId}

    Get the handler metadata associated with the provided handler ID.

    Query parameters

    Attribute
    Description
    Required

    handlerId

    integer The specific handler ID.

    Yes

    skipCache

    boolean If true the handler cache will be skipped when retrieving the handler data.

    No

    Response parameters

    Attribute
    Description

    dataSourceId

    integer The data source ID.

    value

    metadata Details regarding the handler.

    Request example

    The following request returns the handler metadata associated with the provided handler ID.

    Response example

    Update ASA data sources

    Endpoint
    Purpose

    /asa/handler/{handlerId}

    .

    /asa/bulk

    .

    /asa/handler/{handlerId}/triggerHighCardinalityJob

    .

    /asa/handler/{handlerId}/refreshNativeViewJob

    Update handler metadata

    PUT /asa/handler/{handlerId}

    Updates the handler metadata associated with the provided handler ID. This endpoint does not perform partial updates, but will allow the dictionary to be omitted. In this case it uses the current dictionary.

    Query parameters

    Attribute
    Description
    Required

    handlerId

    integer The specific handler ID.

    Yes

    skipCache

    boolean If true the handler cache will be skipped when retrieving the handler data.

    No

    Response parameters

    Attribute
    Description

    dataSourceId

    integer The data source ID.

    body

    array[object] Details regarding the handler, including schema, name format, and data source metadata.

    Request example

    The following request updates the handler metadata (saved in example_payload.json) associated with the provided handler ID.

    Request payload example

    Response example

    Update multiple data sources

    PUT /asa/bulk

    Updates the data source metadata associated with the provided connection string.

    Query parameters

    Attribute
    Description
    Required

    body

    array[object] This payload includes data source metadata and specifies the connection string.

    Yes

    Response parameters

    Attribute
    Description

    bulkId

    integer The bulk handler metadata ID.

    connectionString

    string The specified connection string.

    jobsCreated

    integer Number of jobs created.

    Request example

    The following request updates the handler metadata for the handler ID specified in example_payload.json.

    Request payload example

    Response example

    Recalculate high cardinality columns

    PUT /asa/handler/{handlerId}/triggerHighCardinalityJob

    Recalculates the high cardinality column for the provided handler ID.

    Query parameters

    Attribute
    Description
    Required

    handlerId

    integer The specific handler ID.

    Yes

    Response parameters

    The response returns a string of characters that identify the high cardinality job run.

    Request example

    The following request recalculates the high cardinality column for the provided handler ID.

    Response example

    Refresh a view

    PUT /asa/handler/{handlerId}/refreshNativeViewJob

    Refresh the view of a data source.

    Query parameters

    Attribute
    Description
    Required

    handlerId

    integer The ID of the handler.

    Yes

    Response parameters

    The response returns a string of characters that identifies the refresh view job run.

    Request example

    This request refreshes the view for the data source with the handler ID 7.

    Response example

    Governance workflow
    1. Create a purpose.

    2. Search for purposes.

    3. Update purposes.

    4. Delete purposes.

    Create a purpose

    POST /governance/purpose

    Create a purpose.

    Payload parameters

    Attribute
    Description
    Required

    name

    string The purpose name.

    Yes

    id

    integer The ID of the purpose.

    No

    acknowledgement

    string The purpose acknowledgement.

    No

    description

    string The purpose description.

    Response parameters

    Attribute
    Description

    id

    integer The purpose ID.

    name

    string The purpose name.

    acknowledgement

    string The purpose acknowledgement.

    description

    string The purpose description.

    addedByProfile

    integer The profile ID of the user who created the purpose.

    displayAcknowledgement

    boolean When true, the acknowledgement text is displayed for users when they are prompted to agree to use the data in the project only for that purpose.

    Request example

    This example request with the payload below creates a new purpose.

    Payload example

    Response example

    Search purposes

    Method
    Path
    Purpose

    GET

    /governance/purpose

    .

    GET

    /governance/purpose/{purposeId}

    .

    Search all purposes

    GET /governance/purpose

    Search for purposes.

    Query parameters

    Attribute
    Description
    Required

    offset

    integer Used in combination with size to fetch pages.

    No

    size

    integer The number of results to return per page.

    No

    noLimit

    boolean When true, the number of results to return per page will not be limited to the number defined by size. Default is false.

    No

    sortField

    string Used to sort results by field. Default is name.

    Response parameters

    Attribute
    Description

    count

    integer The number of results.

    purposes

    array Information on each purpose returned, including id, name, acknowledgement, description, subpurposes, policyMetadata, the creation date, and the staged status.

    Request example

    This example request returns a list of all of the purposes.

    Response example

    Search purposes by ID

    GET /governance/purpose/{purposeId}

    Get a purpose by ID.

    Query parameters

    Attribute
    Description
    Required

    purposeId

    integer The purpose ID.

    Yes

    includeSubpurposes

    boolean If true, sub-purposes will be included in the results.

    No

    Response parameters

    Attribute
    Description

    id

    integer The purpose ID.

    name

    string The purpose name.

    acknowledgement

    string The purpose acknowledgement.

    description

    string The purpose description.

    addedByProfile

    integer The profile ID of the user who created the purpose.

    displayAcknowledgement

    boolean When true, the acknowledgement text is displayed for users when they are prompted to agree to use the data in the project only for that purpose.

    Request example

    This example request returns information on the purpose with the ID 1, including its sub-purposes.

    Response example

    Update a purpose

    PUT /governance/purpose/{purposeId}

    Update a purpose.

    Query parameters

    Attribute
    Description
    Required

    purposeId

    integer The purpose ID.

    Yes

    Payload parameters

    Attribute
    Description
    Required

    name

    string The purpose name.

    No

    acknowledgement

    string The purpose acknowledgement.

    No

    description

    string The purpose description.

    No

    displayAcknowledgement

    boolean When true, the acknowledgement text will display for users when they are prompted to agree to use the data in the project only for that purpose. Default is true.

    Response parameters

    Attribute
    Description

    id

    integer The purpose ID.

    name

    string The purpose name.

    acknowledgement

    string The purpose acknowledgement.

    description

    string The purpose description.

    addedByProfile

    integer The profile ID of the user who created the purpose.

    displayAcknowledgement

    boolean When true, the acknowledgement text is displayed for users when they are prompted to agree to use the data in the project only for that purpose.

    Request example

    This example request with the payload below will update the description of the purpose with the ID 8.

    Payload example

    Response example

    Delete a purpose

    DELETE /governance/purpose/{purposeId}

    Delete the purpose with the given ID and its associated sub-purposes.

    Query parameters

    Attribute
    Description
    Required

    purposeId

    integer The purpose ID.

    Yes

    Response parameters

    Attribute
    Description

    id

    integer The purpose ID.

    name

    string The purpose name.

    acknowledgement

    string The purpose acknowledgement.

    description

    string The purpose description.

    addedByProfile

    integer The profile ID of the user who created the purpose.

    displayAcknowledgement

    boolean When true, the acknowledgement text is displayed for users when they are prompted to agree to use the data in the project only for that purpose.

    Request example

    This example request deletes the purpose with the ID 8.

    Response example

    Data Source Payload Attribute Details

    connectionKey

    The connectionKey is a unique identifier for the collection of data sources being created. If an existing connectionKey is used with new connection information, it will delete the old data sources and create new ones from the new information in the payload.

    connection

    Attribute
    Description
    Required or optional

    Special Cases

    • Athena: Also requires region and queryResultLocationBucket. queryResultLocationDirectory is optional. authenticationMethod can be none, accessKey (default: username = access key, password = secret key), or instanceRole.

    • BigQuery: Does not require hostname

    nameTemplate

    Attribute
    Description

    Available templates include

    • <tablename>

    • <schema>

    • <database>

    All cases of the name in Immuta should be lowercase.

    For example, consider a table TPC.CUSTOMER that is given the following nameTemplate:

    This nameTemplate will produce a data source named tpc.customer in a schema project named tpc.

    options

    Attribute
    Description

    owners

    Attribute
    Description

    sources

    Best practice: Use Subscription Policies to Control Access

    If you are not tagging individual columns, omit sources to create data sources for all tables in the schema or database, and then use Subscription Policies to control access to the tables instead of excluding them from Immuta.

    This attribute configures which sources are created. If sources is not provided, all sources from the given connection will be created.

    There are 3 types of sources than can be specified:

    Recommended: Specify All Tables

    If you specify any sources (either tables or queries), but you still want to create data sources for the rest of the tables in the schema or database, you can specify all as a source:

    Best practice: Use schema monitoring

    Excluding sources or specifying all: true will turn on automatic schema monitoring in Immuta. As tables are added or removed, Immuta will look for those changes on a schedule (by default, once a day) and either disable or delete data sources for removed tables or create data sources for new tables. New tables will be tagged New so that you can build a policy to restrict access to new tables until they are evaluated by data owners. Data owners will be notified of new tables, and all subscribers will be notified if data sources are disabled or deleted.

    Specify a Query

    Immuta recommends creating a view in your remote database instead of using this option, but if that is not possible, you can create data sources based on SQL statements:

    Specify a Table

    If you want to select specific tables to be created as data sources, or if you want to tag individual data sources or columns within a data source, you need to leverage this parameter:

    Additional Options

    When specifying a table or query there are other options that can be specified:

    Option
    Description

    Columns

    • If any columns are specified, those are the only columns that will be available in the data source.

    • If no columns are specified, Immuta will look for new or removed columns on a schedule (by default, once a day) and add or remove columns from the data sources automatically as needed.

    • New columns will be tagged New, so you can build a policy to automatically mask new columns until they are approved.

    columns is an array of objects for each column:

    Attribute
    Description

    Column Descriptions

    You can add descriptions to columns without having to specify all the columns in the data source. columnDescriptions is an array of objects with the following schema:

    Attribute
    Description

    Tags

    You can add tags to columns or data sources. tags is an object with the following schema:

    Attribute
    Description
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example_payload.json
        https://your-immuta-url.com/asa/handler
    {
        "hits": [{
            "name": "Public Credit Accounts",
            "id": 1,
            "recordFormat": "Not Provided",
            "deleted": false,
            "description": null,
            "createdAt": "2021-09-09T14:12:09.511Z",
            "subscriptionPolicy": {
                "type": "subscription",
                "approvals": [{
                    "requiredPermission": "OWNER",
                    "specificApproverRequired": false
                }]
            },
            "schemaEvolutionId": 1,
            "recordCount": 0,
            "blobHandlerType": "Synapse",
            "subscriptionType": "approval",
            "sqlSchemaName": "public",
            "status": "failed",
            "subscriptionStatus": "owner",
            "connectionString": "[email protected]:1433/public",
            "policy": "No Conflict",
            "policyHandlerType": "Builder",
            "native": null,
            "workspace": null
        }, {
            "name": "Public Credit Transactions",
            "id": 2,
            "recordFormat": "Not Provided",
            "deleted": false,
            "description": null,
            "createdAt": "2021-09-09T14:12:09.522Z",
            "subscriptionPolicy": {
                "type": "subscription",
                "approvals": [{
                    "requiredPermission": "OWNER",
                    "specificApproverRequired": false
                }]
            },
            "schemaEvolutionId": 1,
            "recordCount": 0,
            "blobHandlerType": "Synapse",
            "subscriptionType": "approval",
            "sqlSchemaName": "public",
            "status": "passed",
            "subscriptionStatus": "owner",
            "connectionString": "[email protected]:1433/public",
            "policy": "No Conflict",
            "policyHandlerType": "Builder",
            "native": null,
            "workspace": null
        }, {
            "name": "Public Fake Medical Claims 2017",
            "id": 3,
            "recordFormat": "Not Provided",
            "deleted": false,
            "description": null,
            "createdAt": "2021-09-09T14:12:09.894Z",
            "subscriptionPolicy": null,
            "schemaEvolutionId": 1,
            "recordCount": 0,
            "blobHandlerType": "Synapse",
            "subscriptionType": "manual",
            "sqlSchemaName": "public",
            "status": "passed",
            "subscriptionStatus": "owner",
            "connectionString": "[email protected]:1433/public",
            "policy": "No Conflict",
            "policyHandlerType": "Builder",
            "native": null,
            "workspace": null
        }, {
            "name": "Public Uciml Census Income Enriched",
            "id": 4,
            "recordFormat": "Not Provided",
            "deleted": false,
            "description": null,
            "createdAt": "2021-09-09T14:12:09.916Z",
            "subscriptionPolicy": null,
            "schemaEvolutionId": 1,
            "recordCount": 0,
            "blobHandlerType": "Synapse",
            "subscriptionType": "manual",
            "sqlSchemaName": "public",
            "status": "passed",
            "subscriptionStatus": "owner",
            "connectionString": "[email protected]:1433/public",
            "policy": "None",
            "policyHandlerType": "None",
            "native": null,
            "workspace": null
        }],
        "facets": {
            "tags": [],
            "statuses": [{
                "name": "failed",
                "count": 0
            }, {
                "name": "passed",
                "count": 0
            }],
            "blobHandlerTypes": [{
                "name": "Synapse",
                "count": 0
            }],
            "editable": [{
                "name": "owned",
                "count": 4
            }, {
                "name": "expert",
                "count": 0
            }, {
                "name": "notSubscribed",
                "count": 0
            }, {
                "name": "disabled",
                "count": 0
            }]
        },
        "count": 4
    }
    {
      "connectionString": "[email protected]:1433/public"
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/asa/handler/67
    {
      "dataSourceId": 67,
      "metadata": {
        "ssl": true,
        "port": 1433,
        "query": null,
        "table": "table_108",
        "schema": "elliott_dev",
        "database": "your_database",
        "hostname": "your-workspace.sql.azuresynapse.net",
        "username": "your-username",
        "eventTime": null,
        "dataSourceName": "Dev Table 108",
        "bodataTableName": "table_108",
        "disableClassify": false,
        "highCardinality": "col_1",
        "bodataSchemaName": "dev",
        "columnsNormalized": false,
        "schemaProjectName": "Dev",
        "staleDataTolerance": 2592000
      },
      "type": "odbcHandler",
      "connectionString": "[email protected]:1433/public",
      "id": 67,
      "createdAt": "2021-09-17T14:15:10.256Z",
      "updatedAt": "2021-09-17T14:15:19.547Z",
      "dbms": {
        "name": "asa"
      }
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example_payload.json
        https://your-immuta-url.com/asa/handler/67
    {
        "schemaEvolution": {
            "schemas": [
                "string"
            ],
            "disabled": false,
            "ownerProfileId": 0,
            "config": {
                "nameTemplate": {
                    "tableFormat": "string",
                    "nameFormat": "string",
                    "sqlSchemaNameFormat": "string",
                    "schemaProjectNameFormat": "string"
                }
            },
            "dataSourceConfig": {},
            "handlerMetadata": {},
            "connectionString": "string"
        },
        "handler": {
            "id": 0,
            "type": "string",
            "dataSourceId": 0,
            "metadata": {
                "blobId": "string",
                "eventTime": "string",
                "highCardinality": "string",
                "bodataSchemaName": "immuta",
                "bodataTableName": "string",
                "format": "string",
                "disableClassify": false,
                "staleDataTolerance": 2592000,
                "dataSourceName": "string",
                "schemaProjectName": "string",
                "username": "string",
                "password": "string",
                "ssl": false,
                "database": "string",
                "schema": "string",
                "table": "string",
                "query": "string",
                "columns": [{
                    "name": "string",
                    "dataType": "string",
                    "remoteColumn": "string",
                    "remoteType": "string",
                    "srid": 0,
                    "statistics": {},
                    "nullable": false,
                    "isPrimaryKey": false,
                    "displayName": "string",
                    "description": "string",
                    "tags": [
                        "string"
                    ],
                    "catalogMetadata": {},
                    "children": [
                        "string"
                    ]
                }],
                "columnsNormalized": false,
                "nativeWorkspaceName": "string",
                "nativeSchemaName": "string",
                "nativeViewName": "string",
                "hostname": "string",
                "port": 0,
                "userFiles": [{
                    "keyName": "string",
                    "filename": "string",
                    "content": "string",
                    "userFilename": "string"
                }],
                "scheme": "string",
                "warehouse": "string",
                "connectionStringOptions": "string",
                "native": {
                    "type": "string",
                    "projectId": 0
                },
                "secureNativeView": false
            },
            "dbms": {
                "name": "string"
            },
            "connectionString": "string",
            "createdAt": "2021-09-20",
            "updatedAt": "2021-09-20",
            "policyHandler": {
                "visibilitySchema": {
                    "fields": [
                        "string"
                    ],
                    "version": "2021-09-20"
                }
            }
        }
    }
    {
      "dataSourceId": 67,
      "metadata": {
        "ssl": true,
        "port": 1433,
        "query": null,
        "table": "table_108",
        "schema": "dev",
        "database": "your_database",
        "hostname": "your-workspace.sql.azuresynapse.net",
        "username": "your-username",
        "eventTime": null,
        "dataSourceName": "Dev Table 108",
        "bodataTableName": "table_108",
        "disableClassify": false,
        "highCardinality": "col_1",
        "bodataSchemaName": "dev",
        "columnsNormalized": false,
        "schemaProjectName": "Dev",
        "staleDataTolerance": 2592000
      },
      "type": "odbcHandler",
      "connectionString": "[email protected]:1433/public",
      "id": 67,
      "createdAt": "2021-09-17T14:15:10.256Z",
      "updatedAt": "2021-09-17T14:15:19.547Z",
      "dbms": {
        "name": "asa"
      }
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example_payload.json
        https://your-immuta-url.com/asa/bulk
    {
        "ids": [
            0
        ],
        "connectionString": "string",
        "handler": {
            "metadata": {
                "blobId": "string",
                "eventTime": "string",
                "highCardinality": "string",
                "bodataTableName": "string",
                "format": "string",
                "disableClassify": false,
                "staleDataTolerance": 2592000,
                "dataSourceName": "string",
                "schemaProjectName": "string",
                "username": "string",
                "password": "string",
                "ssl": false,
                "database": "string",
                "schema": "string",
                "table": "string",
                "query": "string",
                "columns": [{
                    "name": "string",
                    "dataType": "string",
                    "remoteColumn": "string",
                    "remoteType": "string",
                    "srid": 0,
                    "statistics": {},
                    "nullable": false,
                    "isPrimaryKey": false,
                    "displayName": "string",
                    "description": "string",
                    "tags": [
                        "string"
                    ],
                    "catalogMetadata": {},
                    "children": [
                        "string"
                    ]
                }],
                "columnsNormalized": false,
                "nativeWorkspaceName": "string",
                "nativeSchemaName": "string",
                "nativeViewName": "string",
                "authenticationMethod": "string",
                "hostname": "string",
                "port": 0,
                "sid": "string",
                "connectionStringOptions": "string",
                "paths": [
                    "string"
                ],
                "clusterName": "string",
                "pathUris": [
                    "string"
                ],
                "metastoreTables": [
                    "string"
                ],
                "scheme": "string",
                "providers": "string",
                "ephemeral": false,
                "httpPath": "string",
                "userFiles": [{
                    "keyName": "string",
                    "filename": "string",
                    "content": "string",
                    "userFilename": "string"
                }],
                "warehouse": "string",
                "workspaceId": 0,
                "authDB": "string",
                "directory": "string",
                "secureNativeView": false,
                "bodataSchemaName": "string"
            }
        },
        "schemaEvolution": {
            "schemas": [
                "string"
            ],
            "disabled": false,
            "ownerProfileId": 0,
            "config": {
                "nameTemplate": {
                    "tableFormat": "string",
                    "nameFormat": "string",
                    "sqlSchemaNameFormat": "string",
                    "schemaProjectNameFormat": "string"
                }
            },
            "dataSourceConfig": {},
            "handlerMetadata": {},
            "connectionString": "string"
        }
    }
    {
      "bulkId": "bulk_ds_update_fe48d7fd4c594f96a89438cdb84ec0ba",
      "connectionString": "string@string:0/string",
      "jobsCreated": 1
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/asa/handler/67/triggerHighCardinalityJob
    25424a50-17df-11ec-b388-0fe1d33b5af1
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/asa/handler/7/refreshNativeViewJob
    53c256d0-eb57-11ec-b275-d95a8e998142
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/governance/purpose
    {
      "name": "Compliance Requirement #2"
    }
    {
      "id": 10,
      "name": "Compliance Requirement #2",
      "acknowledgement": null,
      "description": null,
      "addedByProfile": 2,
      "displayAcknowledgement": true,
      "deleted": false,
      "systemGenerated": false,
      "policyMetadata": null,
      "createdAt": "2021-10-04T15:52:38.060Z",
      "updatedAt": "2021-10-04T15:52:38.060Z",
      "subpurposes": []
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/governance/purpose
    {
      "purposes": [
        {
          "id": 1,
          "name": "Re-identification Prohibited",
          "acknowledgement": "I agree to use the data associated with this project for the stated purpose of the project, and for that purpose only, as listed in the project's homepage, and to refrain from sharing that data outside of the project or Immuta. I also agree not to re-identify or take any steps to re-identify the individuals whose personal information is contained in the data sources attached to the project. In the event that these individuals have been identified or that I discover risks that I believe could lead to their identification, I agree to immediately notify the project owner or governance team and take immediate action to address and mitigate such risks. I further agree to refrain from contacting any individuals who might be identified.",
          "description": null,
          "addedByProfile": 1,
          "displayAcknowledgement": true,
          "deleted": false,
          "systemGenerated": true,
          "policyMetadata": null,
          "createdAt": "2021-08-16T20:25:44.423Z",
          "updatedAt": "2021-09-30T00:36:25.215Z"
        },
        {
          "id": 3,
          "name": "Re-identification Prohibited.CCPA",
          "acknowledgement": "I agree to use the data associated with this project for the stated purpose of the project, and for that purpose only, as listed in the project's homepage, and to refrain from sharing that data outside of the project or Immuta. I also agree not to re-identify or take any steps to re-identify the individuals whose personal information is contained in the data sources attached to the project. In the event that these individuals have been identified or that I discover risks that I believe could lead to their identification, I agree to immediately notify the project owner or governance team and take immediate action to address and mitigate such risks. I further agree to refrain from contacting any individuals who might be identified.",
          "description": null,
          "addedByProfile": 1,
          "displayAcknowledgement": true,
          "deleted": false,
          "systemGenerated": true,
          "policyMetadata": null,
          "createdAt": "2021-08-16T20:25:44.443Z",
          "updatedAt": "2021-09-30T00:36:25.250Z"
        },
        {
          "id": 2,
          "name": "Re-identification Prohibited.Safe Harbor Method",
          "acknowledgement": "I agree to use the data associated with this project for the stated purpose of the project, and for that purpose only, as listed in the project's homepage, and to refrain from sharing that data outside of the project or Immuta. I also agree not to re-identify or take any steps to re-identify the individuals whose health information is contained in the data sources attached to the project. In the event that these individuals have been identified or that I discover risks that I believe could lead to their identification, I agree to immediately notify the project owner or governance team and take immediate action to address and mitigate such risks. I further agree to refrain from contacting any individuals who might be identified.",
          "description": null,
          "addedByProfile": 1,
          "displayAcknowledgement": true,
          "deleted": false,
          "systemGenerated": true,
          "policyMetadata": null,
          "createdAt": "2021-08-16T20:25:44.434Z",
          "updatedAt": "2021-09-30T00:36:25.234Z"
        },
        {
          "id": 4,
          "name": "Use Case Outside De-identification",
          "acknowledgement": "I agree to use the data associated with this project for the stated purpose of the project, and for that purpose only, as listed in the project's homepage, and to refrain from sharing that data outside of the project or Immuta. In the event that I discover risks that I believe could lead to unauthorized access, I agree to immediately notify the project owner or governance team and take immediate action to address and mitigate such risks.",
          "description": null,
          "addedByProfile": 1,
          "displayAcknowledgement": true,
          "deleted": false,
          "systemGenerated": true,
          "policyMetadata": null,
          "createdAt": "2021-08-16T20:25:44.452Z",
          "updatedAt": "2021-09-30T00:36:25.270Z"
        }
      ],
      "count": 4
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/governance/purpose/1?includeSubpurposes=true
    {
      "name": "Re-identification Prohibited",
      "acknowledgement": "I agree to use the data associated with this project for the stated purpose of the project, and for that purpose only, as listed in the project's homepage, and to refrain from sharing that data outside of the project or Immuta. I also agree not to re-identify or take any steps to re-identify the individuals whose personal information is contained in the data sources attached to the project. In the event that these individuals have been identified or that I discover risks that I believe could lead to their identification, I agree to immediately notify the project owner or governance team and take immediate action to address and mitigate such risks. I further agree to refrain from contacting any individuals who might be identified.",
      "description": null,
      "addedByProfile": 1,
      "displayAcknowledgement": true,
      "deleted": false,
      "systemGenerated": true,
      "policyMetadata": null,
      "id": 1,
      "createdAt": "2021-08-16T20:25:44.423Z",
      "updatedAt": "2021-09-30T00:36:25.215Z",
      "addedBy": "Immuta System Account",
      "projectCount": 1,
      "projects": [
        1
      ],
      "subpurposes": [
        {
          "id": 3,
          "name": "Re-identification Prohibited.CCPA",
          "acknowledgement": "I agree to use the data associated with this project for the stated purpose of the project, and for that purpose only, as listed in the project's homepage, and to refrain from sharing that data outside of the project or Immuta. I also agree not to re-identify or take any steps to re-identify the individuals whose personal information is contained in the data sources attached to the project. In the event that these individuals have been identified or that I discover risks that I believe could lead to their identification, I agree to immediately notify the project owner or governance team and take immediate action to address and mitigate such risks. I further agree to refrain from contacting any individuals who might be identified.",
          "description": null,
          "addedByProfile": 1,
          "displayAcknowledgement": true,
          "deleted": false,
          "systemGenerated": true,
          "policyMetadata": null,
          "createdAt": "2021-08-16T20:25:44.443Z",
          "updatedAt": "2021-09-30T00:36:25.250Z",
          "projectCount": 0,
          "projects": [],
          "addedBy": "Immuta System Account"
        },
        {
          "id": 2,
          "name": "Re-identification Prohibited.Safe Harbor Method",
          "acknowledgement": "I agree to use the data associated with this project for the stated purpose of the project, and for that purpose only, as listed in the project's homepage, and to refrain from sharing that data outside of the project or Immuta. I also agree not to re-identify or take any steps to re-identify the individuals whose health information is contained in the data sources attached to the project. In the event that these individuals have been identified or that I discover risks that I believe could lead to their identification, I agree to immediately notify the project owner or governance team and take immediate action to address and mitigate such risks. I further agree to refrain from contacting any individuals who might be identified.",
          "description": null,
          "addedByProfile": 1,
          "displayAcknowledgement": true,
          "deleted": false,
          "systemGenerated": true,
          "policyMetadata": null,
          "createdAt": "2021-08-16T20:25:44.434Z",
          "updatedAt": "2021-09-30T00:36:25.234Z",
          "addedBy": "Immuta System Account",
          "projectCount": 0,
          "projects": []
        }
      ]
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/governance/purpose/8
    {
      "description": "This requirement has been amended to include an updated model."
    }
    {
      "id": 8,
      "name": "Compliance Requirement #1",
      "acknowledgement": null,
      "description": "This requirement has been amended to include an updated model.",
      "addedByProfile": 2,
      "displayAcknowledgement": true,
      "deleted": false,
      "systemGenerated": false,
      "policyMetadata": null,
      "createdAt": "2021-10-01T21:08:00.517Z",
      "updatedAt": "2021-10-04T14:21:59.834Z"
    }
    curl \
        --request DELETE \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/governance/purpose/8
    [
      {
        "id": 8,
        "name": "Compliance Requirement #1",
        "acknowledgement": null,
        "description": "This requirement has been amended to include an updated model.",
        "addedByProfile": 2,
        "displayAcknowledgement": true,
        "deleted": true,
        "systemGenerated": false,
        "policyMetadata": null,
        "createdAt": "2021-10-01T21:08:00.517Z",
        "updatedAt": "2021-10-04T14:27:07.203Z"
      }
    ]

    Yes

    type

    string The type of data source: ingested (metadata will exist in Immuta) or queryable (metadata is dynamically queried).

    Yes

    name

    string The name of the data source. It must be unique within the Immuta tenant.

    Yes

    sqlTableName

    string A string that represents this data source's table in Immuta.

    Yes

    organization

    string The organization that owns the data source.

    Yes

    category

    string The category of the data source.

    No

    description

    string The description of the data source.

    No

    hasExamples

    boolean When true, the data source contains examples.

    No

    Updates the handler metadata associated with the provided handler ID
    Updates the data source metadata associated with the provided connection string
    Recalculates the high cardinality column for the provided handler ID
    Refresh the view of a data source.

    No

    displayAcknowledgement

    boolean When true, the acknowledgement text will display for users when they are prompted to agree to use the data in the project only for that purpose. Default is true.

    No

    deleted

    boolean If true, the purpose has been deleted.

    No

    subpurposes

    array A list of the sub-purposes.

    No

    policyMetadata

    array Information including the values for kAnonNoiseReduction, allowUnmaskedKAnon, adjustmentCertificationText, isHED, and adjustmentRequiresDataSourceTag.

    No

    staged

    boolean If true, the purpose is staged.

    No

    deleted

    boolean If true, the purpose has been deleted.

    subpurposes

    array A list of the sub-purposes.

    policyMetadata

    array Information including the values for kAnonNoiseReduction, allowUnmaskedKAnon, adjustmentCertificationText, isHED, and adjustmentRequiresDataSourceTag.

    staged

    boolean If true, the purpose is staged.

    createdAt

    timestamp The date the purpose was created.

    updatedAt

    timestamp The date the purpose was last updated.

    No

    sortOrder

    string Sorts results by order, which must be asc or desc. Default is asc.

    No

    searchText

    string Search for purpose names by text.

    No

    root

    string Restrict results to provided root or sub-purposes of root.

    No

    strictSearch

    boolean When true, will search for a complete match of the whole string provided in searchText.

    No

    getAffectedCount

    boolean If true, returns the count of projects with each purpose.

    No

    includeDeleted

    boolean If true, includes deleted purposes in the results.

    No

    deleted

    boolean If true, the purpose has been deleted.

    subpurposes

    array A list of the sub-purposes.

    policyMetadata

    array Information including the values for kAnonNoiseReduction, allowUnmaskedKAnon, adjustmentCertificationText, isHED, and adjustmentRequiresDataSourceTag.

    staged

    boolean If true, the purpose is staged.

    createdAt

    timestamp The date the purpose was created.

    updatedAt

    timestamp The date the purpose was last updated.

    No

    reAcknowledge

    boolean When true, users will have to re-acknowledge the purpose after it is updated.

    No

    applyToSubpurposes

    boolean It true, the updates will be applied to the sub-purposes.

    No

    policyMetadata

    array Information including the values for kAnonNoiseReduction, allowUnmaskedKAnon, adjustmentCertificationText, isHED, and adjustmentRequiresDataSourceTag.

    No

    deleted

    boolean If true, the purpose has been deleted.

    subpurposes

    array A list of the sub-purposes.

    policyMetadata

    array Information including the values for kAnonNoiseReduction, allowUnmaskedKAnon, adjustmentCertificationText, isHED, and adjustmentRequiresDataSourceTag.

    staged

    boolean If true, the purpose is staged.

    createdAt

    timestamp The date the purpose was created.

    updatedAt

    timestamp The date the purpose was last updated.

    deleted

    boolean If true, the purpose has been deleted.

    subpurposes

    array A list of the sub-purposes.

    policyMetadata

    array Information including the values for kAnonNoiseReduction, allowUnmaskedKAnon, adjustmentCertificationText, isHED, and adjustmentRequiresDataSourceTag.

    staged

    boolean If true, the purpose is staged.

    createdAt

    timestamp The date the purpose was created.

    updatedAt

    timestamp The date the purpose was last updated.

    Search for purposes
    Get a purpose by ID

    Optional

    hostname

    string The hostname of the remote database instance.

    Required

    port

    number The port of the remote database instance.

    Optional

    warehouse

    string The default pool of compute resources Immuta will use to run queries and other Snowflake operations.

    Required

    connectionStringOptions

    string Additional connection string options to be used when connecting to the remote database.

    Optional

    authenticationMethod

    string The type of authentication method to use. Options include userPassword, keyPair, and oAuthClientCredentials.

    Required

    username

    string The username used to connect to the remote database.

    Required if using userPassword or keyPair.

    password

    string The password used to connect to the remote database.

    Required if using userPassword.

    useCertificate

    boolean Set to true when using client certificate credentials to request an access token. Otherwise, set to false to use client secret.

    Required if using oAuthClientCredentials.

    userFiles

    object Details about the files required for the request.

    Required if using keyPair or oAuthClientCredentials with useCertificate set to true.

    keyName

    string The connection name of the key file. Must be PRIV_KEY_FILE if using keyPair, or must be oauth client certificate if using oAuthClientCredentials.

    Required if using keyPair or oAuthClientCredentials with useCertificate set to true.

    content

    string The content of the file, base-64 encoded.

    Required if using keyPair or oAuthClientCredentials with useCertificate set to true.

    userFilename

    string The name of the file - for display purposes in the UI.

    Required if using keyPair or oAuthClientCredentials with useCertificate set to true.

    Attribute
    Description
    Required or optional

    handler

    Databricks

    Required

    ssl

    boolean Set to true to enable SSL communication with the remote database.

    Optional

    database

    string The database name.

    Optional

    hostname

    Attribute
    Description
    Required or optional

    handler

    Redshift

    Required

    ssl

    boolean Set to true to enable SSL communication with the remote database.

    Optional

    database

    string The database name.

    Optional

    schema

    Attribute
    Description

    handler

    Google BigQuery, Presto, and Trino

    ssl

    boolean Set to true to enable SSL communication with the remote database.

    database

    string The database name.

    schema

    string The schema in the remote database.

    userFiles

    array Array of objects; each object must have keyName (corresponds to a connection string option), content (base-64 encoded content), and userFilename (the name of the file - for display purposes in the app).

    connectionStringOptions

    and
    password
    . Requires
    sid
    , which is the GCP project ID, and
    userFiles
    with the
    keyName
    of
    KeyFilePath
    and the base64-encoded
    keyfile.json
    .
  • Trino: authenticationMethod can be No Authentication, LDAP Authentication, or Kerberos Authentication.

  • Data Owners will be notified when columns are added or removed.

    handler

    Snowflake

    Required

    ssl

    boolean Set to true to enable SSL communication with the remote database.

    Optional

    database

    string The database name.

    Required

    schema

    dataSourceFormat

    string Format to be used to name the data sources created in this group.

    schemaFormat

    string Format to be used to name the Immuta schema created in this group.

    tableFormat

    string Format to be used to name the Immuta table created in this group.

    schemaProjectNameFormat

    string Format to be used to name the Immuta schema project created in this group.

    staleDataTolerance

    integer The length in seconds that data for these sources can be cached.

    disableSensitiveDataDiscovery

    boolean If true, Immuta will not perform sensitive data discovery. Default: false.

    domainCollectionId

    string The ID of the domain to assign the data sources to. Use the GET /collection endpoint to retrieve domains and domain IDs.

    hardDelete

    boolean If true, when the table backing the data source is no longer available, the data source in Immuta is deleted. If this is false, the data source will be disabled. Default: false.

    tableTags

    array An array of tags (strings) to place at the data source level on every data source.

    type

    group or user The type of owner that is being added.

    name

    string The name of the group or the user (username they log in with).

    iam (optional)

    string The ID of the identity manager system the user or group comes from. If excluded, any user/group that matches will be added as an owner.

    columnDescriptions

    See details below.

    description

    A short description for the data source.

    documentation

    Markdown-supported documentation for the data source.

    naming

    See the example above in Specify a Query. This is required for query-based sources, but is optional for table-based sources and can be used to override the nameTemplate provided for the whole database/schema.

    owners

    Specify owners for an individual data source. The payload is the same as owners at the root level.

    tags

    See details below.

    name

    The column name.

    dataType

    The data type.

    nullable

    Whether or not the column contains null.

    remoteType

    The actual data type in the remote database.

    primaryKey

    Specify whether this is the primary key of the remote table.

    description

    Describe the column.

    columnName

    string The column name.

    description

    string The description of the column.

    table

    array An array of tags (strings) to add to this table.

    columns

    array An array of objects that specifies columnName (string) and tags (an array to tags).

    all tables
    query
    table

    string The schema in the remote database.

    Configure an Amazon S3 Integration

    Private preview: The Amazon S3 integration is available to select accounts. Reach out to your Immuta representative for details.

    The Amazon S3 resource allows you to create, configure, and manage your S3 integration. In this integration, Immuta provides coarse-grained access controls for data in S3 by performing permission grants using the Access Grants API so that users don't have to manage individual IAM policies themselves.

    Use the /integrations endpoint to

    Requirements

    • S3 integration enabled in Immuta; contact your Immuta representative to enable this integration

    • ; contact your Immuta representative to get this feature enabled

    • No location is registered in your AWS Access Grants instance before configuring the integration in Immuta

    Permissions

    • APPLICATION_ADMIN Immuta permission to configure the integration

    • CREATE_S3_DATASOURCE Immuta permission to register S3 prefixes

    • The AWS account credentials or optional AWS IAM role you provide Immuta to configure the integration must

    Set up S3 Access Grants instance

    1. . AWS supports one Access Grants instance per region per AWS account.

    2. . You will add this role to your integration configuration in Immuta so that Immuta can register this role with your Access Grants location. The policy should include at least the following permissions, but might need additional permissions depending on other local setup factors. An example trust policy is provided below.

      • sts:AssumeRole

    IAM role trust policy example
    1. with the following permissions, and attach the policy to the IAM role you created to grant the permissions to the role. The policy should include the following permissions. An example policy is provided below.

    • s3:GetObject

    • s3:GetObjectVersion

    • s3:GetObjectAcl

    IAM policy example

    Replace <bucket_arn> in the example below with the ARN of the bucket scope that contains data you want to grant access to.

    If you use server-side encryption with AWS Key Management Service (AWS KMS) keys to encrypt your data, the following permissions are required for the IAM role in the policy. If you do not use this feature, do not include these permissions in your IAM policy:

    • kms:Decrypt

    • kms:GenerateDataKey

    1. that Immuta can use to create Access Grants locations and issue grants. This role must have the S3 permissions listed in the . An example policy is provided below.

    IAM policy example

    Replace <role_arn> and <access_grants_instance_arn> in the example below with the ARNs of the role you created and your Access Grants instance, respectively. The Access Grants instance resource ARN should be scoped to apply to any future locations that will be created under this Access Grants instance. For example, "Resource": "arn:aws:s3:us-east-2:6********499:access-grants/default*" ensures that the role would have permissions for both of these locations:

    • arn:aws:s3:us-east-2:6********499:access-grants/default/newlocation1

    1. If you use AWS IAM Identity Center, associate . Then add the permissions listed in the sample policy below to your IAM policy, and attach the policy to the IAM role you created to grant the permissions to the role.

    IAM policy example

    Copy the JSON below and replace the following bracketed placeholder values with your own. For details about the actions and resource values, see the .

    • <iam_identity_center_instance_arn>: The that is configured with the application.

    • <iam_identity_center_application_arn_for_s3_access_grants>: The configured with IAM Identity Center.

    Configure the integration in Immuta

    This request configures the integration using the AWS access key authentication method.

    1. Copy the request example. The example uses JSON format, but the request also accepts YAML.

    2. Replace the Immuta URL and with your own.

    3. Change the config values to your own, where

    See the for parameter definitions, value types, and additional configuration options.

    Response

    The response returns the status of the S3 integration configuration connection. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Get an integration

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    3. Replace the {id} request parameter with the unique identifier of the integration you want to get. Alternatively, you can get a list of all integrations and their IDs with the .

    Response

    The response returns an S3 integration configuration. See the for details about the response schema. An unsuccessful response returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Get all integrations

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    Response

    The response returns the configuration for all integrations. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Update an integration configuration

    Copy the request example, and replace the values with your own as directed to update the integration settings. The example provided uses JSON format, but the request also accepts YAML.

    See the for parameter definitions, value types, and additional configuration options.

    1. Replace the Immuta URL and with your own.

    2. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    3. Change the config values from above to your own. The editable values listed below are the only parameters that can change from the integration's existing configuration. The required parameters listed below must match the integration's existing configuration.

    Response

    The response returns the status of the Amazon S3 integration configuration connection. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Delete an integration

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    3. Replace the {id} request parameter with the unique identifier of the integration you want to delete.

    Response

    The response returns the status of the S3 integration configuration that has been deleted. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Create a Databricks Data Source

    Databricks data source API reference guide

    The databricks endpoint allows you to connect and manage Databricks data sources in Immuta.

    Additional fields may be included in some responses you receive; however, these attributes are for internal purposes and are therefore undocumented.

    Requirements

    Databricks Spark integration

    When exposing a table or view from an Immuta-enabled Databricks cluster, be sure that at least one of these traits is true:

    • The user exposing the tables has READ_METADATA and SELECT permissions on the target views/tables (specifically if Table ACLs are enabled).

    • The user exposing the tables is listed in the immuta.spark.acl.whitelist configuration on the target cluster.

    • The user exposing the tables is a Databricks workspace administrator.

    Databricks Unity Catalog integration

    When registering Databricks Unity Catalog securables in Immuta, use and ensure it has the privileges listed below. Immuta uses this service principal continuously to orchestrate Unity Catalog policies and maintain state between Immuta and Databricks.

    • USE CATALOG and MANAGE on all catalogs containing securables registered as Immuta data sources.

    • USE SCHEMA on all schemas containing securables registered as Immuta data sources.

    • MODIFY and SELECT on all securables you want registered as Immuta data sources.

    MANAGE and MODIFY are required so that the service principal can apply row filters and column masks on the securable; to do so, the service principal must also have SELECT on the securable as well as USE CATALOG on its parent catalog and USE SCHEMA on its parent schema. Since privileges are inherited, you can grant the service principal the MODIFY and SELECT privilege on all catalogs or schemas containing Immuta data sources, which automatically grants the service principal the MODIFY and SELECT

    Azure Databricks Unity Catalog limitation

    Set all table-level ownership on your Unity Catalog data sources to an individual user or service principal instead of a Databricks group before proceeding. Otherwise, Immuta cannot apply data policies to the table in Unity Catalog. See the for details.

    Databricks workflow

    1. .

    2. .

    3. .

    Create a data source

    POST /databricks/handler

    Save the provided connection information as a data source.

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This request creates two Databricks data sources.

    Payload example

    Response example

    Get information about a data source

    GET /databricks/handler/{handlerId}

    Get the handler metadata associated with the provided handler ID.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This request returns metadata for the handler with the ID 48.

    Response example

    Manage data sources

    Method
    Path
    Purpose

    Update a specific data source

    PUT /databricks/handler/{handlerId}

    Update the data source metadata associated with the provided handler ID. This endpoint does not perform partial updates, but will allow the dictionary to be omitted. In this case, it uses the current dictionary.

    Query parameters

    Attribute
    Description
    Required

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This request updates the metadata for the data source with the handler ID 48.

    Payload example

    The payload below updates the dataSourceName to Cities.

    Response example

    Update multiple data sources

    PUT /databricks/bulk

    Update the data source metadata associated with the provided connection string.

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This request updates the metadata for all data sources with the connection string specified in example-payload.json.

    Payload example

    The payload below adds a certificate (certificate.json) to connect to the data sources with the provided connection.

    Response example

    Recalculate the high cardinality column for a data source

    PUT /databricks/handler/{handlerId}/triggerHighCardinalityJob

    Recalculate the high cardinality column for the specified data source.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    The response returns a string of characters that identify the high cardinality job run.

    Request example

    This request re-runs the job that calculates the high cardinality column for the data source with the handler ID 47.

    Response example

    Create a Starburst (Trino) Data Source

    Starburst (Trino) data source API reference guide

    The trino endpoint allows you to connect and manage Trino data sources in Immuta.

    Additional fields may be included in some responses you receive; however, these attributes are for internal purposes and are therefore undocumented.

    dataSourceFormat: <schema> <tablename>
    tableFormat: <tablename>
    schemaFormat: <schema>
    schemaProjectNameFormat: <schema>
    sources:
      - all: true
    sources:
      - query: “select * from table”
        naming:
          datasource: “My Source”,
          table: “my_source”,
          schema: “queries”
    sources:
      - table: name_of_table
        schema: name_of_schema
    columnDescriptions:
      - columnName: acct_num
        description: The account number
    tags:
      table:
        - Sensitive
        - Marketing
      columns:
        - columnName: acct_num
          tags:
            - unique_id

    string The hostname of the remote database instance.

    Required

    port

    number The port of the remote database instance.

    Optional

    connectionStringOptions

    string Additional connection string options to be used when connecting to the remote database.

    Optional

    authenticationMethod

    string The type of authentication method to use. Options include oAuthM2M and token.

    Required

    token

    string The Databricks personal access token for the service principal created for Immuta.

    Required if using token authentication.

    useCertificate

    boolean True when using client certificate credentials to request an access token. Otherwise, client secret.

    Required if using oAuthM2M.

    clientId

    string The client identifier of the Immuta service principal you configured. This is the client ID displayed in Databricks when creating the client secret for the service principal.

    Required if using oAuthM2M.

    audience

    string The audience for the OAuth Client Credential token request.

    Required if using oAuthM2M.

    clientSecret

    string An application password an app can use in place of a certificate to identity itself.

    Required if using oAuthM2M and useCertificate is set to false.

    certificateThumbprint

    string The certificate thumbprint to use to generate the JWT for the OAuth Client Credential request.

    Required if using oAuthM2M and useCertificate is set to true.

    scope

    clientSecret The scope limits the operations and roles allowed in Databricks by the access token. See the OAuth 2.0 documentation for details about scopes.

    Optional

    httpPath

    string The HTTP path of your Databricks cluster or SQL warehouse.

    Required

    string The schema in the remote database.

    Required

    connectionStringOptions

    string Additional connection string options to be used when connecting to the remote database.

    Optional

    hostname

    string The hostname of the remote database instance.

    Required

    port

    number The port of the remote database instance.

    Optional

    authenticationMethod

    string The type of authentication method to use. Options include userPassword and okta.

    Required

    username

    string The username used to connect to the remote database.

    Required

    password

    string The password used to connect to the remote database.

    Required

    idpHost

    string The Okta identity provider host URL.

    Required if using okta.

    appID

    string The Okta application ID.

    Required if using okta.

    role

    string The Okta role.

    Required if using okta.

    string Additional connection string options to be used when connecting to the remote database.

    hostname

    string The hostname of the remote database instance.

    port

    number The port of the remote database instance.

    authenticationMethod

    string The type of authentication method to use. Options include userPassword, keyPair, oAuthClientCredentials, token, oAuthM2M, keyFile, auto and okta.

    username

    string The username used to connect to the remote database.

    password

    string The password used to connect to the remote database.

    sid

    string For Google BigQuery, the BigQuery project used to build the connection string.

    The
    MODIFY
    privilege is not required for materialized views registered as Immuta data sources, since
    MODIFY
    is not a supported privilege on that object type in
    .
    privilege on all current and future securables in the catalog or schema. The service principal also inherits
    MANAGE
    from the parent catalog for the purpose of applying row filters and column masks, but that privilege must be set directly on the parent catalog in order for grants to be fully applied.

    type

    string The type of data source: ingested (metadata will exist in Immuta) or queryable (metadata is dynamically queried).

    Yes

    name

    string The name of the data source. It must be unique within the Immuta tenant.

    Yes

    sqlTableName

    string A string that represents this data source's table in Immuta.

    Yes

    organization

    string The organization that owns the data source.

    Yes

    category

    string The category of the data source.

    No

    description

    string The description of the data source.

    No

    hasExamples

    boolean When true, the data source contains examples.

    No

    private

    boolean When false, the data source will be publicly available in the Immuta UI.

    Yes

    blobHandler

    array[object] A list of full URLs providing the locations of all blob store handlers to use with this data source.

    Yes

    blobHandlerType

    string Describes the type of underlying blob handler that will be used with this data source (e.g., MS SQL).

    Yes

    recordFormat

    string The data format of blobs in the data source, such as json, xml, html, or jpeg.

    id

    integer The handler ID.

    dataSourceId

    integer The ID of the data source.

    warnings

    string This message describes issues with the created data source, such as the data source being unhealthy.

    connectionString

    string The connection string used to connect the data source to Immuta.

    handlerId

    integer The ID of the handler.

    Yes

    skipCache

    boolean When true, will skip the handler cache when retrieving metadata.

    No

    body

    array[object] Metadata about the data source, including the data source ID, schema, database, and connection string.

    PUT

    /databricks/handler/{handlerId}

    Update the data source metadata associated with the provided handler ID. This endpoint does not perform partial updates, but will allow the dictionary to be omitted. In this case, it uses the current dictionary.

    PUT

    /databricks/bulk

    Update the data source metadata associated with the provided connection string.

    PUT

    /databricks/handler/{handlerId}/triggerHighCardinalityJob

    Recalculate the high cardinality column for the specified data source.

    handlerId

    integer The ID of the handler.

    Yes

    skipCache

    boolean When true, will skip the handler cache when retrieving metadata.

    No

    handler

    metadata Includes metadata about the handler, such as ssl, port, database, hostname, username, and password.

    Yes

    connectionString

    string The connection string used to connect to the data source.

    Yes

    id

    integer The ID of the handler.

    ca

    string The certificate authority.

    columns

    array[object] This is a Data Dictionary object, which provides metadata about the columns in the data source, including the name and data type of the column.

    handler

    metadata Includes metadata about the handler, such as ssl, port, database, hostname, username, and password.

    Yes

    connectionString

    string The connection string used to connect to the data sources.

    Yes

    bulkId

    string The ID of the bulk data source update.

    connectionString

    string The connection string shared by the data sources bulk updated.

    jobsCreated

    integer The number of jobs that ran to update the data sources; this number corresponds to the number of data sources updated.

    handlerId

    integer The ID of the handler.

    Yes

    the service principal from the integration configuration
    Azure Databricks Unity Catalog limitation
    Create a data source
    Get information about a data source
    Manage data sources

    Yes

    Databricks
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/databricks/handler
    {
      "handler": [{
        "metadata": {
          "ssl": true,
          "userFiles": [],
          "authenticationMethod": "Access Token",
          "password": "your-password",
          "port": 443,
          "hostname": "your-hostname.cloud.databricks.com",
          "database": "default",
          "httpPath": "sql/your/http/0/path",
          "schemaProjectName": "Default",
          "staleDataTolerance": 86400,
          "bodataSchemaName": "default",
          "bodataTableName": "applicant_data",
          "dataSourceName": "Default Applicant Data",
          "table": "applicant_data",
          "schema": "default"
        }
      }, {
        "metadata": {
          "ssl": true,
          "userFiles": [],
          "authenticationMethod": "Access Token",
          "password": "your-password",
          "port": 443,
          "hostname": "your-hostname.cloud.databricks.com",
          "database": "default",
          "httpPath": "sql/your/http/0/path",
          "schemaProjectName": "Default",
          "staleDataTolerance": 86400,
          "bodataSchemaName": "default",
          "bodataTableName": "cities",
          "dataSourceName": "Default Cities",
          "table": "cities",
          "schema": "default"
        }
      }],
      "dataSource": {
        "blobHandler": {
          "scheme": "https",
          "url": ""
        },
        "blobHandlerType": "Databricks",
        "recordFormat": "",
        "type": "queryable",
        "schemaEvolutionId": null,
        "columnEvolutionEnabled": true
      },
      "schemaEvolution": {
        "ownerProfileId": 2,
        "config": {
          "nameTemplate": {
            "nameFormat": "<Schema> <Tablename>",
            "tableFormat": "<tablename>",
            "sqlSchemaNameFormat": "<schema>",
            "schemaProjectNameFormat": "<Schema>"
          }
        },
        "schemas": []
      }
    }
    {
      "connectionString": "your-hostname.cloud.databricks.com:443/default"
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/databricks/handler/48
    {
      "dataSourceId": 49,
      "metadata": {
        "ssl": true,
        "port": 443,
        "paths": ["/user/hive/warehouse/cities"],
        "query": null,
        "table": "cities",
        "schema": "default",
        "scheme": "dbfs",
        "database": "default",
        "hostname": "your-hostname.cloud.databricks.com",
        "httpPath": "sql/your/http/0/path",
        "pathUris": ["dbfs:/user/hive/warehouse/cities"],
        "ephemeral": true,
        "eventTime": null,
        "userFiles": [],
        "clusterName": null,
        "dataSourceName": "Default Cities",
        "bodataTableName": "cities",
        "metastoreTables": ["default.cities"],
        "bodataSchemaName": "default",
        "columnsNormalized": false,
        "schemaProjectName": "Default",
        "staleDataTolerance": 86400,
        "authenticationMethod": "Access Token"
      },
      "type": "queryable",
      "connectionString": "your-hostname.cloud.databricks.com:443/default",
      "id": 48,
      "createdAt": "2021-10-06T17:53:09.640Z",
      "updatedAt": "2021-10-06T17:53:09.882Z",
      "dbms": {
        "name": "databricks"
      }
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/databricks/handler/48
    {
      "handler": {
        "policyHandler": null,
        "dataSourceId": 49,
        "metadata": {
          "ssl": true,
          "port": 443,
          "paths": ["/user/hive/warehouse/cities"],
          "table": "cities",
          "schema": "default",
          "scheme": "dbfs",
          "database": "default",
          "hostname": "your-hostname.cloud.databricks.com",
          "httpPath": "sql/your/http/0/path",
          "pathUris": ["dbfs:/user/hive/warehouse/cities"],
          "ephemeral": true,
          "eventTime": null,
          "userFiles": [],
          "clusterName": null,
          "dataSourceName": "Cities",
          "bodataTableName": "cities",
          "metastoreTables": ["default.cities"],
          "bodataSchemaName": "default",
          "columnsNormalized": false,
          "schemaProjectName": "Default",
          "staleDataTolerance": 86400,
          "authenticationMethod": "Access Token",
          "columns": [{
            "name": "OBJECTID",
            "dataType": "bigint",
            "remoteType": "bigint",
            "nullable": true
          }, {
            "name": "URBID",
            "dataType": "bigint",
            "remoteType": "bigint",
            "nullable": true
          }, {
            "name": "LIGHTDCW",
            "dataType": "bigint",
            "remoteType": "bigint",
            "nullable": true
          }, {
            "name": "ES90POP",
            "dataType": "double precision",
            "remoteType": "double",
            "nullable": true
          }, {
            "name": "ES95POP",
            "dataType": "double precision",
            "remoteType": "double",
            "nullable": true
          }, {
            "name": "ES00POP",
            "dataType": "double precision",
            "remoteType": "double",
            "nullable": true
          }, {
            "name": "PCOUNT",
            "dataType": "bigint",
            "remoteType": "bigint",
            "nullable": true
          }, {
            "name": "SCHNM",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "NAME",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "SQKM_FINAL",
            "dataType": "double precision",
            "remoteType": "double",
            "nullable": true
          }, {
            "name": "ISO3",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "ISOURBID",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "REMOVED_PO",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "ADDED_POIN",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "YEAR_V1_01",
            "dataType": "double precision",
            "remoteType": "double",
            "nullable": true
          }, {
            "name": "POP_V1_01",
            "dataType": "double precision",
            "remoteType": "double",
            "nullable": true
          }, {
            "name": "Unsdcode",
            "dataType": "bigint",
            "remoteType": "bigint",
            "nullable": true
          }, {
            "name": "Countryeng",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "Continent",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "geometry",
            "dataType": "struct",
            "remoteType": "struct<__geom__:bigint,_is_empty:boolean,_ndim:bigint>",
            "nullable": true,
            "children": [{
              "name": "__geom__",
              "dataType": "bigint"
            }, {
              "name": "_is_empty",
              "dataType": "boolean"
            }, {
              "name": "_ndim",
              "dataType": "bigint"
            }]
          }, {
            "name": "wkt",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }],
          "password": "your-password"
        },
        "type": "queryable",
        "connectionString": "dbc-d3fe40ca-b4fb.cloud.databricks.com:443/default",
        "id": 48,
        "createdAt": "2021-10-06T17:53:09.640Z",
        "updatedAt": "2021-10-06T17:53:09.882Z",
        "dbms": {
          "name": "databricks"
        }
      }
    }
    {
      "id": 48,
      "ca": ["-----BEGIN CERTIFICATE-----\ncertificatedata\n-----END CERTIFICATE-----"],
      "metadata": {
        "columns": [{
          "name": "OBJECTID",
          "dataType": "bigint",
          "remoteType": "bigint",
          "nullable": true
        }, {
          "name": "URBID",
          "dataType": "bigint",
          "remoteType": "bigint",
          "nullable": true
        }, {
          "name": "LIGHTDCW",
          "dataType": "bigint",
          "remoteType": "bigint",
          "nullable": true
        }, {
          "name": "ES90POP",
          "dataType": "double precision",
          "remoteType": "double",
          "nullable": true
        }, {
          "name": "ES95POP",
          "dataType": "double precision",
          "remoteType": "double",
          "nullable": true
        }, {
          "name": "ES00POP",
          "dataType": "double precision",
          "remoteType": "double",
          "nullable": true
        }, {
          "name": "PCOUNT",
          "dataType": "bigint",
          "remoteType": "bigint",
          "nullable": true
        }, {
          "name": "SCHNM",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "NAME",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "SQKM_FINAL",
          "dataType": "double precision",
          "remoteType": "double",
          "nullable": true
        }, {
          "name": "ISO3",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "ISOURBID",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "REMOVED_PO",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "ADDED_POIN",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "YEAR_V1_01",
          "dataType": "double precision",
          "remoteType": "double",
          "nullable": true
        }, {
          "name": "POP_V1_01",
          "dataType": "double precision",
          "remoteType": "double",
          "nullable": true
        }, {
          "name": "Unsdcode",
          "dataType": "bigint",
          "remoteType": "bigint",
          "nullable": true
        }, {
          "name": "Countryeng",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "Continent",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "geometry",
          "dataType": "struct",
          "remoteType": "struct<__geom__:bigint,_is_empty:boolean,_ndim:bigint>",
          "nullable": true,
          "children": [{
            "name": "__geom__",
            "dataType": "bigint"
          }, {
            "name": "_is_empty",
            "dataType": "boolean"
          }, {
            "name": "_ndim",
            "dataType": "bigint"
          }]
        }, {
          "name": "wkt",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }]
      }
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/databricks/bulk
    {
      "handler": {
        "metadata": {
          "ssl": true,
          "port": 443,
          "database": "default",
          "hostname": "your-hostname.cloud.databricks.com",
          "userFiles": [{
            "keyName": "test",
            "filename": "6dc06a3310b9ba33c543e483d1e745b3ac9bc648.json",
            "userFilename": "certificate.json"
          }],
          "authenticationMethod": "Access Token",
          "password": "your-password",
          "httpPath": "sql/your/http/0/path"
        }
      },
      "connectionString": "your-hostname.cloud.databricks.com:443/default/default"
    }
    {
      "bulkId": "bulk_ds_update_9ae5bfd85a3a47a8b454c618043e2aa3",
      "connectionString": "your-hostname.cloud.databricks.com:443/default",
      "jobsCreated": 2
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/databricks/handler/47/triggerHighCardinalityJob
    f6ac1ad0-26d0-11ec-8078-d36bbf5b90fb
    Enable AWS IAM Identity Center (IDC) (recommended)
    :
    is the best approach for user provisioning because it treats users as users, not users as roles. Consequently, access controls are enforced for the querying user, nothing more. This approach eliminates over-provisioning and permits granular access control. Furthermore, IDC uses trusted identity propagation, meaning AWS propagates a user's identity wherever that user may operate within the AWS ecosystem. As a result, a user's identity always remains known and consistent as they navigate across AWS services, which is a key requirement for organizations to properly govern that user. Enabling IDC does not impact any existing access controls; it is additive. Immuta will manage the GRANTs for you using IDC if it is enabled and configured in Immuta. See the
    for instructions on mapping users from AWS IDC to user accounts in Immuta.
    have ownership of the buckets Immuta will enforce policies on
  • have the permissions to perform the following actions to create locations and issue grants:

    • accessgrantslocation resource:

      • s3:CreateAccessGrant

      • s3:DeleteAccessGrantsLocation

      • s3:GetAccessGrantsLocation

      • s3:UpdateAccessGrantsLocation

    • accessgrantsinstance resource:

      • s3:CreateAccessGrantsInstance

      • s3:CreateAccessGrantsLocation

      • s3:DeleteAccessGrantsInstance

    • accessgrant resource:

      • s3:DeleteAccessGrant

      • s3:GetAccessGrant

    • bucket resource: s3:ListBucket

    • role resource:

      • iam:GetRole

      • iam:PassRole

    • all resources: s3:ListAccessGrantsInstances

  • sts:SetSourceIdentity

    s3:GetObjectVersionAcl
  • s3:ListMultipartUploadParts

  • s3:PutObject

  • s3:PutObjectAcl

  • s3:PutObjectVersionAcl

  • s3:DeleteObject

  • s3:DeleteObjectVersion

  • s3:AbortMultipartUpload

  • s3:ListBucket

  • s3:ListAllMyBuckets

  • arn:aws:s3:us-east-2:6********499:access-grants/default/newlocation2

    <aws_account>: Your AWS account ID.

  • <identity_store_id>: The globally unique identifier for the identity store (IdentityStoreId) that is connected to the Identity Center instance. This value is generated when a new identity store is created.

  • name is the name for the integration that is unique across all Amazon S3 integrations configured in Immuta.

  • awsAccountId is the ID of your AWS account.

  • awsRegion is the account's AWS region (such as us-east1).

  • awsLocationRole is the AWS IAM role ARN assigned to the base access grants location. This is the role the AWS Access Grants service assumes to vend credentials to the grantee.

  • awsLocationPath is the base S3 location prefix that Immuta will use for this connection when registering S3 data sources. This path must be unique across all S3 integrations configured in Immuta.

  • awsAccessKeyId is the AWS access key ID of the AWS account configuring the integration.

  • awsSecretAccessKey is the AWS secret access key of the AWS account configuring the integration.

  • This request configures the integration using the automatic authentication method, which searches and obtains credentials using the AWS SDK's default credential provider chain. This method requires a configured IAM role for a service account and is only supported if you're using a self-managed deployment of Immuta. Contact your Immuta representative to customize your deployment and set up an IAM role for a service account that can give Immuta the credentials to set up the integration. Your Immuta representative will

    1. Provide the AWS account to add to your trust policy.

    2. Update the Immuta AWS configuration to allow Immuta to assume the role of your service principal.

    Then, complete the steps below.

    1. Copy the request example. The example uses JSON format, but the request also accepts YAML.

    2. Replace the Immuta URL and with your own.

    3. Change the config values to your own, where

      • name is the name for the integration that is unique across all Amazon S3 integrations configured in Immuta.

      • awsAccountId is the ID of your AWS account.

      • awsRegion is the account's AWS region (such as us-east1

    editable values:
    • name is the name for the integration that is unique across all Amazon S3 integrations configured in Immuta.

    • authenticationType is the method used to authenticate with AWS when configuring the S3 integration (accepted values are auto or accessKey).

    • awsAccessKeyId is the AWS access key ID for the AWS account editing the integration.

    • awsSecretAccessKey is the AWS secret access key for the AWS account editing the integration.

  • required values from existing configuration:

    • awsRoleToAssume is the optional AWS IAM role ARN Immuta assumes when interacting with AWS.

    • awsAccountId is the ID of your AWS account.

    • awsRegion is the account's AWS region (such as us-east1).

    • awsLocationRole is the AWS IAM role ARN assigned to the base access grants location. This is the role the AWS Access Grants service assumes to vend credentials to the grantee.

    • awsLocationPath is the base S3 location that Immuta will use for this connection when registering S3 data sources. This path must be unique across all S3 integrations configured in Immuta.

  • configure an Amazon S3 integration
    get an Amazon S3 integration
    get all integrations
    update an Amazon S3 integration
    delete an Amazon S3 integration
    Write policies private preview enabled for your account
    Follow AWS documentation to create an Access Grants instance using the S3 console, AWS CLI, AWS SDKs, or the REST API
    Follow the instructions at the top of the "Register a location" page in AWS documentation to create an AWS IAM role and edit the trust policy to give the S3 Access Grants service principal access to this role in the resource policy file
    Follow the instructions at the top of the "Register a location" page in AWS documentation to create an IAM policy
    Opt to create an AWS IAM role
    permissions section
    your IAM Identity Center instance with your S3 Access Grants instance
    IAM Identity Center API reference documentation
    ARN of the instance of IAM Identity Center (InstanceArn)
    ARN of the S3 Access Grants instance (ApplicationArn)
    API key
    config object description
    response schema reference
    HTTP status codes and error messages
    API key
    GET /integrations endpoint
    response schema reference
    HTTP status codes and error messages
    API key
    response schema reference
    HTTP status codes and error messages
    config object description
    API key
    response schema reference
    HTTP status codes and error messages
    API key
    response schema reference
    HTTP status codes and error messages
    IDC
    Amazon S3 integration reference guide
    Trino workflow
    1. Create a data source.

    2. Get information about a data source.

    3. Manage data sources.

    Create a data source

    POST /trino/handler

    Save the provided connection information as a data source.

    Payload parameters

    Attribute
    Description
    Required

    private

    boolean When false, the data source will be publicly available in the Immuta UI.

    Yes

    blobHandler

    array[object] The parameters for this array include scheme ("https") and url (an empty string).

    Yes

    blobHandlerType

    string Describes the type of underlying blob handler that will be used with this data source (e.g., MS SQL).

    Yes

    recordFormat

    string The data format of blobs in the data source, such as json, xml, html, or jpeg.

    Response parameters

    Attribute
    Description

    id

    integer The handler ID.

    dataSourceId

    integer The ID of the data source.

    warnings

    string This message describes issues with the created data source, such as the data source being unhealthy.

    connectionString

    string The connection string used to connect the data source to Immuta.

    Request example

    This request creates a Trino data source.

    Payload example

    Response example

    Get information about a data source

    GET /trino/handler/{handlerId}

    Get the handler metadata associated with the provided handler ID.

    Query parameters

    Attribute
    Description
    Required

    handlerId

    integer The ID of the handler.

    Yes

    skipCache

    boolean When true, will skip the handler cache when retrieving metadata.

    No

    Response parameters

    Attribute
    Description

    body

    array[object] Metadata about the data source, including the data source ID, schema, database, and connection string.

    Request example

    This request returns metadata for the handler with the ID 1.

    Response example

    Manage data sources

    Method
    Path
    Purpose

    PUT

    /trino/handler/{handlerId}

    . This endpoint does not perform partial updates, but will allow the dictionary to be omitted. In this case, it uses the current dictionary.

    PUT

    /trino/bulk

    .

    PUT

    /trino/handler/{handlerId}/triggerHighCardinalityJob

    .

    PUT

    /trino/handler/{handlerId}/refreshNativeViewJob

    Update a specific data source

    PUT /trino/handler/{handlerId}

    Update the data source metadata associated with the provided handler ID. This endpoint does not perform partial updates, but will allow the dictionary to be omitted. In this case, it uses the current dictionary.

    Query parameters

    Attribute
    Description
    Required

    handlerId

    integer The ID of the handler.

    Yes

    skipCache

    boolean When true, will skip the handler cache when retrieving metadata.

    No

    Payload parameters

    Attribute
    Description
    Required

    handler

    metadata Includes metadata about the handler, such as ssl, port, database, hostname, username, and password.

    Yes

    connectionString

    string The connection string used to connect to the data source.

    Yes

    Response parameters

    Attribute
    Description

    id

    integer The ID of the handler.

    ca

    string The certificate authority.

    columns

    array[object] This is a Data Dictionary object, which provides metadata about the columns in the data source, including the name and data type of the column.

    Request example

    This request updates the data source name to Marketing Data for the data source with the handler ID 1.

    Payload example

    Response example

    Update multiple data sources

    PUT /trino/bulk

    Update the data source metadata associated with the provided connection string.

    Payload parameters

    Attribute
    Description
    Required

    handler

    metadata Includes metadata about the handler, such as ssl, port, database, hostname, username, and password.

    Yes

    connectionString

    string The connection string used to connect to the data sources.

    Yes

    Response parameters

    Attribute
    Description

    bulkId

    string The ID of the bulk data source update.

    connectionString

    string The connection string shared by the data sources bulk updated.

    jobsCreated

    integer The number of jobs that ran to update the data sources; this number corresponds to the number of data sources updated.

    Request example

    This request updates the metadata for all data sources with the connection string specified in example-payload.json.

    Payload example

    The payload below adds a certificate (certificate.json) to the data sources with the provided connection.

    Response example

    Recalculate the high cardinality column for a data source

    PUT /trino/handler/{handlerId}/triggerHighCardinalityJob

    Recalculate the high cardinality column for the specified data source.

    Query parameters

    Attribute
    Description
    Required

    handlerId

    integer The ID of the handler.

    Yes

    Response parameters

    The response returns a string of characters that identify the high cardinality job run.

    Request example

    This request re-runs the job that calculates the high cardinality column for the data source with the handler ID 30.

    Response example

    Refresh a view

    PUT /trino/handler/{handlerId}/refreshNativeViewJob

    Refresh the view of a data source.

    Query parameters

    Attribute
    Description
    Required

    handlerId

    integer The ID of the handler.

    Yes

    Response parameters

    The response returns a string of characters that identifies the refresh view job run.

    Request example

    This request refreshes the view for the data source with the handler ID 7.

    Response example

    curl -X 'POST' \
        'https://<your-immuta-url.com>/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: <your-api-key>' \
        -d '{
        "type": "Native S3",
        "autoBootstrap": false,
        "config": {
          "name": "<name-of-your-integration>",
          "awsAccountId": "<your-aws-account-id>",
          "awsRegion": "<your-aws-region>",
          "awsLocationRole": "<arn:aws:iam::your-location-role-arn:role/access-grants-instance-role>",
          "awsLocationPath": "<your-s3-location-path>",
          "authenticationType": "auto"
        }
        }'
    {
      "Version": "2012-10-17",
        "Statement": [
        {
          "Sid": "Stmt1234567891011",
          "Effect": "Allow",
          "Principal": {
            "Service":"access-grants.s3.amazonaws.com"
          },
          "Action": [
            "sts:AssumeRole", 
            "sts:SetSourceIdentity"
          ]
        }
      ]
    }           
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "ObjectLevelReadPermissions",
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:GetObjectVersion",
                    "s3:GetObjectAcl",
                    "s3:GetObjectVersionAcl",
                    "s3:ListMultipartUploadParts"
                ],
                "Resource": [
                    <bucket arn>
                ]
            },
            {
                "Sid": "ObjectLevelWritePermissions",
                "Effect": "Allow",
                "Action": [
                    "s3:PutObject",
                    "s3:PutObjectAcl",
                    "s3:PutObjectVersionAcl",
                    "s3:DeleteObject",
                    "s3:DeleteObjectVersion",
                    "s3:AbortMultipartUpload"
                ],
                "Resource": [
                    <bucket arn>
                ]
            },
            {
                "Sid": "BucketLevelReadPermissions",
                "Effect": "Allow",
                "Action": [
                    "s3:ListAllMyBuckets",
                    "s3:ListBucket"
                ],
                "Resource": [
                    <bucket arn>
                ]
            }
        ]
    }
    curl -X 'POST' \
        'https://<your-immuta-url.com>/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: <your-api-key>' \
        -d '{
        "type": "Native S3",
        "autoBootstrap": false,
        "config": {
          "name": "<name-of-your-integration>",
          "awsAccountId": "<your-aws-account-id>",
          "awsRegion": "<your-aws-region>",
          "awsLocationRole": "<arn:aws:iam::your-location-role-arn:role/access-grants-instance-role>",
          "awsLocationPath": "<your-s3-location-path>",
          "authenticationType": "accessKey",
          "awsAccessKeyId": "<your-access-key-id>",
          "awsSecretAccessKey": "<your-secret-access-key>"
        }
        }'
    {
      "id": "123456789",
      "status": "creating",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "There is no existing integration matching this configuration",
          "status": "passed"
        },
        {
          "name": "The provided integration name is unique across Immuta S3 integrations",
          "status": "passed"
        },
        {
          "name": "The provided access grants location role is a valid ARN format",
          "status": "passed"
        },
        {
          "name": "The provided AWS credentials allow fetching the caller's identity via the AWS STS API",
          "status": "passed"
        },
        {
          "name": "An AWS Access Grants instance is configured in the provided AWS account and region",
          "status": "passed"
        },
        {
          "name": "The provided S3 path exists and Immuta can list prefixes",
          "status": "passed"
        },
        {
          "name": "An AWS Access Grants location does not yet exist for the provided path",
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Access Grants location already exists on provided path."
    }
    curl -X 'GET' \
        'https://<your-immuta-url.com>/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: <your-api-key>'
    {
      "id": "123456789",
      "status": "enabled",
      "validationResults": {
        "status": "passed",
        "validationTests": [
          {
            "name": "There is no existing integration matching this configuration",
            "status": "passed"
          },
          {
            "name": "The provided integration name is unique across Immuta S3 integrations",
            "status": "passed"
          },
          {
            "name": "The provided access grants location role is a valid ARN format",
            "status": "passed"
          },
          {
            "name": "The provided AWS credentials allow fetching the caller's identity via the AWS STS API",
            "status": "passed"
          },
          {
            "name": "An AWS Access Grants instance is configured in the provided AWS account and region",
            "status": "passed"
          },
          {
            "name": "The provided S3 path exists and Immuta can list prefixes",
            "status": "passed"
          },
          {
            "name": "An AWS Access Grants location does not yet exist for the provided path",
            "status": "passed"
          }
        ]
      },
      "type": "Native S3",
      "autoBootstrap": false,
      "config": {
        "port": 443,
        "name": "S3 integration",
        "awsAccountId": "123456789",
        "awsRegion": "us-east-1",
        "awsLocationRole": "arn:aws:iam::123456789:role/access-grants-instance-role",
        "awsLocationPath": "s3://",
        "authenticationType": "accessKey",
        "awsAccessKeyId": "123456789",
        "awsSecretAccessKey": "123456789"
      }
      }
    curl -X 'GET' \
        'https://<your-immuta-url.com>/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: <your-api-key>'
    [
      {
        "id": "1",
        "status": "enabled",
        "validationResults": {
          "status": "passed",
          "validationTests": [
          {
            "name": "Initial Validation: Basic Connection Test",
            "status": "passed"
          },
          {
            "name": "Initial Validation: Default Warehouse Access Test",
            "status": "passed",
            "result": []
          },
          {
            "name": "Initial Validation: Validate access to Privileged Role",
            "status": "passed",
            "result": []
          },
          {
            "name": "Validate Automatic: Database Does Not Exist",
            "status": "passed"
          },
          {
            "name": "Validate Automatic: Impersonation Role Does Not Exist",
            "status": "skipped"
          },
          {
            "name": "Validate Automatic Bootstrap User Grants",
            "status": "passed"
          }
        ] },
        "type": "Snowflake",
        "autoBootstrap": true,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "port": 443,
          "audit": {
            "enabled": false
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "lineage": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "<REDACTED>",
          "password": "<REDACTED>",
          "role": "ACCOUNTADMIN"
        }
        },
      {
        "id": "123456789",
        "status": "enabled",
        "validationResults": {
          "status": "passed",
          "validationTests": [
            {
              "name": "There is no existing integration matching this configuration",
              "status": "passed"
            },
            {
              "name": "The provided integration name is unique across Immuta S3 integrations",
              "status": "passed"
            },
            {
              "name": "The provided access grants location role is a valid ARN format",
              "status": "passed"
            },
            {
              "name": "The provided AWS credentials allow fetching the caller's identity via the AWS STS API",
              "status": "passed"
            },
            {
              "name": "An AWS Access Grants instance is configured in the provided AWS account and region",
              "status": "passed"
            },
            {
              "name": "The provided S3 path exists and Immuta can list prefixes",
              "status": "passed"
            },
            {
              "name": "An AWS Access Grants location does not yet exist for the provided path",
              "status": "passed"
            }
          ] },
          "type": "Native S3",
          "autoBootstrap": false,
          "config": {
            "port": 443,
            "name": "S3 integration",
            "awsAccountId": "123456789",
            "awsRegion": "us-east-1",
            "awsLocationRole": "arn:aws:iam::123456789:role/access-grants-instance-role",
            "awsLocationPath": "s3://",
            "authenticationType": "accessKey",
            "awsAccessKeyId": "123456789",
            "awsSecretAccessKey": "123456789"
          }
      }
    ]
    curl -X 'PUT' \
        'https://<your-immuta-url.com>/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: <your-api-key>' \
        -d '{
        "type": "Native S3",
        "autoBootstrap": false,
        "config": {
          "name": "<your-edited-integration-name>",
          "awsAccountId": "<your-aws-account-id>",
          "awsRegion": "<your-aws-region>",
          "awsLocationRole": "<arn:aws:iam::your-location-role-arn:role/access-grants-instance-role>",
          "awsLocationPath": "<your-s3-location-path>",
          "authenticationType": "<accessKey-or-auto>",
          "awsAccessKeyId": "<your-aws-access-key-id>",
          "awsSecretAccessKey": "<your-secret-access-key>"
        }
        }'
    {
      "id": "123456789",
      "status": "editing",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "There is no existing integration matching this configuration",
          "status": "passed"
        },
        {
          "name": "The provided integration name is unique across Immuta S3 integrations",
          "status": "passed"
        },
        {
          "name": "The provided access grants location role is a valid ARN format",
          "status": "passed"
        },
        {
          "name": "The provided AWS credentials allow fetching the caller's identity via the AWS STS API",
          "status": "passed"
        },
        {
          "name": "An AWS Access Grants instance is configured in the provided AWS account and region",
          "status": "passed"
        },
        {
          "name": "The provided S3 path exists and Immuta can list prefixes",
          "status": "passed"
        },
        {
          "name": "An AWS Access Grants location does not yet exist for the provided path",
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Unable to edit integration with ID 123456789 in current state editing."
    }
    curl -X 'DELETE' \
        'https://<your-immuta-url.com>/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: <your-api-key>'
    {
      "id": "123456789",
      "status": "deleting",
      "validationResults": {
        "status": "passed",
        "validationTests": [
          {
            "name": "The provided access grants location role is a valid ARN format",
            "status": "passed"
          },
          {
            "name": "The provided AWS credentials allow fetching the caller's identity via the AWS STS API",
            "status": "passed"
          },
          {
            "name": "An AWS Access Grants instance is configured in the provided AWS account and region",
            "status": "passed"
          },
          {
            "name": "The provided S3 path exists and Immuta can list prefixes",
            "status": "passed"
          }
        ]
      }
    }
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "RolePermissions",
                "Effect": "Allow",
                "Action": [
                    "iam:GetRole",
                    "iam:PassRole"
                ],
                "Resource": "<role_arn>"
            },
            {
                "Sid": "AccessGrants",
                "Effect": "Allow",
                "Action": [
                    "s3:CreateAccessGrant",
                    "s3:DeleteAccessGrantsLocation",
                    "s3:GetAccessGrantsLocation",
                    "s3:CreateAccessGrantsLocation",
                    "s3:GetAccessGrantsInstance",
                    "s3:GetAccessGrantsInstanceForPrefix",
                    "s3:GetAccessGrantsInstanceResourcePolicy",
                    "s3:ListAccessGrants",
                    "s3:ListAccessGrantsLocations",
                    "s3:ListAccessGrantsInstances",
                    "s3:DeleteAccessGrant",
                    "s3:GetAccessGrant"
                ],
                "Resource": [
                    "<access_grants_instance_arn>"
                ]
            }
        ]
    }
    {
      "Sid": "sso",
      "Effect": "Allow",
      "Action": [
        "sso:DescribeInstance",
        "sso:DescribeApplication",
        "sso-directory:DescribeUsers"
      ],
      "Resource": [
        "<iam_identity_center_instance_arn>",
        "<iam_identity_center_application_arn_for_s3_access_grants>",
        "arn:aws:identitystore:::user/*",
        "arn:aws:identitystore::<aws_account>:identitystore/<identity_store_id>"
      ]
    }, {
      "Sid": "idc",
      "Effect": "Allow",
      "Action": [
        "identitystore:DescribeUser",
        "identitystore:DescribeGroup"
      ],
      "Resource": [
        "<iam_identity_center_instance_arn>",
        "<iam_identity_center_application_arn_for_s3_access_grants>",
        "arn:aws:identitystore:::user/*",
        "arn:aws:identitystore::<aws_account>:identitystore/<identity_store_id>"
      ]
    }
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/trino/handler
    {
      "handler": {
        "metadata": {
          "staleDataTolerance": 86400,
          "schemaProjectName": "Public",
          "bodataSchemaName": "public",
          "columns": [{
            "name": "c_customer_sk",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_customer_id",
            "dataType": "text",
            "remoteType": "char(16)",
            "nullable": true
          }, {
            "name": "c_current_cdemo_sk",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_current_hdemo_sk",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_current_addr_sk",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_first_shipto_date_sk",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_first_sales_date_sk",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_salutation",
            "dataType": "text",
            "remoteType": "varchar(10)",
            "nullable": true
          }, {
            "name": "c_first_name",
            "dataType": "text",
            "remoteType": "varchar(20)",
            "nullable": true
          }, {
            "name": "c_last_name",
            "dataType": "text",
            "remoteType": "varchar(30)",
            "nullable": true
          }, {
            "name": "c_preferred_cust_flag",
            "dataType": "text",
            "remoteType": "char(1)",
            "nullable": true
          }, {
            "name": "c_birth_day",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_birth_month",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_birth_year",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_birth_country",
            "dataType": "text",
            "remoteType": "varchar(20)",
            "nullable": true
          }, {
            "name": "c_login",
            "dataType": "text",
            "remoteType": "char(13)",
            "nullable": true
          }, {
            "name": "c_email_address",
            "dataType": "text",
            "remoteType": "varchar(50)",
            "nullable": true
          }, {
            "name": "c_last_review_date",
            "dataType": "text",
            "remoteType": "varchar(10)",
            "nullable": true
          }],
          "hostname": "example-trino.host.io",
          "port": 8080,
          "ssl": false,
          "authenticationMethod": "No Authentication",
          "connectionStringOptions": "",
          "userFiles": [],
          "database": "public",
          "sid": "postgres",
          "table": "customer",
          "schema": "public",
          "bodataTableName": "customer",
          "dataSourceName": "Customer"
        }
      },
      "dataSource": {
        "blobHandler": {
          "scheme": "https",
          "url": ""
        },
        "blobHandlerType": "Trino",
        "recordFormat": "",
        "type": "queryable",
        "schemaEvolutionId": null,
        "columnEvolutionEnabled": true,
        "name": "Customer",
        "sqlTableName": "customer"
      },
      "schemaEvolution": {
        "ownerProfileId": 1,
        "config": {
          "nameTemplate": {
            "nameFormat": "<Tablename>",
            "tableFormat": "<tablename>",
            "sqlSchemaNameFormat": "<schema>",
            "schemaProjectNameFormat": "<Schema>"
          }
        },
        "schemas": []
      }
    }
    {
      "id": 1,
      "dataSourceId": 1,
      "dataSource": {
        "blobHandler": {
          "accessKey": "REDACTED",
          "url": "https://REDACTED/trino/handler/1",
          "ca": ["-----BEGIN CERTIFICATE-----\nyourdXRhIENcertificate\n-----END CERTIFICATE-----"],
          "manualDictionary": false
        },
        "blobHandlerType": "Trino",
        "recordFormat": "Not Provided",
        "type": "queryable",
        "schemaEvolutionId": 1,
        "columnEvolutionEnabled": true,
        "name": "Customer",
        "sqlTableName": "customer",
        "sqlSchemaName": "public",
        "workspace": null,
        "rowCount": 0,
        "seeded": false,
        "owner": {},
        "documentation": "# Customer",
        "statsExpiration": "2022-07-19T18:55:21.300Z",
        "recordCount": 0,
        "createdBy": 1,
        "policyHandler": null,
        "subscriptionType": "manual",
        "id": 1,
        "description": null,
        "deleted": false,
        "policyHandlerType": "None",
        "subscriptionPolicy": null,
        "globalPolicies": null,
        "status": null,
        "statusInfo": null,
        "catalogMetadata": null,
        "createdAt": "2022-07-19T18:55:21.302Z",
        "updatedAt": "2022-07-19T18:55:21.302Z",
        "tags": []
      },
      "warnings": []
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/trino/handler/1
    {
      "dataSourceId": 1,
      "metadata": {
        "sid": "postgres",
        "ssl": false,
        "port": 8080,
        "query": null,
        "table": "customer",
        "schema": "public",
        "database": "public",
        "hostname": "trino-example-database.io",
        "ephemeral": true,
        "eventTime": null,
        "userFiles": [],
        "dataSourceName": "Customer",
        "bodataTableName": "customer",
        "highCardinality": "c_customer_sk",
        "bodataSchemaName": "public",
        "columnsNormalized": false,
        "schemaProjectName": "Public",
        "staleDataTolerance": 0,
        "authenticationMethod": "No Authentication",
        "connectionStringOptions": null
      },
      "type": "queryable",
      "connectionString": "trino-example-database.io:8080/postgres/public",
      "id": 1,
      "createdAt": "2022-07-19T18:55:21.220Z",
      "updatedAt": "2022-07-19T18:55:23.466Z",
      "dbms": {
        "name": "trino"
      }
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/trino/handler/1
    {
      "handler": {
        "policyHandler": null,
        "dataSourceId": 1,
        "metadata": {
          "sid": "postgres",
          "ssl": false,
          "port": 8080,
          "query": null,
          "table": "customer",
          "schema": "public",
          "database": "public",
          "hostname": "trino-example.io",
          "ephemeral": true,
          "eventTime": null,
          "userFiles": [],
          "dataSourceName": "Marketing Data",
          "bodataTableName": "customer",
          "highCardinality": "c_customer_sk",
          "bodataSchemaName": "public",
          "columnsNormalized": false,
          "schemaProjectName": "Public",
          "staleDataTolerance": 0,
          "authenticationMethod": "No Authentication",
          "connectionStringOptions": "",
          "columns": [{
            "name": "c_customer_sk",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_customer_id",
            "dataType": "text",
            "remoteType": "char(16)",
            "nullable": true
          }, {
            "name": "c_current_cdemo_sk",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_current_hdemo_sk",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_current_addr_sk",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_first_shipto_date_sk",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_first_sales_date_sk",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_salutation",
            "dataType": "text",
            "remoteType": "varchar(10)",
            "nullable": true
          }, {
            "name": "c_first_name",
            "dataType": "text",
            "remoteType": "varchar(20)",
            "nullable": true
          }, {
            "name": "c_last_name",
            "dataType": "text",
            "remoteType": "varchar(30)",
            "nullable": true
          }, {
            "name": "c_preferred_cust_flag",
            "dataType": "text",
            "remoteType": "char(1)",
            "nullable": true
          }, {
            "name": "c_birth_day",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_birth_month",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_birth_year",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "c_birth_country",
            "dataType": "text",
            "remoteType": "varchar(20)",
            "nullable": true
          }, {
            "name": "c_login",
            "dataType": "text",
            "remoteType": "char(13)",
            "nullable": true
          }, {
            "name": "c_email_address",
            "dataType": "text",
            "remoteType": "varchar(50)",
            "nullable": true
          }, {
            "name": "c_last_review_date",
            "dataType": "text",
            "remoteType": "varchar(10)",
            "nullable": true
          }]
        },
        "type": "queryable",
        "connectionString": "trino-example.io:8080/postgres/public",
        "id": 1,
        "createdAt": "2022-07-19T18:55:21.220Z",
        "updatedAt": "2022-07-19T18:55:23.466Z",
        "dbms": {
          "name": "trino"
        }
      }
    }
    {
      "id": 1,
      "ca": ["-----BEGIN CERTIFICATE-----\nMIIuyourcertificate\n-----END CERTIFICATE-----"],
      "metadata": {
        "columns": [{
          "name": "c_customer_sk",
          "dataType": "integer",
          "remoteType": "integer",
          "nullable": true
        }, {
          "name": "c_customer_id",
          "dataType": "text",
          "remoteType": "char(16)",
          "nullable": true
        }, {
          "name": "c_current_cdemo_sk",
          "dataType": "integer",
          "remoteType": "integer",
          "nullable": true
        }, {
          "name": "c_current_hdemo_sk",
          "dataType": "integer",
          "remoteType": "integer",
          "nullable": true
        }, {
          "name": "c_current_addr_sk",
          "dataType": "integer",
          "remoteType": "integer",
          "nullable": true
        }, {
          "name": "c_first_shipto_date_sk",
          "dataType": "integer",
          "remoteType": "integer",
          "nullable": true
        }, {
          "name": "c_first_sales_date_sk",
          "dataType": "integer",
          "remoteType": "integer",
          "nullable": true
        }, {
          "name": "c_salutation",
          "dataType": "text",
          "remoteType": "varchar(10)",
          "nullable": true
        }, {
          "name": "c_first_name",
          "dataType": "text",
          "remoteType": "varchar(20)",
          "nullable": true
        }, {
          "name": "c_last_name",
          "dataType": "text",
          "remoteType": "varchar(30)",
          "nullable": true
        }, {
          "name": "c_preferred_cust_flag",
          "dataType": "text",
          "remoteType": "char(1)",
          "nullable": true
        }, {
          "name": "c_birth_day",
          "dataType": "integer",
          "remoteType": "integer",
          "nullable": true
        }, {
          "name": "c_birth_month",
          "dataType": "integer",
          "remoteType": "integer",
          "nullable": true
        }, {
          "name": "c_birth_year",
          "dataType": "integer",
          "remoteType": "integer",
          "nullable": true
        }, {
          "name": "c_birth_country",
          "dataType": "text",
          "remoteType": "varchar(20)",
          "nullable": true
        }, {
          "name": "c_login",
          "dataType": "text",
          "remoteType": "char(13)",
          "nullable": true
        }, {
          "name": "c_email_address",
          "dataType": "text",
          "remoteType": "varchar(50)",
          "nullable": true
        }, {
          "name": "c_last_review_date",
          "dataType": "text",
          "remoteType": "varchar(10)",
          "nullable": true
        }]
      }
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/trino/bulk
    {
      "handler": {
        "metadata": {
          "sid": "postgres",
          "ssl": false,
          "port": 8080,
          "database": "public",
          "hostname": "trino-example.io",
          "userFiles": [{
            "keyName": "certificate",
            "filename": "576d8b38e9e8bc3749599489408a0b9f605b2a8d.md",
            "userFilename": "certificate.json"
          }],
          "authenticationMethod": "No Authentication",
          "connectionStringOptions": ""
        }
      },
      "connectionString": "trino-example.io:8080/postgres/public"
    }
    {
      "bulkId": "bulk_ds_update_657dd563e6e746069bf040de5e6909a9",
      "connectionString": "trino-example.io:8080/postgres/public",
      "jobsCreated": 4
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/trino/handler/30/triggerHighCardinalityJob
    f6ac1ad0-26d0-11ec-8078-d36bbf5b90fb
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/trino/handler/7/refreshNativeViewJob
    53c256d0-eb57-11ec-b275-d95a8e998142
  • s3:GetAccessGrantsInstance

  • s3:GetAccessGrantsInstanceForPrefix

  • s3:GetAccessGrantsInstanceResourcePolicy

  • s3:ListAccessGrants

  • s3:ListAccessGrantsLocations

  • ).
  • awsLocationRole is the AWS IAM role ARN assigned to the base access grants location. This is the role the AWS Access Grants service assumes to vend credentials to the grantee.

  • awsLocationPath is the base S3 location that Immuta will use for this connection when registering S3 data sources. This path must be unique across all S3 integrations configured in Immuta.

  • API key

    Yes

    type

    string The type of data source: ingested (metadata will exist in Immuta) or queryable (metadata is dynamically queried).

    Yes

    name

    string The name of the data source. It must be unique within the Immuta tenant.

    Yes

    sqlTableName

    string A string that represents this data source's table in Immuta.

    Yes

    organization

    string The organization that owns the data source.

    Yes

    category

    string The category of the data source.

    No

    description

    string The description of the data source.

    No

    hasExamples

    boolean When true, the data source contains examples.

    No

    Update the data source metadata associated with the provided handler ID
    Update the data source metadata associated with the provided connection string
    Recalculate the high cardinality column for the specified data source
    Refresh the view of a data source.

    Manage Webhooks

    Webhooks API reference guide

    Webhooks notify users or other systems when actions happen in Immuta. Every action that generates a notification is available as a webhook.

    This page lists the REST endpoints for managing webhooks and provides examples of requests.

    Webhook overview

    Application Admins can configure webhooks that are triggered by events that happen in the system (such as when data sources or projects are created), but any user can configure webhooks that are triggered by access requests and activity notifications.

    All user-configured webhook integrations must respond within 10 seconds of receiving the webhook request payload. If the webhook integration takes longer to respond, the request will timeout.

    Webhook workflow

    1. .

    Create a webhook

    POST /webhooks

    Create a new webhook. Users can create multiple webhooks in a single request.

    Payload parameters

    Attribute
    Description
    Required

    Webhook notifications

    The following event types can be used to configure a webhook.

    Type
    Triggers

    Response schema

    Attribute
    Description

    Request example

    The following request with the payload below creates a new webhook.

    Payload example

    Response example

    Example payload received when a webhook is triggered

    Retrieve webhook information

    Endpoint
    Purpose

    Search for webhooks

    GET /webhooks

    Return a list of webhooks the user can see. (Admins can see all webhooks; users can only see their own webhooks.)

    Response schema

    Attribute
    Description

    Request example

    The following request returns a list of webhooks the user can see.

    Response example

    Search for notification actions

    GET /webhooks/actions

    Return a list of valid notification actions that a webhook can be triggered by.

    Response schema

    Returns the list of notifications that can trigger a webhook. See the for descriptions.

    Request example

    The following request returns a list of valid notifications that can trigger a webhook.

    Response example

    See the table for descriptions of these notifications.

    Search for webhook records

    GET /webhooks/history

    Return historical records for webhook requests, including requests and responses.

    Query parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request returns historical records for webhook requests, including requests and responses.

    Response example

    Search for webhook by ID

    GET /webhooks/{id}

    Return specified webhook by ID.

    Query parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request returns details on the webhook with the ID 1.

    Response example

    Retry webhook by ID

    POST /webhooks/history/retry/{id}

    Retry webhook requests by history ID. This can be done against any history record, regardless of failure or success.

    Query parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request retries the webhook with the ID 1.

    Response example

    Delete a webhook

    DELETE /webhooks/{id}

    Delete a webhook by ID.

    Query parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request deletes the webhook with the ID 1.

    Response example

    Troubleshooting

    statusCode
    code
    Issue

    Timed out request

    The webhook request took longer than Immuta allows for a response. The default is 10 seconds, but this can be configured from the .

    Request example

    Response example

    Configure a Redshift Integration

    In the Redshift integration, Immuta generates policy-enforced views in your configured Redshift schema for tables registered as Immuta data sources.

    Use the /integrations endpoint to

    • configure a Redshift integration

    • get a Redshift integration

    Requirements

    • APPLICATION_ADMIN Immuta permission

    • A Redshift cluster with an RA3 node is required for the multi-database integration. You must use a Redshift RA3 instance type because Immuta requires cross-database views, which are only supported in Redshift RA3 instance types. For other instance types, you may configure a single-database integration using one of the :

      • Configure the integration with an existing database that contains the external tables. In the steps below, specify an existing database in Redshift as the database in which Immuta will add the Immuta-managed schemas and views instead of creating a new database.

    Configure the integration

    You have two options for configuring your Redshift integration:

    • : Grant Immuta one-time use of credentials to automatically configure your Redshift environment and the integration. When performing an automated installation, Immuta requires temporary, one-time use of credentials with the Redshift permissions listed in the .

      These privileges will be used to create and configure a new Immuta-managed database within the specified Redshift instance. The credentials are not stored or saved by Immuta, and Immuta doesn’t retain access to them after initial setup is complete.

      You can create a new account for Immuta to use that has these privileges, or you can grant temporary use of a pre-existing account. By default, the pre-existing account with appropriate privileges is a Superuser. If you create a new account, it can be deleted after initial setup is complete.

    • : Run the Immuta script in your Redshift environment yourself to configure your Redshift environment and the integration. The specified role used to run the bootstrap needs to have the Redshift permissions listed in the .

    Automatic setup

    Copy the request example from one of the sections below, and replace the values with your own as directed to configure the integration settings. The examples provided use JSON format, but the request also accepts YAML.

    See the for parameter definitions, value types, and additional configuration options.

    This request specifies userPassword as the authentication type for the Immuta system user. The username and password provided are credentials for a system account that can manage the database.

    1. Replace the Immuta URL and with your own.

    2. Change the config values to your own, where

    Response

    The response returns the status of the Redshift integration configuration connection. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Manual setup

    To manually configure the integration, complete the following steps:

    Generate the first script

    Copy the request example from one of the tabs below, and replace the values with your own as directed to generate the first script. The examples provided use JSON format, but the request also accepts YAML.

    See the for parameter definitions, value types, and additional configuration options.

    This request specifies userPassword as the authentication type for the Immuta system user. The username and password provided are credentials for a system account that can manage the database.

    1. Replace the Immuta URL and with your own.

    2. Change the config values to your own, where

    Response

    The response returns the script for you to run in the Redshift initialDatabase.

    Generate the second script

    Copy the request example from one of the tabs below, and replace the values with your own as directed to configure the integration settings. The examples provided use JSON format, but the request also accepts YAML. The payload you provide must match the payload sent when .

    See the for parameter definitions, value types, and additional configuration options.

    This request specifies userPassword as the authentication type for the Immuta system user. The username and password provided are credentials for a system account that can manage the database.

    1. Replace the Immuta URL and with your own.

    2. Pass the same payload you sent when , where

    Response

    The response returns the script for you to run in the database created by the first script.

    Configure the integration in Immuta

    Copy the request example from one of the tabs below, and replace the values with your own as directed to configure the integration settings. The examples provided use JSON format, but the request also accepts YAML. The payload you provide must match the payload sent when .

    See the for parameter definitions, value types, and additional configuration options.

    This request specifies userPassword as the authentication type for the Immuta system user. The username and password provided are credentials for a system account that can manage the database.

    1. Replace the Immuta URL and with your own.

    2. Pass the same payload you sent when , where

    Response

    The response returns the status of the Redshift integration configuration connection. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Get an integration

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    3. Replace the {id} request parameter with the unique identifier of the integration you want to get. Alternatively, you can get a list of all integrations and their IDs with the .

    Response

    The response returns a Redshift integration configuration. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Get all integrations

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    Response

    The response returns the configuration for all integrations. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Update an integration configuration

    You have two options for updating your integration. Follow the steps that match your initial configuration of autoBootstrap:

    • (autoBootstrap is true)

    • (autoBootstrap is false)

    Automatic update

    Copy the request example, and replace the values with your own as directed to update the integration settings. The example provided uses JSON format, but the request also accepts YAML.

    See the for parameter definitions, value types, and additional configuration options.

    1. Replace the Immuta URL and with your own.

    2. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    3. Change the config values to your own, where

      • host

    Response

    The response returns the status of the Redshift integration configuration connection. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Manual update

    To manually update the integration, complete the following steps:

    Generate the updated script

    Copy the request example, and replace the values with your own as directed to generate the script. The example provided uses JSON format, but the request also accepts YAML.

    See the for parameter definitions, value types, and additional configuration options.

    1. Replace the Immuta URL and with your own.

    2. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    3. Change the config values to your own, where

      • host

    Response

    The response returns the script for you to run in your Redshift environment.

    Update the integration in Immuta

    Copy the request example, and replace the values with your own as directed to update the integration settings. The example provided uses JSON format, but the request also accepts YAML. The payload you provide must match the payload sent when .

    See the for parameter definitions, value types, and additional configuration options.

    1. Replace the Immuta URL and with your own.

    2. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    3. Pass the same payload you sent when , where

      • host

    Response

    The response returns the status of the Redshift integration configuration connection. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Delete an integration

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    3. Replace the {id} request parameter with the unique identifier of the integration you want to delete.

    4. If you set

    Response

    The response returns the status of the Redshift integration configuration that has been deleted. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Configure an Azure Synapse Analytics Integration

    The Azure Synapse Analytics resource allows you to create, configure, and manage your Azure Synapse Analytics integration. In this integration, Immuta generates policy-enforced views in a schema in your configured Azure Synapse Analytics Dedicated SQL pool for tables registered as Immuta data sources.

    Use the /integrations endpoint to

    webhooks.notificationType

    array A list of the webhook notifications you would like to receive.

    Yes

    webhooks.actionType

    string Specifies when to start the webhook. The options are triggered or received. When this attribute is set to triggered, the webhook will execute when the user who registered the webhook triggered the event. If this attribute is set to received, the webhook will execute if the user who registered the webhook receives an event triggered by another user.

    Yes

    webhooks.secret

    string Shared secret for computing the webhook signature using HMAC authentication. Once this field is configured, webhooks sent by Immuta will include a x-immuta-webhook-signature header that contains an HMAC digest created using :

    Use SHA-1 and the shared secret you configured to verify the webhook signature.

    No

    Attributes for a group or user are updated.

    bulkJobStatus

    A bulk action is completed (whether success/failure).

    certificationRequired

    A Global Policy that requires certification by the data source owner is applied to a data source.

    collectionCreated

    A domain is created.

    collectionDataSourceAdded

    A data source is added to a domain.

    collectionDataSourceRemoved

    A data source is removed from a domain.

    collectionDeleted

    A domain is deleted.

    collectionPermissionGranted

    A domain permission has been assigned to a user.

    collectionPermissionRevoked

    A domain permission has been removed from a user.

    collectionUpdated

    A domain was updated.

    conflictingGlobalPolicies

    Global Policies are applied to the same column on a data source.

    dataSourceExpired

    A data source that was configured to expire has expired.

    dataSourceExpiring

    A data source that was configured to expire expires tomorrow.

    dataSourceUpdated

    A data source is updated.

    deletedDatasourceRemovedFromProject

    A data source has been deleted and then removed from a project.

    expiredDatasourceRemovedFromProject

    A data source that has expired and been deleted is removed from a project.

    firstQuery

    A data source is queried for the first time through Immuta.

    frameworkCreated

    A classification framework was created.

    frameworkDeleted

    A classification framework was deleted.

    frameworkUpdated

    A classification framework was updated.

    globalPolicyApprovalRescinded

    A governor has removed their approval of a global policy.

    globalPolicyApproved

    A governor has approved a global policy.

    globalPolicyChangeRequested

    A governor has requested changes to a global policy.

    globalPolicyCreated

    A global policy is created.

    globalPolicyDeleted

    A global policy is deleted.

    globalPolicyDisabled

    A global policy is disabled.

    globalPolicyUpdated

    A global policy is updated.

    groupUserAdded

    A user is added to a group.

    groupUserDeleted

    A user is removed from a group.

    healthCheckFailed

    A health check runs and returns not healthy.

    healthCheckResolved

    A health check runs and returns healthy.

    modelAccessApproved

    A user's access request is approved for a data source or project.

    modelAccessDenied

    A user's access request is denied for a data source or project.

    modelAccessRequested

    A user requests access to a data source or project.

    modelAccessRevoked

    A user's access request is revoked for a data source or project.

    modelAccessUpdated

    A user's access level is updated for a data source or project.

    modelCopied

    A data source or project is copied.

    modelCreated

    A data source or project is created.

    modelDeleted

    A data source or project is deleted.

    modelTagAdded

    A tag is added to a data source or a data source column.

    modelTagRemoved

    A tag is removed from a data source or a data source column.

    modelUserAdded

    A user is added to a data source.

    modelUserDeleted

    A user is removed from a data source.

    modelUserJoined

    A user joins a data source that they are already allowed to join.

    nativeIntegrationValidationFailed

    A validation test for an enabled integration has failed.

    permissionsUpdated

    A user's permissions are updated.

    policyCertificationExpired

    A policy certification on a data source has expired.

    policyUpdated

    A data source's policies have been updated by a user or Global Policy. Policy updates are triggered for many reasons, including when a data source is created, a user updates them, a Global Policy changed, tags are added to a data source or column, the data dictionary changed, a fingerprint is recomputed (only available for Snowflake data sources), an external catalog modifies tags on a linked data source, or a policy disabled.

    projectDisabled

    A project is disabled.

    projectEqualizationMemberNotInCompliance

    A member of an equalized project is out of compliance.

    projectEqualizationToggled

    Project equalization is toggled on or off.

    projectUpdated

    A project is updated.

    purposeCreated

    A purpose is created.

    purposeDeleted

    A purpose is deleted.

    purposeUpdated

    A purpose is updated.

    queryCanceled

    A running query is canceled due to a change on a data source.

    removedFromProject

    A data source is removed from a project.

    switchedCurrentProject

    A user switches their current project.

    tagCreated

    A tag is created.

    tagDeleted

    A tag is deleted.

    tagUpdated

    A tag is updated.

    taskDeleted

    An outstanding data source task is deleted without validation.

    taskValidated

    An outstanding data source task is validated.

    userCloned

    A user is cloned.

    userCreated

    A user or group is created.

    userDeleted

    A user or group is deleted.

    userDisabled

    A user is disabled.

    userEnabled

    A user is enabled.

    userMigrated

    A user is migrated from an old IAM to a new IAM.

    usernameUpdated

    A user's name is updated.

    userUpdated

    A group is updated.

    notificationType

    string If set will only return activities of this type.

    No

    includeGlobal

    boolean If true, global records will be included.

    No

    includeUser

    boolean If true, personal webhooks will be returned for the given user. The default is true.

    No

    successOrFailure

    string If set will only retrieve records that were successful or failed.

    No

    createdAt

    timestamp The date the webhook was created.

    updatedAt

    timestamp The date the webhook was last updated.

    createdAt

    timestamp The date and time the webhook was created.

    updatedAt

    timestamp The date and time the webhook was last updated.

    webhooks

    array[object] The details for each webhook you would like to create. Its child attributes are described below.

    Yes

    webhooks.url

    string URL for outbound webhook request.

    Yes

    webhooks.name

    string The webhook's name.

    Yes

    webhooks.global

    boolean If true, you will receive all notifications even if they do not pertain to you.

    ALL_NOTIFICATIONS

    Configures the webhook to be triggered by any event type.

    acknowledgedAccess

    A project member acknowledges the purposes on a project.

    addedToProject

    A data source is added to a project.

    apiKeyRevoked

    A user's API key is revoked.

    attributeAdded

    An attribute is added to a group or user.

    attributeRemoved

    An attribute is removed from a group or user.

    createdWebhooks

    array[object] Details on each webhook that was created including values for id, url, name, global, actionType, and the date it was created.

    /webhooks

    Return a list of webhooks the user can see. (Admins can see all webhooks; users can only see their own webhooks.)

    /webhooks/actions

    Return a list of valid notification actions that a webhook can be triggered by.

    /webhooks/history

    Return historical records for webhook requests, including requests and responses.

    /webhooks/{id}

    Return specified webhook by ID.

    id

    integer The ID of the webhook.

    url

    string URL for outbound webhook request.

    name

    string The webhook's name.

    global

    boolean If true, you will receive all notifications even if they do not pertain to you.

    notificationType

    array A list of the notification types included in the webhook. See the table above for a list of possible values.

    createdBy

    integer The ID of the user who created the webhook.

    offset

    integer The number of records to skip for this query.

    No

    pageSize

    integer The number of records to return in this query. The default is 20.

    No

    sortField

    string The field to use for sorting. The default is createdAt.

    No

    sortOrder

    string The sort order to use. The default is desc.

    count

    integer The number of results for the request.

    records

    metadata Details on each webhook result.

    id

    string The webhook ID.

    Yes

    id

    integer The ID of the webhook.

    url

    string URL for outbound webhook request.

    name

    string The webhook's name.

    global

    boolean If true, you will receive all notifications even if they do not pertain to you.

    notificationType

    array A list of the notification types included in the webhook. See the table above for a list of possible values.

    createdBy

    integer The ID of the user who created the webhook.

    id

    integer ID of the history record to retry.

    Yes

    id

    integer The ID of the history record.

    request

    array Details on the request, including values for test, metadata, webhookId, and webhookName.

    response

    array Details on the response.

    statusCode

    integer The status code for the webhook. A value of 200 is successful.

    notificationType

    string The type of notification.

    webhooksActivityId

    integer The ID for the activity.

    id

    integer The webhook ID.

    Yes

    id

    integer The ID of the webhook.

    url

    string URL for outbound webhook request.

    name

    string The webhook's name.

    global

    boolean If true, you will receive all notifications even if they do not pertain to you.

    notificationType

    array A list of the notification types included in the webhook. See the table above for a list of possible values.

    createdBy

    integer The ID of the user who created the webhook.

    500

    ESOCKETTIMEDOUT

    The request timed out.

    Create a webhook
    Retrieve webhook information
    Retry webhook
    Delete a webhook
    webhook notification table
    webhook notifications
    Apps Settings page

    Yes

    attributeUpdated

    No

  • Create a new database as specified in the steps below, and then re-create all of your external tables in that database.

  • For automated installations, the credentials provided must be a Superuser or have the ability to create databases and users and modify grants.

  • Account used to configure or edit the integration must have the following Redshift permissions:

    • CREATE DATABASE

    • CREATE USER

    • REVOKE ALL PRIVILEGES ON DATABASE

    • GRANT TEMP ON DATABASE

    • MANAGE GRANTS ON ACCOUNT

  • host is the URL of your Redshift account.
  • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

  • initialDatabase is the name of an existing database in Redshift that Immuta initially connects to and creates the Immuta-managed database.

  • username and password are the credentials for the system account that can act on Redshift objects and configure the integration.

  • This request uses Okta as the authentication type for the Immuta system user and enables impersonation to allow Immuta administrators to grant users permission to query Redshift data as other Immuta users.

    1. Replace the Immuta URL and API key with your own.

    2. Change the config values to your own, where

      • host is the URL of your Redshift account.

      • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

      • initialDatabase is the name of an existing database in Redshift that Immuta initially connects to and creates the Immuta-managed database.

      • impersonation specifies whether user impersonation is enabled. See the for child parameters.

      • okta specifies your username, password, appId, idpHost, and role. See the for details about child parameters.

    host is the URL of your Redshift account.
  • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

  • initialDatabase is the name of an existing database in Redshift that Immuta initially connects to and creates the Immuta-managed database.

  • impersonation specifies whether user impersonation is enabled. See the object description for child parameters.

  • username and password are the credentials for the system account that can act on Redshift objects and configure the integration.

  • Run the script returned in the response in the Redshift initialDatabase specified in the payload.

  • This request uses Okta as the authentication type for the Immuta system user and enables impersonation to allow Immuta administrators to grant users permission to query Redshift data as other Immuta users.

    1. Replace the Immuta URL and API key with your own.

    2. Change the config values to your own, where

      • host is the URL of your Redshift account.

      • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

      • initialDatabase is the name of an existing database in Redshift that Immuta initially connects to and creates the Immuta-managed database.

      • impersonation specifies whether user impersonation is enabled. See the for child parameters.

      • okta specifies your username, password, appId, idpHost, and role. See the for details about child parameters.

    3. Run the script returned in the response in the Redshift initialDatabase specified in the payload.

    host
    is the URL of your Redshift account.
  • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

  • initialDatabase is the name of an existing database in Redshift that Immuta initially connects to and creates the Immuta-managed database.

  • impersonation specifies whether user impersonation is enabled. See the object description for child parameters.

  • username and password are the credentials for the system account that can act on Redshift objects and configure the integration.

  • Run the script returned in the response in the database created by the first script.

  • This request uses Okta as the authentication type for the Immuta system user and enables impersonation to allow Immuta administrators to grant users permission to query Redshift data as other Immuta users.

    1. Replace the Immuta URL and API key with your own.

    2. Pass the same payload you sent when generating the first script, where

      • host is the URL of your Redshift account.

      • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

      • initialDatabase is the name of an existing database in Redshift that Immuta initially connects to and creates the Immuta-managed database.

      • impersonation specifies whether user impersonation is enabled. See the for child parameters.

      • okta specifies your username, password, appId, idpHost, and role. See the for details about child parameters.

    3. Run the script returned in the response in the database created by the first script.

    host
    is the URL of your Redshift account.
  • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

  • initialDatabase is the name of an existing database in Redshift that Immuta initially connects to and creates the Immuta-managed database.

  • impersonation specifies whether user impersonation is enabled. See the object description for child parameters.

  • username and password are the credentials for the system account that can act on Redshift objects and configure the integration.

  • This request uses Okta as the authentication type for the Immuta system user and enables impersonation to allow Immuta administrators to grant users permission to query Redshift data as other Immuta users.

    1. Replace the Immuta URL and API key with your own.

    2. Pass the same payload you sent when generating the scripts, where

      • host is the URL of your Redshift account.

      • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

      • initialDatabase is the name of an existing database in Redshift that Immuta initially connects to and creates the Immuta-managed database.

      • impersonation specifies whether user impersonation is enabled. See the for child parameters.

      • okta specifies your username, password, appId, idpHost, and role. See the for details about child parameters.

    is the URL of your Redshift account.
  • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

  • initialDatabase is the name of an existing database in Redshift that Immuta initially connects to and creates the Immuta-managed database.

  • okta specifies your username, password, appId, idpHost, and role. See the object description for details about child parameters.

  • is the URL of your Redshift account.
  • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

  • initialDatabase is the name of an existing database in Redshift that Immuta initially connects to and creates the Immuta-managed database.

  • impersonation specifies whether user impersonation is enabled. See the object description for child parameters.

  • okta specifies your username, password, appId, idpHost, and role. See the object description for details about child parameters.

  • Run the script returned in the response in your Redshift environment.

  • is the URL of your Redshift account.
  • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

  • initialDatabase is the name of an existing database in Redshift that Immuta initially connects to and creates the Immuta-managed database.

  • impersonation specifies whether user impersonation is enabled. See the object description for child parameters.

  • okta specifies your username, password, appId, idpHost, and role. See the object description for details about child parameters.

  • autoBootstrap to true when enabling the integration, specify the authenticationType and the credentials you used to configure the integration in the payload, as illustrated in the example.

  • autoBootstrap to false when enabling the integration, use the script cleanup endpoint (for integrations that were not successfully created) or the delete endpoint (for integrations that were successfully created) to remove Immuta-managed resources from your environment. Then, make the request above without including a payload to remove the integration from Immuta.

  • get all integrations
    update a Redshift integration
    delete a Redshift integration
    Redshift Spectrum options
    Automatic setup
    requirements section
    Manual setup
    requirements section
    config object description
    API key
    response schema reference
    HTTP status codes and error messages
    Generate the first Immuta script and run it in your Redshift environment.
    Generate the second Immuta script and run it inside the database created by the initial script.
    Configure the integration in Immuta.
    config object description
    API key
    generating the script
    config object description
    API key
    generating the first script
    generating the scripts
    config object description
    API key
    generating the scripts
    response schema reference
    HTTP status codes and error messages
    API key
    GET /integrations endpoint
    response schema reference
    HTTP status codes and error messages
    API key
    response schema reference
    HTTP status codes and error messages
    automatic update
    manual update
    config object description
    API key
    response schema reference
    HTTP status codes and error messages
    Generate the updated Immuta script and run it in your Redshift environment.
    Update the integration in Immuta.
    config object description
    API key
    generating the script
    config object description
    API key
    updating the script
    response schema reference
    HTTP status codes and error messages
    API key
    response schema reference
    HTTP status codes and error messages
    get all integrations
  • update an Azure Synapse Analytics integration

  • delete an Azure Synapse Analytics integration

  • Requirements

    • APPLICATION_ADMIN Immuta permission

    • A running Dedicated SQL pool

    • Account used to configure or edit the integration must have the Azure Synapse Analytics permission to manage GRANTS

    Configure the integration

    You have two options for configuring your Azure Synapse Analytics integration:

    • Automatic setup: Grant Immuta one-time use of credentials to automatically configure your Azure Synapse Analytics environment and the integration. When performing an automated installation, Immuta requires temporary, one-time use of credentials with the permission to manage GRANTS.

    • Manual setup: Run the Immuta script in your Azure Synapse Analytics environment yourself to configure your environment and the integration. The specified role used to run the bootstrap needs to have the permission to manage GRANTS.

    Automatic setup

    Copy the request example from one of the tabs below, and replace the values with your own as directed to configure the integration settings. The examples provided use JSON format, but the request also accepts YAML.

    See the config object description for parameter definitions, value types, and additional configuration options.

    1. Replace the Immuta URL and API key with your own.

    2. Change the config values to your own, where

      • host is the URL of your Azure Synapse Analytics account.

      • schema is the name of the Immuta-managed schema where all your secure views will be created and stored.

      • database is the name of an existing database where the Immuta system user will store all Immuta-generated schemas and views.

      • username and password are the username and password of the system account that can act on Azure Synapse Analytics objects and configure the integration.

    This request enables impersonation to allow Immuta administrators to grant users permission to query Azure Synapse Analytics data as other Immuta users.

    1. Replace the Immuta URL and with your own.

    2. Change the config values to your own, where

      • host is the URL of your Azure Synapse Analytics account.

    Response

    The response returns the status of the Azure Synapse Analytics integration configuration connection. See the response schema reference for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the HTTP status codes and error messages for a list of statuses, error messages, and troubleshooting guidance.

    Manual setup

    To manually configure the integration, complete the following steps:

    1. Generate the first Immuta script and run it in your Azure Synapse Analytics environment.

    2. Generate the second Immuta script and run it in your Azure Synapse Analytics environment.

    3. Configure the integration in Immuta.

    Generate the first script

    Copy the request example from one of the tabs below, and replace the values with your own as directed to generate the script. The examples provided use JSON format, but the request also accepts YAML.

    See the config object description for parameter definitions, value types, and additional configuration options.

    1. Replace the Immuta URL and API key with your own.

    2. Change the config values to your own, where

      • host is the URL of your Azure Synapse Analytics account.

      • schema is the name of the Immuta-managed schema where all your secure views will be created and stored.

      • database is the name of an existing database where the Immuta system user will store all Immuta-generated schemas and views.

      • impersonation specifies whether user impersonation is enabled. See the for child parameters.

      • metadataDelimeters are a set of delimiters that Immuta uses to store profile data in Azure Synapse Analytics. See the for child parameters.

      • username and password are the username and password of the system account that can act on Azure Synapse Analytics objects and configure the integration.

    3. Run the script returned in the response in your Azure Synapse Analytics environment.

    This request enables impersonation to allow Immuta administrators to grant users permission to query Azure Synapse Analytics data as other Immuta users.

    1. Replace the Immuta URL and with your own.

    2. Change the config values to your own, where

      • host is the URL of your Azure Synapse Analytics account.

    Response

    The response returns the script for you to run in your environment.

    Generate the second script

    Copy the request example from one of the tabs below, and replace the values with your own as directed to configure the integration settings. The examples provided use JSON format, but the request also accepts YAML. The payload you provide must match the payload sent when generating the first script.

    See the config object description for parameter definitions, value types, and additional configuration options.

    1. Replace the Immuta URL and API key with your own.

    2. Pass the same payload you sent when generating the first script, where

      • host is the URL of your Azure Synapse Analytics account.

      • schema is the name of the Immuta-managed schema where all your secure views will be created and stored.

      • database is the name of an existing database where the Immuta system user will store all Immuta-generated schemas and views.

      • impersonation specifies whether user impersonation is enabled. See the for child parameters.

      • metadataDelimeters are a set of delimiters that Immuta uses to store profile data in Azure Synapse Analytics. See the for child parameters.

      • username and password are the username and password of the system account that can act on Azure Synapse Analytics objects and configure the integration.

    3. Run the script returned in the response in your Azure Synapse Analytics environment.

    This request enables impersonation to allow Immuta administrators to grant users permission to query Azure Synapse Analytics data as other Immuta users.

    1. Replace the Immuta URL and with your own.

    2. Pass the same payload you sent when , where

      • host is the URL of your Azure Synapse Analytics account.

    Response

    The response returns the script for you to run in your environment.

    Configure the integration in Immuta

    Copy the request example from one of the tabs below, and replace the values with your own as directed to configure the integration settings. The examples provided use JSON format, but the request also accepts YAML. The payload you provide must match the payload sent when generating the scripts.

    See the config object description for parameter definitions, value types, and additional configuration options.

    1. Replace the Immuta URL and API key with your own.

    2. Pass the same payload you sent when generating the scripts, where

      • host is the URL of your Azure Synapse Analytics account.

      • schema is the name of the Immuta-managed schema where all your secure views will be created and stored.

      • database is the name of an existing database where the Immuta system user will store all Immuta-generated schemas and views.

      • impersonation specifies whether user impersonation is enabled. See the for child parameters.

      • metadataDelimeters are a set of delimiters that Immuta uses to store profile data in Azure Synapse Analytics. See the for child parameters.

      • username and password are the username and password of the system account that can act on Azure Synapse Analytics objects and configure the integration.

    This request enables impersonation to allow Immuta administrators to grant users permission to query Azure Synapse Analytics data as other Immuta users.

    1. Replace the Immuta URL and with your own.

    2. Pass the same payload you sent when , where

      • host is the URL of your Azure Synapse Analytics account.

    Response

    The response returns the status of the Azure Synapse Analytics integration configuration connection. See the response schema reference for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the HTTP status codes and error messages for a list of statuses, error messages, and troubleshooting guidance.

    Get an integration

    1. Copy the request example.

    2. Replace the Immuta URL and API key with your own.

    3. Replace the {id} request parameter with the unique identifier of the integration you want to get. Alternatively, you can get a list of all integrations and their IDs with the GET /integrations endpoint.

    Response

    The response returns an Azure Synapse Analytics integration configuration. See the response schema reference for details about the response schema. An unsuccessful request returns the status code and an error message. See the HTTP status codes and error messages for a list of statuses, error messages, and troubleshooting guidance.

    Get all integrations

    1. Copy the request example.

    2. Replace the Immuta URL and API key with your own.

    Response

    The response returns the configuration for all integrations. See the response schema reference for details about the response schema. An unsuccessful request returns the status code and an error message. See the HTTP status codes and error messages for a list of statuses, error messages, and troubleshooting guidance.

    Update an integration configuration

    You have two options for updating your integration. Follow the steps that match your initial configuration of autoBootstrap:

    • automatic update (autoBootstrap is true)

    • manual update (autoBootstrap is false)

    Automatic update

    Copy the request example, and replace the values with your own as directed to update the integration settings. The example provided uses JSON format, but the request also accepts YAML.

    See the config object description for parameter definitions, value types, and additional configuration options.

    1. Replace the Immuta URL and API key with your own.

    2. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    3. Change the config values to your own, where

      • host is the URL of your Azure Synapse Analytics account.

      • schema is the name of the Immuta-managed schema where all your secure views will be created and stored.

      • database is the name of an existing database where the Immuta system user will store all Immuta-generated schemas and views.

      • metadataDelimeters are a set of delimiters that Immuta uses to store profile data in Azure Synapse Analytics. See the for child parameters.

      • username and password are the username and password of the system account that can act on Azure Synapse Analytics objects and configure the integration.

    Response

    The response returns the status of the Azure Synapse Analytics integration configuration connection. See the response schema reference for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the HTTP status codes and error messages for a list of statuses, error messages, and troubleshooting guidance.

    Manual update

    To manually update the integration, complete the following steps:

    1. Generate the updated Immuta script and run it in your Azure Synapse Analytics environment.

    2. Update the integration in Immuta.

    Generate the updated script

    Copy the request example, and replace the values with your own as directed to generate the script. The example provided uses JSON format, but the request also accepts YAML.

    See the config object description for parameter definitions, value types, and additional configuration options.

    1. Replace the Immuta URL and API key with your own.

    2. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    3. Change the config values to your own, where

      • host is the URL of your Azure Synapse Analytics account.

      • schema is the name of the Immuta-managed schema where all your secure views will be created and stored.

      • database is the name of an existing database where the Immuta system user will store all Immuta-generated schemas and views.

      • impersonation specifies whether user impersonation is enabled. See the for child parameters.

      • metadataDelimeters are a set of delimiters that Immuta uses to store profile data in Azure Synapse Analytics. See the for child parameters.

      • username and password are the username and password of the system account that can act on Azure Synapse Analytics objects and configure the integration.

    4. Run the script returned in the response in your Azure Synapse Analytics environment.

    Response

    The response returns the script for you to run in your environment.

    Update the integration in Immuta

    Copy the request example, and replace the values with your own as directed to update the integration settings. The example provided uses JSON format, but the request also accepts YAML. The payload you provide must match the payload sent when generating the updated script.

    See the config object description for parameter definitions, value types, and additional configuration options.

    1. Replace the Immuta URL and API key with your own.

    2. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    3. Pass the same payload you sent when generating the script, where

      • host is the URL of your Azure Synapse Analytics account.

      • schema is the name of the Immuta-managed schema where all your secure views will be created and stored.

      • database is the name of an existing database where the Immuta system user will store all Immuta-generated schemas and views.

      • impersonation specifies whether user impersonation is enabled. See the for child parameters.

      • metadataDelimeters are a set of delimiters that Immuta uses to store profile data in Azure Synapse Analytics. See the for child parameters.

      • username and password are the username and password of the system account that can act on Azure Synapse Analytics objects and configure the integration.

    Response

    The response returns the status of the Azure Synapse Analytics integration configuration connection. See the response schema reference for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the HTTP status codes and error messages for a list of statuses, error messages, and troubleshooting guidance.

    Delete an integration

    1. Copy the request example.

    2. Replace the Immuta URL and API key with your own.

    3. Replace the {id} request parameter with the unique identifier of the integration you want to delete.

    4. If you set

      • autoBootstrap to true when enabling the integration, include the credentials you used to configure the integration in the payload, as illustrated in the example.

      • autoBootstrap to false when enabling the integration,

        • use the script endpoint (for integrations that were not successfully created) or the endpoint (for integrations that were successfully created) to remove Immuta-managed resources from your environment,

        • use the script endpoint to finish removing Immuta-managed resources from your environment,

    Response

    The response returns the status of the Azure Synapse Analytics integration configuration that has been deleted. See the response schema reference for details about the response schema. An unsuccessful request returns the status code and an error message. See the HTTP status codes and error messages for a list of statuses, error messages, and troubleshooting guidance.

    configure an Azure Synapse Analytics integration
    get an Azure Synapse Analytics integration

    Create a Redshift Data Source

    Redshift data source API reference guide

    The redshift endpoint allows you to connect and manage Redshift data sources in Immuta.

    Additional fields may be included in some responses you receive; however, these attributes are for internal purposes and are therefore undocumented.

    curl \
        --request POST \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/webhooks
    {
      "webhooks": [
        {
          "url": "https://demo.service.com/processWebhook",
          "name": "ViewMonitorHook",
          "global": false,
          "notificationType": [
            "ALL_NOTIFICATIONS"
          ],
          "actionType": "triggered"
        }
      ]
    }
    {
      "createdWebhooks": [
        {
          "id": 3,
          "url": "https://demo.service.com/processWebhook",
          "name": "ViewMonitorHook",
          "global": false,
          "actionType": "triggered",
          "createdBy": 2,
          "createdAt": "2021-10-15T15:22:10.079Z",
          "updatedAt": "2021-10-15T15:22:10.079Z"
        }
      ],
      "errors": []
    }
      {
        "id": 15,
        "name": "Policy updated",
        "url": "organization.immuta.com",
        "notificationType": [
          "policyUpdated"
        ],
        "global": false,
        "createdBy": 2,
        "actionType": "triggered"
      }
    curl \
        --request GET \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/webhooks
    {
      "id": 1,
      "name": "internal-automatic-subscription-webhook",
      "url": "/internal-webhook/automatic-subscription",
      "notificationType": [
        "groupUserAdded",
        "groupUserDeleted",
        "attributeAdded",
        "attributeRemoved",
        "attributeUpdated",
        "userDeleted",
        "userMigrated",
        "userCreated",
        "policyUpdated",
        "dataSourceUpdated",
        "modelCreated"
      ],
      "global": true,
      "createdBy": 1
    }
    curl \
        --request GET \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/webhooks/actions
    [
      "ALL_NOTIFICATIONS",
      "modelCreated",
      "modelDeleted",
      "modelCopied",
      "dataSourceUpdated",
      "dataSourceExpired",
      "dataSourceExpiring",
      "healthCheckFailed",
      "healthCheckResolved",
      "modelUserAdded",
      "modelUserDeleted",
      "modelUserJoined",
      "modelAccessRequested",
      "modelAccessApproved",
      "modelAccessRevoked",
      "modelAccessUpdated",
      "modelAccessDenied",
      "modelTagAdded",
      "modelTagRemoved",
      "projectUpdated",
      "projectEqualizationToggled",
      "projectEqualizationMemberNotInCompliance",
      "projectDisabled",
      "addedToProject",
      "removedFromProject",
      "deletedDatasourceRemovedFromProject",
      "expiredDatasourceRemovedFromProject",
      "nativeIntegrationValidationFailed",
      "policyUpdated",
      "queryCanceled",
      "firstQuery",
      "userCreated",
      "userDeleted",
      "userEnabled",
      "userCloned",
      "userDisabled",
      "userMigrated",
      "groupUserAdded",
      "groupUserDeleted",
      "userUpdated",
      "attributeUpdated",
      "attributeAdded",
      "attributeRemoved",
      "permissionsUpdated",
      "switchedCurrentProject",
      "usernameUpdated",
      "acknowledgedAccess",
      "purposeCreated",
      "purposeUpdated",
      "purposeDeleted",
      "tagCreated",
      "tagUpdated",
      "tagDeleted",
      "apiKeyRevoked",
      "conflictingGlobalPolicies",
      "globalPolicyCreated",
      "globalPolicyUpdated",
      "globalPolicyDeleted",
      "globalPolicyDisabled",
      "bulkJobStatus",
      "taskValidated",
      "taskDeleted",
      "certificationRequired",
      "policyCertificationExpired"
    ]
    curl \
        --request GET \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/webhooks/history?pageSize=20&includeUser=true
    {
      "count": "0",
      "records": []
    }
    curl \
        --request GET \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/webhooks/1
    {
      "id": 1,
      "name": "internal-automatic-subscription-webhook",
      "url": "/internal-webhook/automatic-subscription",
      "notificationType": [
        "groupUserAdded",
        "groupUserDeleted",
        "attributeAdded",
        "attributeRemoved",
        "attributeUpdated",
        "userDeleted",
        "userMigrated",
        "userCreated",
        "policyUpdated",
        "dataSourceUpdated",
        "modelCreated"
      ],
      "global": true,
      "createdBy": 1
    }
    curl \
        --request POST \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/webhooks/history/retry/1
    {
      "id": 228,
      "request": {
        "text": "Katie has created the Public (https://demo.example.com/#/project/1) project. Please click here (https://demo.example.com/#/project/1) for additional information.",
        "metadata": {
          "modelId": 1,
          "actionBy": 2,
          "modelType": "project",
          "targetUser": 2,
          "projectName": "Public",
          "targetGroup": null,
          "actionByName": "Katie",
          "targetUserName": "Katie",
          "notifyInitiator": true,
          "notificationType": "modelCreated"
        },
        "webhookId": 1,
        "webhookName": "internal-automatic-subscription-webhook"
      },
      "response": {},
      "statusCode": 200,
      "notificationType": "modelCreated",
      "webhooksActivityId": 11,
      "createdAt": "2021-10-15T16:44:06.872Z",
      "updatedAt": "2021-10-15T16:44:06.872Z"
    }
    curl \
        --request DELETE \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/webhooks/1
    {
      "id": 1,
      "url": "/internal-webhook/automatic-subscription",
      "name": "internal-automatic-subscription-webhook",
      "global": true,
      "actionType": null,
      "createdBy": 1,
      "createdAt": "2021-06-24T15:08:58.906Z",
      "updatedAt": "2021-06-24T15:08:58.906Z"
    }
    curl \
        --request GET \
        --header "Authorization: Bearer <TOKEN>" \
        https://demo.immuta.com/webhooks/history?pageSize=20&includeUser=true
    {
      "count": "1",
      "records": [
        {
          "id": 1,
          "request": {
            "text": "You have created the sheep man project. Please click here (http://immuta.demo.com/#/project/11) for additional information.",
            "metadata": {
              "modelId": 11,
              "actionBy": 1,
              "modelType": "project",
              "targetUser": 1,
              "projectName": "sheep man",
              "targetGroup": null,
              "actionByName": "Jane Doe",
              "targetUserName": "Jane Doe",
              "notificationType": "modelCreated"
            },
            "webhookId": 2,
            "webhookName": "webhook"
          },
          "response": {
            "body": {
              "code": "ESOCKETTIMEDOUT",
              "connect": false
            }
          },
          "statusCode": 500,
          "notificationType": "modelCreated",
          "webhooksActivityId": 15,
          "createdAt": "2022-06-01T17:05:34.001Z",
          "updatedAt": "2022-06-01T17:05:34.001Z",
          "webhooksId": 2,
          "url": "http://localhost:8080/webhook",
          "name": "webhook",
          "actionType": null,
          "createdBy": 1
        }
      ]
    }
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Redshift",
        "autoBootstrap": true,
        "config": {
          "host": "organization.aws.amazon.com",
          "database": "immuta",
          "initialDatabase": "REDSHIFT_SAMPLE_DATA",
          "impersonation": {
            "enabled": true,
            "role": "immuta_impersonation"
          },
          "authenticationType": "okta",
          "okta": {
            "username": "[email protected]",
            "password": "abc1234",
            "appId": "Okta",
            "idpHost": "organization.okta.com",
            "role": "admin"
          }
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/scripts/initial-create' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Redshift",
        "autoBootstrap": false,
        "config": {
          "host": "organization.aws.amazon.com",
          "database": "immuta",
          "initialDatabase": "REDSHIFT_SAMPLE_DATA",
          "impersonation": {
            "enabled": true,
            "role": "immuta_impersonation"
          },
          "authenticationType": "okta",
          "okta": {
            "username": "[email protected]",
            "password": "abc1234",
            "appId": "Okta",
            "idpHost": "organization.okta.com",
            "role": "admin"
          }
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/scripts/create' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Redshift",
        "autoBootstrap": false,
        "config": {
          "host": "organization.aws.amazon.com",
          "database": "immuta",
          "initialDatabase": "REDSHIFT_SAMPLE_DATA",
          "impersonation": {
            "enabled": true,
            "role": "immuta_impersonation"
          },
          "authenticationType": "okta",
          "okta": {
            "username": "[email protected]",
            "password": "abc1234",
            "appId": "Okta",
            "idpHost": "organization.okta.com",
            "role": "admin"
          }
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Redshift",
        "autoBootstrap": false,
        "config": {
          "host": "organization.aws.amazon.com",
          "database": "immuta",
          "initialDatabase": "REDSHIFT_SAMPLE_DATA",
          "impersonation": {
            "enabled": true,
            "role": "immuta_impersonation"
          },
          "authenticationType": "okta",
          "okta": {
            "username": "[email protected]",
            "password": "abc1234",
            "appId": "Okta",
            "idpHost": "organization.okta.com",
            "role": "admin"
          }
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Redshift",
        "autoBootstrap": true,
        "config": {
          "host": "organization.aws.amazon.com",
          "database": "immuta",
          "initialDatabase": "REDSHIFT_SAMPLE_DATA",
          "authenticationType": "userPassword",
          "username": "[email protected]",
          "password": "abc1234"
        }
        }'
    {
      "id": "123456789",
      "status": "creating",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "result": [null],
          "status": "passed"
        },
        {
          "name": "Validate Automatic Bootstrap: Immuta Database Does Not Exist",
          "result": [],
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Redshift integration already exists on host organization.aws.amazon.com (id = 123456789)"
    }
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/scripts/initial-create' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Redshift",
        "autoBootstrap": false,
        "config": {
          "host": "organization.aws.amazon.com",
          "database": "immuta",
          "initialDatabase": "REDSHIFT_SAMPLE_DATA",
          "impersonation": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "[email protected]",
          "password": "abc1234"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/scripts/create' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Redshift",
        "autoBootstrap": false,
        "config": {
          "host": "organization.aws.amazon.com",
          "database": "immuta",
          "initialDatabase": "REDSHIFT_SAMPLE_DATA",
          "impersonation": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "[email protected]",
          "password": "abc1234"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Redshift",
        "autoBootstrap": false,
        "config": {
          "host": "organization.aws.amazon.com",
          "database": "immuta",
          "initialDatabase": "REDSHIFT_SAMPLE_DATA",
          "impersonation": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "[email protected]",
          "password": "abc1234"
        }
        }'
    {
      "id": "123456789",
      "status": "creating",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "result": [null],
          "status": "passed"
        },
        {
          "name": "Validate Automatic Bootstrap: Immuta Database Does Not Exist",
          "result": [],
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Redshift integration already exists on host organization.aws.amazon.com (id = 123456789)"
    }
    curl -X 'GET' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    {
      "id": "123456789",
      "status": "enabled",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "result": [null],
          "status": "passed"
        },
        {
          "name": "Validate Automatic Bootstrap: Immuta Database Does Not Exist",
          "result": [],
          "status": "passed"
        }
        ]
      },
      "type": "Redshift",
      "autoBootstrap": true,
      "config": {
        "host": "organization.aws.amazon.com",
        "database": "immuta",
        "initialDatabase": "REDSHIFT_SAMPLE_DATA",
        "port": 5439,
        "impersonation": {
          "enabled": false
        },
        "authenticationType": "userPassword",
        "username": "<REDACTED>",
        "password": "<REDACTED>"
      }
    }
    {
      "id": "123456789",
      "status": "enabled",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "result": [null],
          "status": "passed"
        },
        {
          "name": "Validate Automatic Bootstrap: Immuta Database Does Not Exist",
          "result": [],
          "status": "passed"
        }
        ]
      },
      "type": "Redshift",
      "autoBootstrap": true,
      "config": {
        "host": "organization.aws.amazon.com",
        "database": "immuta",
        "initialDatabase": "REDSHIFT_SAMPLE_DATA",
        "port": 5439,
        "impersonation": {
          "enabled": true,
          "role": "immuta_impersonation"
        },
        "authenticationType": "okta",
        "okta": {
          "username": "<REDACTED>",
          "appId": "Okta",
          "idpHost": "organization.okta.com",
          "role": "admin"
        }
      }
    }
    curl -X 'GET' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    [
      {
        "id": "1",
        "status": "enabled",
        "validationResults": {
          "status": "passed",
          "validationTests": [
            {
              "name": "Initial Validation: Basic Connection Test",
              "status": "passed"
            },
            {
              "name": "Initial Validation: Default Warehouse Access Test",
              "status": "passed",
              "result": []
            },
            {
              "name": "Initial Validation: Validate access to Privileged Role",
              "status": "passed",
              "result": []
            },
            {
              "name": "Validate Automatic: Database Does Not Exist",
              "status": "passed"
            },
            {
              "name": "Validate Automatic: Impersonation Role Does Not Exist",
              "status": "skipped"
            },
            {
              "name": "Validate Automatic Bootstrap User Grants",
              "status": "passed"
            }
          ]
        },
        "type": "Snowflake",
        "autoBootstrap": true,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "port": 443,
          "audit": {
            "enabled": false
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "lineage": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "<REDACTED>",
          "password": "<REDACTED>",
          "role": "ACCOUNTADMIN"
        }
      },
      {
        "id": "2",
        "status": "enabled",
        "type": "Databricks",
        "validationResults": {
          "status": "passed",
          "validationTests": [
            {
              "name": "Metastore validation",
              "status": "passed"
            },
            {
              "name": "Basic Connection Test",
              "result": [
                {
                  "1": 1
                }
              ],
              "status": "passed"
            }
          ]
        },
        "autoBootstrap": true,
        "config": {
          "workspaceUrl": "www.example-workspace.cloud.databricks.com",
          "httpPath": "sql/protocolv1/o/0/0000-00000-abc123",
          "token": "REDACTED",
          "audit": {
            "enabled": false
          },
          "catalog": "immuta"
        }
      }
    ]
    curl -X 'PUT' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Redshift",
        "autoBootstrap": true,
        "config": {
          "host": "organization.aws.amazon.com",
          "database": "immuta",
          "initialDatabase": "REDSHIFT_SAMPLE_DATA",
          "authenticationType": "okta",
          "okta": {
            "username": "[email protected]",
            "password": "abc1234",
            "appId": "Okta",
            "idpHost": "organization.okta.com",
            "role": "admin"
          }
        }
        }'
    {
      "id": "123456789",
      "status": "editing",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "result": [null],
          "status": "passed"
        },
        {
          "name": "Validate Automatic Bootstrap: Immuta Database Does Not Exist",
          "result": [],
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Unable to edit integration with ID 123456789 in current state editing."
    }
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/{id}/scripts/edit' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Redshift",
        "autoBootstrap": false,
        "config": {
          "host": "organization.aws.amazon.com",
          "database": "immuta",
          "initialDatabase": "REDSHIFT_SAMPLE_DATA",
          "impersonation": {
            "enabled": false
          },
          "authenticationType": "okta",
          "okta": {
            "username": "[email protected]",
            "password": "abc1234",
            "appId": "Okta",
            "idpHost": "organization.okta.com",
            "role": "admin"
          }
        }
        }'
    curl -X 'PUT' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Redshift",
        "autoBootstrap": false,
        "config": {
          "host": "organization.aws.amazon.com",
          "database": "immuta",
          "initialDatabase": "REDSHIFT_SAMPLE_DATA",
          "impersonation": {
            "enabled": false
          },
          "authenticationType": "okta",
          "okta": {
            "username": "[email protected]",
            "password": "abc1234",
            "appId": "Okta",
            "idpHost": "organization.okta.com",
            "role": "admin"
          }
        }
        }'
    {
      "id": "123456789",
      "status": "editing",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "result": [null],
          "status": "passed"
        },
        {
          "name": "Validate Automatic Bootstrap: Immuta Database Does Not Exist",
          "result": [],
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Unable to edit integration with ID 123456789 in current state editing."
    }
    curl -X 'DELETE' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "authenticationType": "userPassword",
        "username": "[email protected]",
        "password": "abc1234"
        }'
    {
      "id": "123456789",
      "status": "deleting",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "result": [null],
          "status": "passed"
        },
        {
          "name": "Validate Automatic Bootstrap: Immuta Database Does Not Exist",
          "result": [],
          "status": "passed"
        }
        ]
      }
    }
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Azure Synapse Analytics",
        "autoBootstrap": true,
        "config": {
          "host": "organization.azure.com",
          "schema": "sample_schema",
          "database": "immuta",
          "username": "[email protected]",
          "password": "abc1234",
          "authenticationType": "userPassword"
        }
        }'
    {
      "id": "123456789",
      "status": "creating",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Connect",
          "result": [
          {
            "SCHEMA_NAME": "sample_schema",
            "CATALOG_NAME": "immuta",
            "SCHEMA_OWNER": "[email protected]",
            "DEFAULT_CHARACTER_SET_NAME": "iso_1",
            "DEFAULT_CHARACTER_SET_SCHEMA": null,
            "DEFAULT_CHARACTER_SET_CATALOG": null
          }
          ],
          "status": "passed"
        },
        {
          "name": "Initial Validation: Delimiters",
          "status": "passed"
        },
        {
          "name": "Validate Immuta system user can manage database",
          "result": [
          {
            "name": "[email protected]"
          }
          ],
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Azure Synapse Analytics integration already exists on host organization.azure.com (id = 123456789)"
    }
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/scripts/initial-create' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Azure Synapse Analytics",
        "autoBootstrap": false,
        "config": {
          "host": "organization.azure.com",
          "schema": "sample_schema",
          "database": "immuta",
          "impersonation": {
            "enabled": false
          },
          "metadataDelimiters": {
            "hashDelimiter": "|",
            "hashKeyDelimiter": "-",
            "arrayDelimiter": ","
          },
          "username": "[email protected]",
          "password": "abc1234",
          "authenticationType": "userPassword"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/scripts/create' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Azure Synapse Analytics",
        "autoBootstrap": false,
        "config": {
          "host": "organization.azure.com",
          "schema": "sample_schema",
          "database": "immuta",
          "impersonation": {
            "enabled": false
          },
          "metadataDelimiters": {
            "hashDelimiter": "|",
            "hashKeyDelimiter": "-",
            "arrayDelimiter": ","
          },
          "username": "[email protected]",
          "password": "abc1234",
          "authenticationType": "userPassword"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Azure Synapse Analytics",
        "autoBootstrap": false,
        "config": {
          "host": "organization.azure.com",
          "schema": "sample_schema",
          "database": "immuta",
          "impersonation": {
            "enabled": false
          },
          "metadataDelimiters": {
            "hashDelimiter": "|",
            "hashKeyDelimiter": "-",
            "arrayDelimiter": ","
          },
          "username": "[email protected]",
          "password": "abc1234",
          "authenticationType": "userPassword"
        }
        }'
    {
      "id": "123456789",
      "status": "creating",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Connect",
          "result": [
          {
            "SCHEMA_NAME": "sample_schema",
            "CATALOG_NAME": "immuta",
            "SCHEMA_OWNER": "[email protected]",
            "DEFAULT_CHARACTER_SET_NAME": "iso_1",
            "DEFAULT_CHARACTER_SET_SCHEMA": null,
            "DEFAULT_CHARACTER_SET_CATALOG": null
          }
          ],
          "status": "passed"
        },
        {
          "name": "Initial Validation: Delimiters",
          "status": "passed"
        },
        {
          "name": "Validate Immuta system user can manage database",
          "result": [
          {
            "name": "[email protected]"
          }
          ],
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Azure Synapse Analytics integration already exists on host organization.azure.com (id = 123456789)"
    }
    {
      "id": "123456789",
      "status": "enabled",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Connect",
          "result": [
          {
            "SCHEMA_NAME": "sample_schema",
            "CATALOG_NAME": "immuta",
            "SCHEMA_OWNER": "[email protected]",
            "DEFAULT_CHARACTER_SET_NAME": "iso_1",
            "DEFAULT_CHARACTER_SET_SCHEMA": null,
            "DEFAULT_CHARACTER_SET_CATALOG": null
          }
          ],
          "status": "passed"
        },
        {
          "name": "Initial Validation: Delimiters",
          "status": "passed"
        },
        {
          "name": "Validate Immuta system user can manage database",
          "result": [
          {
            "name": "[email protected]"
          }
          ],
          "status": "passed"
        }
        ]
      },
      "type": "Azure Synapse Analytics",
      "autoBootstrap": true,
      "config": {
        "host": "organization.azure.com",
        "schema": "sample_schema",
        "database": "immuta",
        "port": 1433,
        "impersonation": {
          "enabled": false
        },
        "metadataDelimiters": {
          "hashDelimiter": "|",
          "hashKeyDelimiter": "-",
          "arrayDelimiter": ","
        },
        "username": "<REDACTED>"
      }
    }
    {
      "id": "123456789",
      "status": "enabled",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Connect",
          "result": [
          {
            "SCHEMA_NAME": "sample_schema",
            "CATALOG_NAME": "immuta",
            "SCHEMA_OWNER": "[email protected]",
            "DEFAULT_CHARACTER_SET_NAME": "iso_1",
            "DEFAULT_CHARACTER_SET_SCHEMA": null,
            "DEFAULT_CHARACTER_SET_CATALOG": null
          }
          ],
          "status": "passed"
        },
        {
          "name": "Initial Validation: Delimiters",
          "status": "passed"
        },
        {
          "name": "Validate Immuta system user can manage database",
          "result": [
          {
            "name": "[email protected]"
          }
          ],
          "status": "passed"
        }
        ]
      },
      "type": "Azure Synapse Analytics",
      "autoBootstrap": true,
      "config": {
        "host": "organization.azure.com",
        "schema": "sample_schema",
        "database": "immuta",
        "port": 1433,
        "impersonation": {
          "enabled": true,
          "role": "IMMUTA_IMPERSONATION"
        },
        "metadataDelimiters": {
          "hashDelimiter": "|",
          "hashKeyDelimiter": "-",
          "arrayDelimiter": ","
        },
        "username": "<REDACTED>"
      }
    }
    {
      "id": "123456789",
      "status": "editing",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Connect",
          "result": [
          {
            "SCHEMA_NAME": "sample_schema",
            "CATALOG_NAME": "immuta",
            "SCHEMA_OWNER": "[email protected]",
            "DEFAULT_CHARACTER_SET_NAME": "iso_1",
            "DEFAULT_CHARACTER_SET_SCHEMA": null,
            "DEFAULT_CHARACTER_SET_CATALOG": null
          }
          ],
          "status": "passed"
        },
        {
          "name": "Initial Validation: Delimiters",
          "status": "passed"
        },
        {
          "name": "Validate Immuta system user can manage database",
          "result": [
          {
            "name": "[email protected]"
          }
          ],
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Unable to edit integration with ID 123456789 in current state editing."
    }
    {
      "id": "123456789",
      "status": "editing",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Connect",
          "result": [
          {
            "SCHEMA_NAME": "sample_schema",
            "CATALOG_NAME": "immuta",
            "SCHEMA_OWNER": "[email protected]",
            "DEFAULT_CHARACTER_SET_NAME": "iso_1",
            "DEFAULT_CHARACTER_SET_SCHEMA": null,
            "DEFAULT_CHARACTER_SET_CATALOG": null
          }
          ],
          "status": "passed"
        },
        {
          "name": "Initial Validation: Delimiters",
          "status": "passed"
        },
        {
          "name": "Validate Immuta system user can manage database",
          "result": [
          {
            "name": "[email protected]"
          }
          ],
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Unable to edit integration with ID 123456789 in current state editing."
    }
    curl -X 'GET' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    curl -X 'GET' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    [
      {
        "id": "1",
        "status": "enabled",
        "validationResults": {
          "status": "passed",
          "validationTests": [
            {
              "name": "Initial Validation: Basic Connection Test",
              "status": "passed"
            },
            {
              "name": "Initial Validation: Default Warehouse Access Test",
              "status": "passed",
              "result": []
            },
            {
              "name": "Initial Validation: Validate access to Privileged Role",
              "status": "passed",
              "result": []
            },
            {
              "name": "Validate Automatic: Database Does Not Exist",
              "status": "passed"
            },
            {
              "name": "Validate Automatic: Impersonation Role Does Not Exist",
              "status": "skipped"
            },
            {
              "name": "Validate Automatic Bootstrap User Grants",
              "status": "passed"
            }
          ]
        },
        "type": "Snowflake",
        "autoBootstrap": true,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "port": 443,
          "audit": {
            "enabled": false
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "lineage": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "<REDACTED>",
          "password": "<REDACTED>",
          "role": "ACCOUNTADMIN"
        }
      },
      {
        "id": "2",
        "status": "enabled",
        "type": "Databricks",
        "validationResults": {
          "status": "passed",
          "validationTests": [
            {
              "name": "Metastore validation",
              "status": "passed"
            },
            {
              "name": "Basic Connection Test",
              "result": [
                {
                  "1": 1
                }
              ],
              "status": "passed"
            }
          ]
        },
        "autoBootstrap": true,
        "config": {
          "workspaceUrl": "www.example-workspace.cloud.databricks.com",
          "httpPath": "sql/protocolv1/o/0/0000-00000-abc123",
          "token": "REDACTED",
          "audit": {
            "enabled": false
          },
          "catalog": "immuta"
        }
      }
    ]
    curl -X 'PUT' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Azure Synapse Analytics",
        "autoBootstrap": true,
        "config": {
          "host": "organization.azure.com",
          "schema": "sample_schema",
          "database": "immuta",
          "metadataDelimiters": {
            "hashDelimiter": "|",
            "hashKeyDelimiter": "-",
            "arrayDelimiter": ","
          },
          "username": "[email protected]",
          "password": "abc1234",
          "authenticationType": "userPassword"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/{id}/scripts/edit' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Azure Synapse Analytics",
        "autoBootstrap": false,
        "config": {
          "host": "organization.azure.com",
          "schema": "sample_schema",
          "database": "immuta",
          "impersonation": {
            "enabled": false
          },
          "metadataDelimiters": {
            "hashDelimiter": "|",
            "hashKeyDelimiter": "-",
            "arrayDelimiter": ","
          },
          "username": "[email protected]",
          "password": "abc1234",
          "authenticationType": "userPassword"
        }
        }'
    curl -X 'PUT' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Azure Synapse Analytics",
        "autoBootstrap": false,
        "config": {
          "host": "organization.azure.com",
          "schema": "sample_schema",
          "database": "immuta",
          "impersonation": {
            "enabled": false
          },
          "metadataDelimiters": {
            "hashDelimiter": "|",
            "hashKeyDelimiter": "-",
            "arrayDelimiter": ","
          },
          "username": "[email protected]",
          "password": "abc1234",
          "authenticationType": "userPassword"
        }
        }'
    curl -X 'DELETE' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "authenticationType": "userPassword",
        "username": "[email protected]",
        "password": "abc1234"
        }'
    {
      "id": "123456789",
      "status": "deleting",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Connect",
          "result": [
          {
            "SCHEMA_NAME": "sample_schema",
            "CATALOG_NAME": "immuta",
            "SCHEMA_OWNER": "[email protected]",
            "DEFAULT_CHARACTER_SET_NAME": "iso_1",
            "DEFAULT_CHARACTER_SET_SCHEMA": null,
            "DEFAULT_CHARACTER_SET_CATALOG": null
          }
          ],
          "status": "passed"
        },
        {
          "name": "Initial Validation: Delimiters",
          "status": "passed"
        },
        {
          "name": "Validate Immuta system user can manage database",
          "result": [
          {
            "name": "[email protected]"
          }
          ],
          "status": "passed"
        }
        ]
      }
    }
    object description
    object description
    object description
    object description
    object description
    object description
    object description
    object description

    schema is the name of the Immuta-managed schema where all your secure views will be created and stored.

  • database is the name of an existing database where the Immuta system user will store all Immuta-generated schemas and views.

  • impersonation specifies whether user impersonation is enabled. See the object description for child parameters.

  • metadataDelimeters are a set of delimiters that Immuta uses to store profile data in Azure Synapse Analytics. See the object description for child parameters.

  • username and password are the username and password of the system account that can act on Azure Synapse Analytics objects and configure the integration.

  • schema is the name of the Immuta-managed schema where all your secure views will be created and stored.

  • database is the name of an existing database where the Immuta system user will store all Immuta-generated schemas and views.

  • impersonation specifies whether user impersonation is enabled. See the object description for child parameters.

  • metadataDelimeters are a set of delimiters that Immuta uses to store profile data in Azure Synapse Analytics. See the object description for child parameters.

  • username and password are the username and password of the system account that can act on Azure Synapse Analytics objects and configure the integration.

  • Run the script returned in the response in your Azure Synapse Analytics environment.

  • schema is the name of the Immuta-managed schema where all your secure views will be created and stored.

  • database is the name of an existing database where the Immuta system user will store all Immuta-generated schemas and views.

  • impersonation specifies whether user impersonation is enabled. See the object description for child parameters.

  • metadataDelimeters are a set of delimiters that Immuta uses to store profile data in Azure Synapse Analytics. See the object description for child parameters.

  • username and password are the username and password of the system account that can act on Azure Synapse Analytics objects and configure the integration.

  • Run the script returned in the response in your Azure Synapse Analytics environment.

  • schema is the name of the Immuta-managed schema where all your secure views will be created and stored.

  • database is the name of an existing database where the Immuta system user will store all Immuta-generated schemas and views.

  • impersonation specifies whether user impersonation is enabled. See the object description for child parameters.

  • metadataDelimeters are a set of delimiters that Immuta uses to store profile data in Azure Synapse Analytics. See the object description for child parameters.

  • username and password are the username and password of the system account that can act on Azure Synapse Analytics objects and configure the integration.

  • make the request above without including a payload to remove the integration from Immuta.
    API key
    object description
    object description
    API key
    object description
    object description
    API key
    generating the first script
    object description
    object description
    API key
    generating the scripts
    object description
    object description
    object description
    object description
    object description
    cleanup
    delete
    post-cleanup
    See the webhook notifications table for a list of possible values.
    this Node.js method
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Azure Synapse Analytics",
        "autoBootstrap": true,
        "config": {
          "host": "organization.azure.com",
          "schema": "sample_schema",
          "database": "immuta",
          "impersonation": {
            "enabled": true,
            "role": "IMMUTA_IMPERSONATION"
          },
          "metadataDelimiters": {
            "hashDelimiter": "|",
            "hashKeyDelimiter": "-",
            "arrayDelimiter": ","
          },
          "username": "[email protected]",
          "password": "abc1234",
          "authenticationType": "userPassword"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/scripts/initial-create' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Azure Synapse Analytics",
        "autoBootstrap": false,
        "config": {
          "host": "organization.azure.com",
          "schema": "sample_schema",
          "database": "immuta",
          "impersonation": {
            "enabled": true,
            "role": "IMMUTA_IMPERSONATION"
          },
          "metadataDelimiters": {
            "hashDelimiter": "|",
            "hashKeyDelimiter": "-",
            "arrayDelimiter": ","
          },
          "username": "[email protected]",
          "password": "abc1234",
          "authenticationType": "userPassword"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/scripts/create' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Azure Synapse Analytics",
        "autoBootstrap": false,
        "config": {
          "host": "organization.azure.com",
          "schema": "sample_schema",
          "database": "immuta",
          "impersonation": {
            "enabled": true,
            "role": "IMMUTA_IMPERSONATION"
          },
          "metadataDelimiters": {
            "hashDelimiter": "|",
            "hashKeyDelimiter": "-",
            "arrayDelimiter": ","
          },
          "username": "[email protected]",
          "password": "abc1234",
          "authenticationType": "userPassword"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Azure Synapse Analytics",
        "autoBootstrap": false,
        "config": {
          "host": "organization.azure.com",
          "schema": "sample_schema",
          "database": "immuta",
          "impersonation": {
            "enabled": true,
            "role": "IMMUTA_IMPERSONATION"
          },
          "metadataDelimiters": {
            "hashDelimiter": "|",
            "hashKeyDelimiter": "-",
            "arrayDelimiter": ","
          },
          "username": "[email protected]",
          "password": "abc1234",
          "authenticationType": "userPassword"
        }
        }'
    createHmac('sha1', decryptedSecret).update(JSON.stringify(data)).digest('hex')
    Redshift workflow
    1. Create a data source.

    2. Get information about a data source.

    3. Manage data sources.

    Create a data source

    POST /redshift/handler

    Save the provided connection information as a data source.

    Payload parameters

    Attribute
    Description
    Required

    private

    boolean When false, the data source will be publicly available in the Immuta UI.

    Yes

    blobHandler

    array[object] A list of full URLs providing the locations of all blob store handlers to use with this data source.

    Yes

    blobHandlerType

    string Describes the type of underlying blob handler that will be used with this data source (e.g., MS SQL).

    Yes

    recordFormat

    string The data format of blobs in the data source, such as json, xml, html, or jpeg.

    Response parameters

    Attribute
    Description

    id

    integer The handler ID.

    dataSourceId

    integer The ID of the data source.

    warnings

    string This message describes issues with the created data source, such as the data source being unhealthy.

    connectionString

    string The connection string used to connect the data source to Immuta.

    Request example

    This request creates two Redshift data sources, which are specified in example-payload.json.

    Payload example

    Response example

    Get information about a data source

    GET /redshift/handler/{handlerId}

    Get the handler metadata associated with the provided handler ID.

    Query parameters

    Attribute
    Description
    Required

    handlerId

    integer The ID of the handler.

    Yes

    skipCache

    boolean When true, will skip the handler cache when retrieving metadata.

    No

    Response parameters

    Attribute
    Description

    body

    array[object] Metadata about the data source, including the data source ID, schema, database, and connection string.

    Request example

    This request returns metadata for the handler with the ID 41.

    Response Example

    Manage data sources

    Method
    Path
    Purpose

    PUT

    /redshift/handler/{handlerId}

    . This endpoint does not perform partial updates, but will allow the dictionary to be omitted. In this case, it uses the current dictionary.

    PUT

    /redshift/bulk

    .

    PUT

    /redshift/handler/{handlerId}/triggerHighCardinalityJob

    .

    PUT

    /redshift/handler/{handlerId}/refreshNativeViewJob

    Update a specific data source

    PUT /redshift/handler/{handlerId}

    Update the data source metadata associated with the provided handler ID. This endpoint does not perform partial updates, but will allow the dictionary to be omitted. In this case, it uses the current dictionary.

    Query parameters

    Attribute
    Description
    Required

    handlerId

    integer The ID of the handler.

    Yes

    skipCache

    boolean When true, will skip the handler cache when retrieving metadata.

    No

    Payload parameters

    Attribute
    Description
    Required

    handler

    metadata Includes metadata about the handler, such as ssl, port, database, hostname, username, and password.

    Yes

    connectionString

    string The connection string used to connect to the data source.

    Yes

    Response parameters

    Attribute
    Description

    id

    integer The ID of the handler.

    ca

    string The certificate authority.

    columns

    array[object] This is a Data Dictionary object, which provides metadata about the columns in the data source, including the name and data type of the column.

    Request example

    This request updates the metadata for the data source with the handler ID 41.

    Payload example

    The payload below removes the paragraph_count column from the data source.

    Response example

    Update multiple data sources

    PUT /redshift/bulk

    Update the data source metadata associated with the provided connection string.

    Payload parameters

    Attribute
    Description
    Required

    handler

    metadata Includes metadata about the handler, such as ssl, port, database, hostname, username, and password.

    Yes

    connectionString

    string The connection string used to connect to the data sources.

    Yes

    Response parameters

    Attribute
    Description

    bulkId

    string The ID of the bulk data source update.

    connectionString

    string The connection string shared by the data sources bulk updated.

    jobsCreated

    integer The number of jobs that ran to update the data sources; this number corresponds to the number of data sources updated.

    Request example

    This request updates the metadata for all data sources with the connection string specified in example-payload.json.

    Payload example

    The payload below adds a certificate (certificate.json) to connect to the data sources with the provided connection string.

    Response example

    Recalculate the high cardinality column for a data source

    PUT /redshift/handler/{handlerId}/triggerHighCardinalityJob

    Recalculate the high cardinality column for the specified data source.

    Query parameters

    Attribute
    Description
    Required

    handlerId

    integer The ID of the handler.

    Yes

    Response parameters

    The response returns a string of characters that identify the high cardinality job run.

    Request example

    This request re-runs the job that calculates the high cardinality column for the data source with the handler ID 41.

    Response example

    Refresh a view

    PUT /redshift/handler/{handlerId}/refreshNativeViewJob

    Refresh the view of a data source.

    Query parameters

    Attribute
    Description
    Required

    handlerId

    integer The ID of the handler.

    Yes

    Response parameters

    The response returns a string of characters that identifies the refresh view job run.

    Request example

    This request refreshes the view for the data source with the handler ID 7.

    Response example

    Manage Domains

    Domains API reference guide

    The collections object represents a domain you've created that contains data sources and assigned permissions. Currently, the only collection type available is a domain, so collections and domains are referred to interchangeably throughout this page.

    Domain object attributes

    Attribute
    Description
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/redshift/handler
    {
      "handler": [{
        "metadata": {
          "ssl": true,
          "userFiles": [],
          "port": 5439,
          "hostname": "redshift.database.example.io",
          "database": "test",
          "username": "user",
          "password": "yourpassword",
          "schemaProjectName": "Army",
          "staleDataTolerance": 86400,
          "bodataSchemaName": "army",
          "bodataTableName": "army_records",
          "dataSourceName": "Army Army Records",
          "table": "army_records",
          "schema": "army",
          "nativeViewName": "army_records_immuta",
          "nativeSchemaName": "army_immuta",
          "nativeWorkspaceName": "immuta_test"
        }
      }, {
        "metadata": {
          "ssl": true,
          "userFiles": [],
          "port": 5439,
          "hostname": "redshift.database.example.io",
          "database": "test",
          "username": "user",
          "password": "your-password",
          "schemaProjectName": "Army",
          "staleDataTolerance": 86400,
          "bodataSchemaName": "army",
          "bodataTableName": "data",
          "dataSourceName": "Army Data",
          "table": "data",
          "schema": "army",
          "nativeViewName": "data_immuta",
          "nativeSchemaName": "army_immuta",
          "nativeWorkspaceName": "immuta_test"
        }
      }],
      "dataSource": {
        "blobHandler": {
          "scheme": "https",
          "url": ""
        },
        "blobHandlerType": "Redshift",
        "recordFormat": "",
        "type": "queryable",
        "schemaEvolutionId": null,
        "columnEvolutionEnabled": true
      },
      "schemaEvolution": {
        "ownerProfileId": 2,
        "config": {
          "nameTemplate": {
            "nameFormat": "<Schema> <Tablename>",
            "tableFormat": "<tablename>",
            "sqlSchemaNameFormat": "<schema>",
            "schemaProjectNameFormat": "<Schema>"
          }
        },
        "schemas": []
      }
    }
    {
      "connectionString":"[email protected]:5439/test"
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/redshift/handler/41
    {
      "dataSourceId": 41,
      "metadata": {
        "ssl": true,
        "port": 5439,
        "query": null,
        "table": "data",
        "schema": "army",
        "database": "test",
        "hostname": "redshift.database.example.io",
        "username": "user",
        "eventTime": "fileinfo.creationtime",
        "userFiles": [],
        "dataSourceName": "Army Data",
        "bodataTableName": "data",
        "bodataSchemaName": "army",
        "columnsNormalized": false,
        "schemaProjectName": "Army",
        "staleDataTolerance": 86400
      },
      "type": "odbcHandler",
      "connectionString": "[email protected]:5439/test",
      "id": 41,
      "createdAt": "2021-10-01T18:15:09.139Z",
      "updatedAt": "2021-10-01T18:15:09.274Z",
      "dbms": {
        "name": "redshift"
      }
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/redshift/handler/41
    {
      "handler": {
        "policyHandler": null,
        "dataSourceId": 41,
        "metadata": {
          "ssl": true,
          "port": 5439,
          "table": "data",
          "schema": "army",
          "database": "test",
          "hostname": "redshift.database.example.io",
          "username": "user",
          "eventTime": "fileinfo.creationtime",
          "userFiles": [],
          "dataSourceName": "Army Data",
          "bodataTableName": "data",
          "bodataSchemaName": "army",
          "columnsNormalized": false,
          "schemaProjectName": "Army",
          "staleDataTolerance": 86400,
          "columns": [{
            "name": "text",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "date",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "hashed_id",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "filename",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "storage_location",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "size",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "owner",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "dc:publisher",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "meta:page-count",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "publisher",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "author",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "extended-properties:template",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "application-version",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "revision-number",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "page-count",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "last-author",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "character-count-with-spaces",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "xmptpg:npages",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "creation-date",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "meta:last-author",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "extended-properties:application",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "meta:creation-date",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "meta:author",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "custom:contenttypeid",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "creator",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "x-parsed-by",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "content-type",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "modified",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "extended-properties:totaltime",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "application-name",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "meta:character-count-with-spaces",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "meta:save-date",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "line-count",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "template",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "meta:character-count",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "last-save-date",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "last-modified",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "dcterms:modified",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "meta:line-count",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "dcterms:created",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "word-count",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "extended-properties:company",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "dc:creator",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "meta:word-count",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "meta:paragraph-count",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "extended-properties:appversion",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "total-time",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "cp:revision",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "fileinfo.group",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "fileinfo.isdirectory",
            "dataType": "boolean",
            "remoteType": "boolean",
            "nullable": true
          }, {
            "name": "fileinfo.isother",
            "dataType": "boolean",
            "remoteType": "boolean",
            "nullable": true
          }, {
            "name": "fileinfo.permissions",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "fileinfo.issymboliclink",
            "dataType": "boolean",
            "remoteType": "boolean",
            "nullable": true
          }, {
            "name": "fileinfo.size",
            "dataType": "integer",
            "remoteType": "integer",
            "nullable": true
          }, {
            "name": "fileinfo.file",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "fileinfo.filename",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "fileinfo.filekey",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "fileinfo.isregularfile",
            "dataType": "boolean",
            "remoteType": "boolean",
            "nullable": true
          }, {
            "name": "fileinfo.creationtime",
            "dataType": "timestamp",
            "remoteType": "timestamp",
            "nullable": true
          }, {
            "name": "fileinfo.lastmodifiedtime",
            "dataType": "timestamp",
            "remoteType": "timestamp",
            "nullable": true
          }, {
            "name": "fileinfo.lastaccesstime",
            "dataType": "timestamp",
            "remoteType": "timestamp",
            "nullable": true
          }, {
            "name": "fileinfo.owner",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "topsecretboolean",
            "dataType": "double precision",
            "remoteType": "double precision",
            "nullable": true
          }, {
            "name": "secretboolean",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "confidentialsecretboolean",
            "dataType": "double precision",
            "remoteType": "double precision",
            "nullable": true
          }, {
            "name": "classificationlevel",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "releasability",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }, {
            "name": "compartment",
            "dataType": "text",
            "remoteType": "string",
            "nullable": true
          }],
          "password": "yourpassword"
        },
        "type": "odbcHandler",
        "connectionString": "[email protected]:5439/test",
        "id": 41,
        "createdAt": "2021-10-01T18:15:09.139Z",
        "updatedAt": "2021-10-01T18:15:09.274Z",
        "dbms": {
          "name": "redshift"
        }
      }
    }
    {
      "id": 41,
      "ca": ["-----BEGIN CERTIFICATE-----\ncertificatedata\n-----END CERTIFICATE-----"],
      "metadata": {
        "columns": [{
          "name": "text",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "date",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "hashed_id",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "filename",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "storage_location",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "size",
          "dataType": "integer",
          "remoteType": "integer",
          "nullable": true
        }, {
          "name": "owner",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "dc:publisher",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "meta:page-count",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "publisher",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "author",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "extended-properties:template",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "application-version",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "revision-number",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "page-count",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "last-author",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "character-count-with-spaces",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "xmptpg:npages",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "creation-date",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "meta:last-author",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "extended-properties:application",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "meta:creation-date",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "meta:author",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "custom:contenttypeid",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "creator",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "x-parsed-by",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "content-type",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "modified",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "extended-properties:totaltime",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "application-name",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "meta:character-count-with-spaces",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "meta:save-date",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "line-count",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "template",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "meta:character-count",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "last-save-date",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "last-modified",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "dcterms:modified",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "meta:line-count",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "dcterms:created",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "word-count",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "extended-properties:company",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "dc:creator",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "meta:word-count",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "meta:paragraph-count",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "extended-properties:appversion",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "total-time",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "cp:revision",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "fileinfo.group",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "fileinfo.isdirectory",
          "dataType": "boolean",
          "remoteType": "boolean",
          "nullable": true
        }, {
          "name": "fileinfo.isother",
          "dataType": "boolean",
          "remoteType": "boolean",
          "nullable": true
        }, {
          "name": "fileinfo.permissions",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "fileinfo.issymboliclink",
          "dataType": "boolean",
          "remoteType": "boolean",
          "nullable": true
        }, {
          "name": "fileinfo.size",
          "dataType": "integer",
          "remoteType": "integer",
          "nullable": true
        }, {
          "name": "fileinfo.file",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "fileinfo.filename",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "fileinfo.filekey",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "fileinfo.isregularfile",
          "dataType": "boolean",
          "remoteType": "boolean",
          "nullable": true
        }, {
          "name": "fileinfo.creationtime",
          "dataType": "timestamp",
          "remoteType": "timestamp",
          "nullable": true
        }, {
          "name": "fileinfo.lastmodifiedtime",
          "dataType": "timestamp",
          "remoteType": "timestamp",
          "nullable": true
        }, {
          "name": "fileinfo.lastaccesstime",
          "dataType": "timestamp",
          "remoteType": "timestamp",
          "nullable": true
        }, {
          "name": "fileinfo.owner",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "topsecretboolean",
          "dataType": "double precision",
          "remoteType": "double precision",
          "nullable": true
        }, {
          "name": "secretboolean",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "confidentialsecretboolean",
          "dataType": "double precision",
          "remoteType": "double precision",
          "nullable": true
        }, {
          "name": "classificationlevel",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "releasability",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }, {
          "name": "compartment",
          "dataType": "text",
          "remoteType": "string",
          "nullable": true
        }]
      }
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/redshift/bulk
    {
      "handler": {
        "metadata": {
          "ssl": true,
          "port": 5439,
          "database": "test",
          "hostname": "redshift.database.example.io",
          "username": "user",
          "userFiles": [{
            "keyName": "testcert",
            "filename": "bf349cbbfd3bc4eaf4ace7824a599fbc7cb5f7d5.json",
            "userFilename": "certificate.json"
          }],
          "password": "yourpassword"
        }
      },
      "connectionString": "[email protected]:5000/test"
    }
    {
      "bulkId": "bulk_ds_update_f50a8010dca03c07bcd0dc55eaf13c07",
      "connectionString": "[email protected]:5000/tpc",
      "jobsCreated": 2
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/redshift/handler/41/triggerHighCardinalityJob
    0f5f08d0-22ee-11ec-b2b8-874838eeef05
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/redshift/handler/7/refreshNativeViewJob
    53c256d0-eb57-11ec-b275-d95a8e998142

    Yes

    type

    string The type of data source: ingested (metadata will exist in Immuta) or queryable (metadata is dynamically queried).

    Yes

    name

    string The name of the data source. It must be unique within the Immuta tenant.

    Yes

    sqlTableName

    string A string that represents this data source's table in Immuta.

    Yes

    organization

    string The organization that owns the data source.

    Yes

    category

    string The category of the data source.

    No

    description

    string The description of the data source.

    No

    hasExamples

    boolean When true, the data source contains examples.

    No

    Update the data source metadata associated with the provided handler ID
    Update the data source metadata associated with the provided connection string
    Recalculate the high cardinality column for the specified data source
    Refresh the view of a data source.

    name string

    The name of the domain.

    description string

    The description of the domain that will be displayed for users.

    createdBy integer

    The unique identifier of the user who created the domain.

    profile.name string

    The name of the user who created the domain.

    createdAt timestamp

    The date and time the domain was created.

    updatedAt timestamp

    The date and time the domain was updated.

    type string

    The type of collection. Value is domain.

    Endpoints and methods

    Method
    Endpoint
    Description

    POST

    Creates a new domain

    GET

    Retrieves all domains

    GET

    Retrieves a specific domain

    GET

    Retrieves all permission IDs for a specific domain

    POST /collection

    Create a new domain. You must have the global GOVERNANCE permission to create a domain. You can add data sources to the domain after creating the domain.

    Body parameters

    Parameter
    Description
    Required or Optional
    Default values
    Accepted values

    id string

    The unique identifier of the domain.

    Optional

    -

    -

    name string

    The name of the domain.

    Required

    -

    -

    Response

    Returns a domains object.

    GET /collection

    Retrieve domains created in Immuta. These results can be filtered by permission or by name.

    Query parameters

    The following table describes optional query parameters for retrieving domains.

    Parameter
    Description
    Accepted values

    type string

    The type of collection.

    domain

    offset integer

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of domains. For example, to return the second and third domain in the response, you would set offset=1 and size=2.

    Minimum value is 0. Maximum value is the total number of domains minus size.

    size integer

    The number of domains to return.

    Minimum value is 1. Maximum value is the total number of domains.

    searchText string

    The text to search for in domain names. This will return domains with a name that contains this search text.

    Response

    Returns a data property that contains an array of up to size domain objects. If no domains exist, the array will be empty.

    GET /collection/{collectionId}

    Retrieve a domain with the given collectionId to view the data sources, description, and assigned permissions associated with the domain.

    Path parameter

    Parameter
    Description

    collectionId string

    The unique identifier of the domain.

    Response

    Returns a domains object.

    GET /collection/{collectionId}/allPermissions

    Retrieve all permissions assigned to the specified domain.

    Path parameter

    Parameter
    Description

    collectionId string

    The unique identifier of the domain.

    Query parameters

    Parameter
    Description

    type string

    The type of permission to return. Acceptable values include Manage Policies and Audit Activity.

    offset integer

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of permissions. For example, to return the second and third permissions in the response, you would set offset=1 and size=2.

    size integer

    The number of permissions to return.

    Response

    Returns an array of domain permission objects that represent a permission in a domain assigned to a specific user.

    GET /collection/{collectionType}/{collectionName}

    Retrieve a domain with the given collectionName to view the data sources, description, and assigned permissions associated with the domain.

    Path parameters

    Parameter
    Description

    collectionType string

    The type of collection. The accepted value is domain.

    collectionName string

    The name of the domain.

    Response

    Returns a domains object.

    PUT /collection/{collectionId}

    Change the domain name or description. You must have the global GOVERNANCE permission to update the domain.

    Parameters

    Path parameter

    Parameter
    Description

    collectionId string

    The unique identifier of the domain.

    Body parameters

    Parameter
    Description
    Required or Optional
    Default values
    Accepted values

    name string

    The name of the domain.

    Optional

    -

    -

    description string

    The description of the domain that will be displayed for users.

    Optional

    -

    -

    Response

    Returns a domains object with the new name or description.

    DELETE /collection/{collectionId}

    Delete a domain. The domain must have zero data sources for a user with the global GOVERNANCE permission to delete the domain.

    Parameters

    Path parameter

    Parameter
    Description

    collectionId string

    The unique identifier of the domain.

    Query parameter

    Parameter
    Description

    dryRun boolean

    If true, the domain will not be deleted.

    Response

    Returns a 204 code when the domain is successfully deleted. Additional responses are provided below:

    • 400: An invalid ID was provided.

    • 404: The domain was not found.

    POST /collection/{collectionId}/datasources

    Add existing data sources to a domain. You must have the GOVERNANCE permission.

    The request will fail if any data source IDs that have already been assigned to a domain are included in the payload.

    Parameters

    Path parameter

    Parameter
    Description

    collectionId string

    The unique identifier of the domain.

    Body parameter

    Parameter
    Description
    Required or Optional
    Default values
    Accepted values

    dataSourceId integer

    The unique identifier of the data source in Immuta.

    Required

    -

    -

    Response

    Returns a unique identifier of the background job that adds the data sources to the domain.

    GET /collection/{collectionId}/datasources

    Retrieve the data sources within a domain.

    Parameters

    Path parameter

    Parameter
    Description

    collectionId string

    The unique identifier of the domain.

    Query parameters

    Parameter
    Description
    Accepted values

    offset integer

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of data sources. For example, to return the second and third data source in the response, you would set offset=1 and size=2.

    Minimum value is 0. Maximum value is the total number of data sources minus size.

    size integer

    The number of data sources to return.

    Minimum value is 1. Maximum value is the total number of data sources.

    searchText string

    The text to search for in data source names. This will return data sources with a name that contains this search text.

    -

    dataSourceIds integer

    Filters search results by data source ID.

    Response

    Returns a data property that contains an array of up to size data sources. Each entry in the array is a separate data source. If there are no data sources in the domain, the array will be empty.

    DELETE /collection/{collectionId}/datasources/{dataSourceId}

    Remove data sources from a domain. To remove data sources from a domain, you must have the global CREATE_DATA_SOURCE permission.

    Path parameters

    Parameter
    Description

    collectionId string

    The unique identifier of the domain from which to remove the data source.

    dataSourceId integer

    The unique identifier of the data source to remove.

    Response

    Returns a 204 code when the data source is successfully removed from the domain. Additional responses are included below:

    • 403: Requesting user does not have permission to remove the data source.

    • 404: The specified collection or data source was not found.

    POST /collection/{collectionId}/permissions

    Assign domain permissions to a specific user. You must have the global USER_ADMIN permission to assign domain permissions to users.

    Domains permissions object attributes

    Attribute
    Description

    id string

    The unique identifier of the permissions object.

    profileId integer

    The unique identifier of the user the permission is assigned to.

    groupId integer

    The unique identifier of the group the permission is assigned to.

    collectionId string

    The unique identifier of the domain.

    permission string

    The permission assigned to the user. Accepted values are Manage Policies or Audit Activity.

    createdAt timestamp

    The date and time the permission object was created.

    Parameters

    Path parameter

    Parameter
    Description

    collectionId string

    The unique identifier of the domain.

    Body parameters

    Parameter
    Description
    Required or Optional
    Default values
    Accepted values

    groupId integer

    The unique identifier of the group the permission is assigned to.

    Optional

    []

    -

    profileId integer

    The unique identifier of the user in the identity manager.

    Optional

    []

    -

    Response

    Returns an array of domain permission objects that represent a permission in a domain assigned to a specific user. If the permission had already been assigned to the user for that domain, the response will include an error for the permissions that were not assigned to that user because the permission already existed.

    POST /collection/{collectionId}/permissions/bulk-delete

    Remove permissions from multiple users or groups in a domain.

    Required Immuta permission: USER_ADMIN

    Parameters

    Path parameter

    Parameter
    Description

    collectionId string

    The unique identifier of the domain.

    Body parameters

    Parameter
    Description
    Required or Optional
    Default values
    Accepted values

    collectionPermissions.groupId integer

    The unique identifier of the group the permission is assigned to.

    Required if profileId is not provided

    -

    -

    collectionPermissions.profileId integer

    The unique identifier of the user the permission is assigned to.

    Required if groupId is not provided

    -

    -

    Response

    Returns an array of domain permission objects that represent a permission in a domain deleted from that specific user or group. Response includes permissions that failed to delete.

    GET /collection/{collectionId}/permissions/{memberType}

    Retrieve a list of permissions associated with the domain.

    Parameters

    Path parameters

    Parameter
    Description

    collectionId string

    The unique identifier of the domain.

    memberType string

    The type of member to get a list of permissions for. Possible values include user or group.

    Query parameters

    Parameter
    Description
    Accepted values

    type string

    The permission to return.

    • Manage Policies

    • Audit Activity

    offset integer

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of domain users. For example, to return the second and third domain users in the response, you would set offset=1 and size=2.

    Minimum value is 0. Maximum value is the total number of domain users minus size.

    size integer

    The number of users to return.

    Minimum value is 1. Maximum value is the total number of domain users.

    searchText string

    A string used to filter the results returned by the name.

    Response

    Returns a data property that contains an array of users or groups who have been assigned that permission in the domain.

    GET /collection/permissions/{memberType}/{memberId}

    Retrieve a list of permissions for the specified user or group across all domains they are a member of.

    Parameters

    Path parameters

    Parameter
    Description

    memberType string

    The type of member to get a list of permissions for. Possible values include user or group.

    memberId string

    The unique identifier of the user or group.

    Query parameters

    Parameter
    Description
    Accepted values

    type string

    The permission to return.

    • Manage Policies

    • Audit Activity

    offset integer

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of domain permissions. For example, to return the second and third permission in the response, you would set offset=1 and size=2.

    Minimum value is 0. Maximum value is the total number of domain permissions that user or group has minus size.

    size integer

    The number of permissions to return.

    Minimum value is 1. Maximum value is the total number of domain permissions that user or group has.

    searchText string

    A string used to filter the results returned by the name.

    Response

    Returns a data property that contains an array of permissions that have been assigned to the user or group in all the domains they are a member of.

    DELETE /collection/{collectionId}/permissions/{permissionId}

    Remove a domain permission from a specific user or group. You must have the global USER_ADMIN permission to remove domain permissions from users and groups.

    Path parameters

    Parameter
    Description

    collectionId string

    The unique identifier of the domain.

    permissionId string

    The unique identifier of the assigned permission.

    Response

    Returns a 204 code when the permission is successfully removed from the user. Additional responses are provided below:

    • 400: Invalid permission

    • 404: Collection or permission not found

    DELETE /collection/{collectionId}/permissions/{memberType}/{memberId}/{permissionType}

    Remove a domain permission based on the permission type. You must have the global USER_ADMIN permission to remove domain permissions from users and groups.

    Path parameters

    Parameter
    Description

    collectionId string

    The unique identifier of the domain.

    memberType string

    The type of member to remove the permission from. Possible values include user or group.

    memberId number

    The unique identifier of the user or group.

    permissionType string

    The type of permission to delete. Accepted values are Manage Policies or Audit Activity.

    Response

    Returns a 204 code when the permission is successfully removed. Additional responses are provided below:

    • 400: Invalid permission

    • 404: Collection or permission not found

    id string

    The unique identifier of the domain.

    curl -X 'POST' \
        'https://your.immuta.url.com/collection' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: Bearer 09a0ffd7512f4aeeb66c09f3111c436c' \
        -d '{
        "id": "c7458ee9-03e5-4b6f-8395-ad4e49235428",
        "name": "Research",
        "description": "This domain is for research team data.",
        "type": "domain"
        }'
    {
      "id": "c7458ee9-03e5-4b6f-8395-ad4e49235428",
      "type": "domain",
      "name": "Research",
      "description": "This domain is for research team data.",
      "createdAt": "2023-05-10T14:55:29.289Z",
      "updatedAt": "2023-05-10T14:55:29.289Z",
      "createdBy": 2,
      "profile": {
        "name": "Example User"
      }
    }
    curl -X 'GET' \
        'https://your.immuta.url.com/collection?type=domain&offset=0&size=10' \
        -H 'accept: application/json' \
        -H 'Authorization: Bearer 9b06b571ab2c45f7ba315a3d80b6b6ec'
    {
      "data": [{
        "id": "c7458ee9-03e5-4b6f-8395-ad4e49235428",
        "type": "domain",
        "name": "Marketing domain",
        "description": "This is a collection of marketing data.",
        "createdAt": "2023-05-10T14:55:29.289Z",
        "updatedAt": "2023-05-10T14:55:29.289Z",
        "createdBy": 2,
        "profile": {
          "name": "Example User"
          }
        },
        {
        "id": "2",
        "type": "domain",
        "name": "Test 2",
        "description": "Another test",
        "createdAt": "2023-05-10T15:06:15.047Z",
        "updatedAt": "2023-05-10T15:06:15.047Z",
        "createdBy": 2,
        "profile": {
          "name": "Example User"
          }
        }],
      "total": 2
    }
    curl -X 'GET' \
        'https://your.immuta.url.com/collection/c7458ee9-03e5-4b6f-8395-ad4e49235428' \
        -H 'accept: application/json' \
        -H 'Authorization: Bearer 9b06b571ab2c45f7ba315a3d80b6b6ec'
    {
      "id": "c7458ee9-03e5-4b6f-8395-ad4e49235428",
      "type": "domain",
      "name": "Research",
      "description": "This domain is for research team data.",
      "createdAt": "2023-05-10T14:55:29.289Z",
      "updatedAt": "2023-05-10T14:55:29.289Z",
      "createdBy": 2,
      "profile": {
        "name": "Example User"
      }
    }
    curl -X 'GET' \
        'https://your.immuta.url.com/collection/c7458ee9-03e5-4b6f-8395-ad4e49235428/allPermissions' \
        -H 'accept: application/json' \
        -H 'Authorization: Bearer 9b06b571ab2c45f7ba315a3d80b6b6ec'
    {
      "data": [
        {
          "id": "3bafcd54-a18d-406d-a514-cb8a38586b7d",
          "name": "Taylor",
          "profileId": 2,
          "collectionId": "c7458ee9-03e5-4b6f-8395-ad4e49235428",
          "groupId": null,
          "permission": "Manage Policies",
          "createdAt": "2024-05-17T17:25:46.581Z"
        }
      ],
      "total": 1
    }
    curl -X 'GET' \
        'https://your.immuta.url.com/collection/domain/Research' \
        -H 'accept: application/json' \
        -H 'Authorization: Bearer 9b06b571ab2c45f7ba315a3d80b6b6ec'
    {
      "id": "c7458ee9-03e5-4b6f-8395-ad4e49235428",
      "type": "domain",
      "name": "Research",
      "description": "This domain is for research team data.",
      "createdAt": "2023-05-10T14:55:29.289Z",
      "updatedAt": "2023-05-10T14:55:29.289Z",
      "createdBy": 2,
      "profile": {
        "name": "Example User"
      }
    }
    curl -X 'PUT' \
        'https://your.immuta.url.com/collection/c7458ee9-03e5-4b6f-8395-ad4e49235428' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: Bearer 71bd4a7088554159a7ad1ade9242568f' \
        -d '{
        "name": "HR Research",
        "description": "This domain is specifically for human resources data and research."
        }'
    {
      "id": "c7458ee9-03e5-4b6f-8395-ad4e49235428",
      "type": "domain",
      "name": "HR Research",
      "description": "This domain is specifically for human resources data and research.",
      "createdAt": "2023-05-11T14:50:40.855Z",
      "updatedAt": "2023-05-11T14:53:21.235Z",
      "createdBy": 2,
      "profile": {
        "name": "Example User"
      }
    }
    curl -X 'DELETE' \
        'https://your.immuta.url.com/collection/c7458ee9-03e5-4b6f-8395-ad4e49235428' \
        -H 'accept: application/json' \
        -H 'Authorization: Bearer 71bd4a7088554159a7ad1ade9242568f'
    curl -X 'POST' \
        'https://your.immuta.url.com/collection/c7458ee9-03e5-4b6f-8395-ad4e49235428/datasources' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: Bearer 71bd4a7088554159a7ad1ade9242568f' \
        -d '[
        {
          "dataSourceId": 36
        }
        ]'
    {
      "jobId": "e48e15a0-ef5c-11ed-892c-a75afcd86969"
    }
    curl -X 'GET' \
        'https://your.immuta.url.com/collection/c7458ee9-03e5-4b6f-8395-ad4e49235428/datasources?offset=0&size=10' \
        -H 'accept: application/json' \
        -H 'Authorization: Bearer 71bd4a7088554159a7ad1ade9242568f'
    {
      "data": [{
        "dataSourceId": 36,
        "createdAt": "2023-05-10T18:02:57.068Z",
        "name": "HR Data",
        "type": "queryable",
        "platform": "PostgreSQL",
        "connectionString": "[email protected]:5432/public",
        "schema": "public",
        "table": "research_data",
        "tags": []
        }],
      "total": 1
    }
    curl -X 'DELETE' \
        'https://your.immuta.url.com/collection/c7458ee9-03e5-4b6f-8395-ad4e49235428/datasources/36' \
        -H 'accept: application/json' \
        -H 'Authorization: Bearer 71bd4a7088554159a7ad1ade9242568f'
    curl -X 'POST' \
        'https://your.immuta.url.com/collection/c7458ee9-03e5-4b6f-8395-ad4e49235428/permissions' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: Bearer 71bd4a7088554159a7ad1ade9242568f' \
        -d '[
        {
          "profileId": 2,
          "permission": "Manage Policies"
        },
        {
          "profileId": 3,
          "permission": "Manage Policies"
        }
        ]'
    {
      "success": [
        {
          "id": "c2ec9049-ac93-4700-9e21-f0ec3a0de6bb",
          "profileId": 3,
          "collectionId": "c7458ee9-03e5-4b6f-8395-ad4e49235428",
          "permission": "Manage Policies",
          "createdAt": "2023-05-10T18:37:05.847Z"
        }
      ],
      "errors": [
        {
          "profileId": 2,
          "collectionId": "c7458ee9-03e5-4b6f-8395-ad4e49235428",
          "permission": "Manage Policies",
          "message": "Permission already exists"
        }
      ]
    }
    curl -X 'POST' \
        'https://your.immuta.url.com/collection/c7458ee9-03e5-4b6f-8395-ad4e49235428/permissions/bulk-delete' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: Bearer 71bd4a7088554159a7ad1ade9242568f' \
        -d '[
        {
          "collectionPermissions": [
            {
              "profileId": 2,
              "permission": "Manage Policies"
            },
            {
              "profileId": 3,
              "permission": "Manage Policies"
            }
          ]
        }
        ]'
    {
      "success": [
        "d6378973-e15d-4310-8f1e-671c6b08e6a2",
        "83e6cb4a-4f41-47b4-b455-16fe518d5068"
      ],
      "errors": []
    }
    curl -X 'GET' \
        'https://your.immuta.url.com/collection/c7458ee9-03e5-4b6f-8395-ad4e49235428/permissions/user?offset=0&size=10' \
        -H 'accept: application/json' \
        -H 'Authorization: Bearer 71bd4a7088554159a7ad1ade9242568f'
    {
      "data": [{
        "id": "1bf5fa36-8130-4f72-8f4f-d1f18c25c2a2",
        "name": "Example User",
        "profileId": 2,
        "collectionId": "c7458ee9-03e5-4b6f-8395-ad4e49235428",
        "permission": "Manage Policies",
        "source": [
          "User Permission(s)"
        ]
        },
        {
        "id": "6172d495-c560-4ae1-bceb-cc6ce15e55ec",
        "name": "Example User 2",
        "profileId": 3,
        "collectionId": "c7458ee9-03e5-4b6f-8395-ad4e49235428",
        "permission": "Manage Policies",
        "source": [
          "User Permission(s)"
        ]
        }],
      "total": 2
    }
    curl -X 'GET' \
        'https://your.immuta.url.com/collection/permissions/user/2?offset=0&size=10' \
        -H 'accept: application/json' \
        -H 'Authorization: Bearer 71bd4a7088554159a7ad1ade9242568f'
    {
      "data": [{
        "profileId": 2,
        "name": "Taylor",
        "collectionId": "c7458ee9-03e5-4b6f-8395-ad4e49235428",
        "collectionName": "Marketing domain",
        "permission": "Manage Policies",
        "source": [
          "User Permission(s)"
        ],
        "userObjectId": 2,
        "iamId": "bim"
        },
        {
        "profileId": 2,
        "name": "Taylor",
        "collectionId": "a5678ef9-53e5-4b6f-8395-aa4e49237689",
        "collectionName": "Customer support domain",
        "permission": "Manage Policies",
        "source": [
          "User Permission(s)"
        ],
        "userObjectId": 2,
        "iamId": "bim"
        }
        ]
    }
    curl -X 'DELETE' \
        'https://your.immuta.url.com/collection/c7458ee9-03e5-4b6f-8395-ad4e49235428/permissions/c2ec9049-ac93-4700-9e21-f0ec3a0de6bb' \
        -H 'accept: application/json' \
        -H 'Authorization: Bearer 71bd4a7088554159a7ad1ade9242568f'
    curl -X 'DELETE' \
        'https://your.immuta.url.com/collection/c7458ee9-03e5-4b6f-8395-ad4e49235428/permissions/user/2/Manage%20Policies' \
        -H 'accept: application/json' \
        -H 'Authorization: Bearer 71bd4a7088554159a7ad1ade9242568f'

    GET

    /collection/{collectionType}/{collectionName}

    Retrieves a specific domain by name

    PUT

    /collection/{collectionId}

    Updates a domain name or description

    DELETE

    /collection/{collectionId}

    Deletes a domain

    POST

    /collection/{collectionId}/datasources

    Adds data sources to a domain

    GET

    /collection/{collectionId}/datasources

    Retrieves the data sources in the domain

    DELETE

    /collection/{collectionId}/datasources/{dataSourceId}

    Deletes a data source from a domain

    POST

    /collection/{collectionId}/permissions

    Assigns a domain permission to a user

    POST

    /collection/{collectionId}/permissions/bulk-delete`

    Deletes multiple permissions from a collection

    GET

    /collection/{collectionId}/permissions/{memberType}

    Retrieves user permissions assigned in the domain

    DELETE

    /collection/{collectionId}/permissions/{permissionId}

    Removes a domain permission from a user by the permission ID

    DELETE

    /collection/{collectionId}/permissions/{memberType}/{memberId}/{permissionType}

    Removes a domain permission from a user by the user ID and permission type

    GET

    /collection/permissions/{memberType}/{memberId}

    Retrieve a list of permissions for the specified user or group across all domains they are a member of

    description string

    The description of the domain that will be displayed for users.

    Optional

    -

    -

    type string

    The type of collection.

    Required

    domain

    domain

    -

    withPermissions string

    Only returns domains that the querying user has been granted the permission in.

    • Manage Policies

    • Audit Activity

    isExactMatch boolean

    If true, will only return domains with the exact name.

    true or false

    isCollectionPolicySearch boolean

    If true, will only return domains that the user can modify policies on.

    true or false

    -

    source string

    Indicates whether the permission was assigned as a user permission or a group permission.

    permission string

    The domain permission assigned to the user.

    Required

    -

    • Manage Policies

    • Audit Activity

    collectionPermissions.permission string

    The domain permission assigned to the user or group.

    Required

    -

    • Manage Policies

    • Audit Activity

    -

    sortField string

    Specifies the field to sort the results by.

    • collectionId

    • name

    • profileId

    sortOrder string

    Specifies how to sort the results of the request.

    • asc

    • desc

    -

    sortField string

    Specifies the field to sort the results by.

    • collectionId

    • name

    • profileId

    sortOrder string

    Specifies how to sort the results of the request.

    • asc

    • desc

    /collection
    /collection
    /collection/{collectionId}
    /collection/{collectionId}/allPermissions

    Integrations API Endpoints

    The integrations resource allows you to create, configure, and manage your integration. How Immuta manages and administers policies in your data platform varies by integration.

    To configure or manage an integration, users must have the APPLICATION_ADMIN Immuta permission.

    Endpoints

    Method
    Endpoint
    Description

    GET /integrations

    Gets all integration configurations.

    Response

    The response returns the configuration for all integrations. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    POST /integrations

    Creates an integration configuration that allows Immuta to manage access policies on data registered in Immuta.

    Amazon S3 example

    When you connect Immuta to your AWS account, the awsLocationPath is the base S3 location prefix that Immuta will use for this connection when registering S3 data sources.

    This request configures the integration using the AWS access key authentication method.

    Azure Synapse Analytics example

    When you connect Immuta to your Azure Synapse Analytics account, the schema you specify is where all the policy-enforced views will be created and managed by Immuta.

    Databricks Unity Catalog example

    This request creates a Databricks Unity Catalog integration configuration that allows Immuta to administer Unity Catalog policies on data registered in Immuta.

    Google BigQuery example

    When you connect Immuta to your Google BigQuery account, the dataset you specify is where all the policy-enforced views will be created and managed by Immuta.

    Redshift example

    When you connect Immuta to your Redshift account, the Immuta system user will use the database you specify to manage and store metadata. The initial database (REDSHIFT_SAMPLE_DATA, in the request below) is an existing Redshift database that Immuta connects to in order to create the Immuta-managed database (immuta, in the request below).

    This request specifies userPassword as the authentication type for the Immuta system user. The username and password provided are credentials for a system account that can manage the database.

    Snowflake example

    When you connect Immuta to your Snowflake account, the warehouse you specify is the default pool of compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

    This request specifies userPassword authentication type. The username and password provided are credentials of a Snowflake account attached to a role with . These credentials are not stored; they are used by Immuta to configure the integration.

    Starburst (Trino) example

    When you configure the Starburst (Trino) integration, Immuta generates an API key and configuration snippet on the Immuta app settings page that you will use to configure your Starburst cluster.

    Body parameters

    The request accepts a JSON or YAML payload with the parameters outlined below.

    Parameter
    Description
    Required or optional
    Default values
    Accepted values

    Query parameter

    Parameter
    Description
    Required or optional

    Response

    The response returns the status of the integration configuration connection. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    DELETE /integrations/{id}

    Deletes the integration configuration you specify in the request.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameter

    Parameter
    Description
    Required or optional

    Body parameters

    For Amazon S3 integrations, Databricks Unity Catalog integrations, Google BigQuery integrations, Starburst (Trino) integrations, or integration configurations with autoBootstrap set to false, no payload is required to delete the integration.

    For the integrations below, the request accepts a JSON or YAML payload when autoBootstrap is set to true. See the payload description for your integration for parameters and details:

    Response

    The response returns the status of the integration configuration that has been deleted. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    GET /integrations/{id}

    Gets the integration configuration you specify in the request.

    Request parameter

    Parameter
    Description
    Required or optional

    Response

    The response returns an integration configuration. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    PUT /integrations/{id}

    Updates an existing integration configuration.

    Amazon S3 example

    This request changes the name of the integration.

    Azure Synapse Analytics example

    This request enables user impersonation for the Azure Synapse Analytics integration.

    Databricks Unity Catalog example

    This request updates the access token.

    Google BigQuery example

    This request updates the private key for the Google BigQuery integration.

    Redshift example

    This request enables user impersonation for the Redshift integration.

    Snowflake example

    This request enables auditing queries run in Snowflake.

    Body parameters

    The request accepts a JSON or YAML payload with the parameters outlined below.

    Parameter
    Description
    Required or optional
    Default values
    Accepted values

    Query parameter

    Parameter
    Description
    Required or optional

    Response

    The response returns the status of the integration configuration connection. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    POST /integrations/{id}/regenerate

    Regenerates an Immuta API key for the configured integration.

    Starburst (Trino) example

    This request regenerates an Immuta API key for the configured Starburst (Trino) integration. Once you make this request, your old Immuta API key will be deleted and will no longer be valid. See the for instructions on updating your Starburst (Trino) integration to use the new API key.

    Response

    The response returns the new Immuta API key. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    GET /integrations/{id}/status

    Gets the status of the integration specified in the request.

    Request parameter

    Parameter
    Description
    Required or optional

    Response

    The response returns the of the specified integration. An unsuccessful request returns the HTTP status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    POST /integrations/scripts/cleanup

    Creates a script to remove Immuta-managed resources from your platform. This endpoint is for Azure Synapse Analytics, Redshift, and Snowflake integrations that were not successfully created and, therefore, do not have an integration ID.

    For Azure Synapse Analytics integrations, you must also make a request to the to create another script that will finish removing Immuta-managed resources from the platform.

    Body parameters

    The request accepts a JSON or YAML payload with the parameters outlined below.

    Parameter
    Description
    Required or optional
    Default values
    Accepted values

    Response

    The response returns the script that you will run in your Azure Synapse Analytics, Redshift, or Snowflake environment.

    Once you have run the script,

    • use the DELETE /integrations/{id} endpoint to delete your Redshift or Snowflake integration in Immuta:

    • use the

    POST /integrations/scripts/create

    Creates a script for you to run manually to set up objects and resources for Immuta to manage and enforce access controls on your data. This endpoint is available for Azure Synapse Analytics, Databricks Unity Catalog, Redshift, and Snowflake integrations.

    Body parameters

    The request accepts a JSON or YAML payload with the parameters outlined below.

    Parameter
    Description
    Required or optional
    Default values
    Accepted values

    Response

    The response returns the script that you will run in your Azure Synapse Analytics, Databricks Unity Catalog, Redshift, or Snowflake environment.

    POST /integrations/{id}/scripts/delete

    Creates a script to remove Immuta-managed resources from your platform. This endpoint is for Azure Synapse Analytics, Redshift, and Snowflake integrations that were successfully created.

    Response

    The response returns the script that you will run in your Azure Synapse Analytics, Redshift, or Snowflake environment.

    Once you have run the script, use the DELETE /integrations/{id} endpoint to delete your integration in Immuta:

    POST /integrations/{id}/scripts/edit

    Creates a script for you to run manually to edit objects and resources managed by Immuta in your platform. This endpoint is available for Azure Synapse Analytics, Redshift, and Snowflake integrations.

    Body parameters

    The request accepts a JSON or YAML payload with the parameters outlined below.

    Parameter
    Description
    Required or optional
    Default values
    Accepted values

    Response

    The response returns the script that you will run in your Azure Synapse Analytics, Redshift, or Snowflake environment. Once you have run the script, use the PUT /integrations/{id} endpoint to finish editing your integration:

    POST /integrations/scripts/initial-create

    Creates the first script for you to run manually to set up objects and resources for Immuta to manage and enforce access controls on your data in Azure Synapse Analytics or Redshift integrations.

    Body parameters

    The request accepts a JSON or YAML payload with the parameters outlined below.

    Parameter
    Description
    Required or optional
    Default values
    Accepted values

    Response

    The response returns the script that you will run in your Azure Synapse Analytics or Redshift environment.

    Once you have run this script, use the to generate a script to finish creating the Immuta-managed resources in your platform.

    POST /integrations/scripts/post-cleanup

    Creates a second script to remove the final Immuta-managed resources from your Azure Synapse Analytics platform. This endpoint is for Azure Synapse Analytics integrations that were not successfully created and, therefore, do not have an integration ID.

    Before making a request like the one below, you must make a request to the to create the first script that will remove the initial Immuta-managed resources from the platform.

    Body parameters

    The request accepts a JSON or YAML payload with the parameters outlined below.

    Parameter
    Description
    Required or optional
    Default values
    Accepted values

    Response

    The response returns the script that you will run in your Azure Synapse Analytics environment.

    Once you have run the script, use the DELETE /integrations/{id} endpoint to delete your integration in Immuta by following the instructions.

    Related guides

    See the following how-to guides for configuration examples and steps for creating, managing, or deleting your integration:

    config object

    This object specifies the integration settings. See the config object description for your integration for details: , , , , , or .

    Required for all integrations except Starburst (Trino)

    -

    -

    config object

    This object specifies the integration settings. See the config object description for your integration for details: , , , , or .

    Required

    -

    -

    config object

    This object specifies the integration settings. See the config object description for your integration for details: , , or .

    Required

    -

    -

    to create another script that will finish removing Immuta-managed resources from your Azure Synapse Analytics platform.

    config object

    This object specifies the integration settings. See the config object description for your integration for details: , , , or .

    Required

    -

    -

    config object

    This object specifies the integration settings. Some settings cannot be changed once an integration is configured. See the config object description for your integration for details: , , or .

    Required

    -

    -

    config object

    This object specifies the integration settings. See the config object description of the or integration configuration for details.

    Required

    -

    -

    config object

    This object specifies the integration settings. See the config object description of for details.

    Required

    -

    -

    Configure a Redshift integration
  • Configure a Snowflake integration

  • Configure a Starburst (Trino) integration

  • GET

    /integrations

    Gets all integration configurations

    POST

    /integrations

    Creates an integration

    DELETE

    /integrations/{id}

    Deletes a configured integration

    GET

    /integrations/{id}

    Gets an integration configuration

    PUT

    /integrations/{id}

    Updates a configured integration

    POST

    /integrations/{id}/regenerate

    Regenerates an Immuta API key for the configured integration

    GET

    /integrations/{id}/status

    Gets the status of the specified integration

    POST

    /integrations/scripts/cleanup

    Creates a script to remove Immuta-managed resources from your platform for integrations that were not successfully created

    POST

    /integrations/scripts/create

    Creates a script to set up Immuta-managed resources in your platform

    POST

    /integrations/{id}/scripts/delete

    Creates a script to remove Immuta-managed resources from your platform for integrations that were successfully configured

    POST

    /integrations/{id}/scripts/edit

    Creates a script to edit existing Immuta-managed resources in your platform

    POST

    /integrations/scripts/initial-create

    Creates the first script to set up Immuta-managed resources in your Azure Synapse Analytics or Redshift platform

    POST

    /integrations/scripts/post-cleanup

    Creates the second script to remove Immuta-managed resources from your Azure Synapse Analytics integration if it was not successfully created

    type string

    The type of integration to configure.

    Required

    -

    • Azure Synapse Analytics

    • Databricks

    • Google BigQuery

    • Native S3

    • Redshift

    • Snowflake

    • Trino

    autoBootstrap boolean

    When true, Immuta will automatically configure the integration in your Azure Synapse Analytics, Databricks Unity Catalog, Redshift, or Snowflake environment for you. When false, you must set up your environment manually before configuring the integration with the API. This parameter must be set to false in the Amazon S3 and Google BigQuery configurations. See the specific how-to guide for configuring your integration for details: Azure Synapse Analytics, Databricks Unity Catalog, Redshift, Snowflake.

    Required for all integrations except Starburst (Trino)

    -

    true or false

    dryRun boolean

    When true, the integration configuration will not actually be created, and the response returns the validation tests statuses.

    Optional

    id number

    The unique identifier of the integration configuration.

    Required

    dryRun boolean

    When true, the integration configuration will not actually be deleted, and the response returns the validation tests statuses.

    Optional

    forceDisable boolean

    When true, the integration will be deleted in Immuta. Users must manually remove all Immuta objects in the remote data platform.

    Optional

    id number

    The unique identifier of the integration configuration.

    Required

    type string

    The type of integration to configure.

    Required

    -

    • Azure Synapse Analytics

    • Databricks

    • Google BigQuery

    • Redshift

    • Snowflake

    autoBootstrap boolean

    When true, Immuta will automatically configure the integration in your Azure Synapse Analytics, Databricks Unity Catalog, Redshift, or Snowflake environment for you. When false, you must set up your environment manually before configuring the integration with the API. This parameter must be set to false in the Google BigQuery configuration. See the specific how-to guide for configuring other integrations: Azure Synapse Analytics, Databricks Unity Catalog, Redshift, Snowflake.

    Required

    -

    true or false

    dryRun boolean

    When true, the integration configuration will not actually be updated, and the response returns the validation tests statuses.

    Optional

    id number

    The unique identifier of the integration configuration.

    Required

    type string

    The type of integration to clean up.

    Required

    -

    • Azure Synapse Analytics

    • Redshift

    • Snowflake

    autoBootstrap boolean

    Set to false to specify that you will run the script in your environment yourself to clean up the integration resources. See the Azure Synapse Analytics, Redshift, or Snowflake manual setup section for details.

    Required

    -

    false

    type string

    The type of integration to configure.

    Required

    -

    • Azure Synapse Analytics

    • Databricks

    • Redshift

    • Snowflake

    autoBootstrap boolean

    Set to false to specify that you will run the script in your environment yourself to configure the integration. You must run the Immuta script before creating the integration. See the Azure Synapse Analytics, Databricks Unity Catalog, Redshift, or Snowflake manual setup guides for details.

    Required

    -

    false

    type string

    The type of integration to configure.

    Required

    -

    • Azure Synapse Analytics

    • Databricks

    • Redshift

    • Snowflake

    autoBootstrap boolean

    Set to false to specify that you will run the script in your environment yourself to configure the integration. You must run the Immuta script before creating the integration. See the Azure Synapse Analytics, Redshift, or Snowflake manual setup guides for details.

    Required

    -

    false

    type string

    The type of integration to configure.

    Required

    -

    • Azure Synapse Analytics

    • Redshift

    autoBootstrap boolean

    Set to false to specify that you will run the script in your environment yourself to configure the integration. You must run the Immuta script before creating the integration. See the Azure Synapse Analytics or Redshift manual setup guides for details.

    Required

    -

    false

    type string

    The type of integration to clean up.

    Required

    -

    Azure Synapse Analytics

    autoBootstrap boolean

    Set to false to specify that you will run the script in your environment yourself to clean up the integration resources. See the Azure Synapse Analytics manual setup section for details.

    Required

    -

    false

    response schema reference
    HTTP status codes and error messages
    these privileges
    response schema reference
    HTTP status codes and error messages
    Delete Azure Synapse Analytics integration payload
    Delete Redshift integration payload
    Delete Snowflake integration payload
    response schema reference
    HTTP status codes and error messages
    response schema reference
    HTTP status codes and error messages
    response schema reference
    HTTP status codes and error messages
    Configure a Starburst (Trino) integration page
    HTTP status codes and error messages page
    status
    HTTP status codes and error messages
    /integrations/scripts/post-cleanup endpoint
    Delete Redshift integration
    Delete Snowflake integration
    /integrations/scripts/post-cleanup endpoint
    Delete Azure Synapse Analytics integration
    Delete Redshift integration
    Delete Snowflake integration
    Configure Azure Synapse Analytics integration
    Configure Redshift integration
    Configure Snowflake integration
    /integrations/scripts/create endpoint
    /integrations/scripts/cleanup endpoint
    Delete Azure Synapse Analytics integration
    Configure an Amazon S3 integration
    Configure an Azure Synapse Analytics integration
    Configure a Databricks Unity Catalog integration
    Configure a Google BigQuery integration
    curl -X 'GET' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    [
      {
        "id": "1",
        "status": "enabled",
        "validationResults": {
          "status": "passed",
          "validationTests": [
          {
            "name": "Initial Validation: Basic Connection Test",
            "status": "passed"
          },
          {
            "name": "Initial Validation: Default Warehouse Access Test",
            "status": "passed",
            "result": []
          },
          {
            "name": "Initial Validation: Validate access to Privileged Role",
            "status": "passed",
            "result": []
          },
          {
            "name": "Validate Automatic: Database Does Not Exist",
            "status": "passed"
          },
          {
            "name": "Validate Automatic: Impersonation Role Does Not Exist",
            "status": "skipped"
          },
          {
            "name": "Validate Automatic Bootstrap User Grants",
            "status": "passed"
          }
        ] },
        "type": "Snowflake",
        "autoBootstrap": true,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "port": 443,
          "audit": {
            "enabled": false
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "lineage": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "<REDACTED>",
          "password": "<REDACTED>",
          "role": "ACCOUNTADMIN"
        },
        {
          "id": "2",
          "status": "enabled",
          "type": "Databricks",
          "validationResults": {
            "status": "passed",
            "validationTests": [
            {
              "name": "Metastore validation",
              "status": "passed"
            },
            {
              "name": "Basic Connection Test",
              "result": [
              {
                "1": 1
              }
              ],
              "status": "passed"
            }
            ]
          },
          "autoBootstrap": true,
          "config": {
            "workspaceUrl": "www.example-workspace.cloud.databricks.com",
            "httpPath": "sql/protocolv1/o/0/0000-00000-abc123",
            "authenticationType": "token",
            "token": "REDACTED",
            "audit": {
              "enabled": false
            },
            "catalog": "immuta"
          }
        }
      }
    ]
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Native S3",
        "autoBootstrap": false,
        "config": {
          "name": "S3 integration",
          "awsAccountId": "123456789",
          "awsRegion": "us-east-1",
          "awsLocationRole": "arn:aws:iam::123456789:role/access-grants-instance-role",
          "awsLocationPath": "s3://",
          "authenticationType": "accessKey",
          "awsAccessKeyId": "123456789",
          "awsSecretAccessKey": "123456789"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Azure Synapse Analytics",
        "autoBootstrap": true,
        "config": {
          "host": "organization.azure.com",
          "schema": "sample_schema",
          "database": "immuta",
          "metadataDelimiters": {
            "hashDelimiter": "|",
            "hashKeyDelimiter": "-",
            "arrayDelimiter": ","
          },
          "username": "[email protected]",
          "password": "abc1234",
          "authenticationType": "userPassword"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Databricks",
        "autoBootstrap": true,
        "config": {
          "workspaceUrl": "www.example-workspace.cloud.databricks.com",
          "httpPath": "sql/protocolv1/o/0/0000-00000-abc123",
          "authenticationType": "token",
          "token": "REDACTED",
          "catalog": "immuta"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Google BigQuery",
        "autoBootstrap": false,
        "config": {
          "role": "immuta",
          "datasetSuffix": "_secureView",
          "dataset": "immuta",
          "location": "us-east1",
          "credential": "{\"type\":\"service_account\",\"project_id\":\"innate-conquest-123456\",\"private_key_id\":\"9163c12345690924f5dd218ff39\",\"private_key\":\"-----BEGIN PRIVATE KEY-----\nXXXXXXXro0s\n/yQlPQijowkccmrmWJyr93kdLnwJzBvLHCto/+W\ncvF2ygX9oM/dyUK//z//4nptMp+Ck//Yw3D4rIBwGu4DWiR1qRnf\nDoGyXfThPTQ==\n-----END PRIVATE KEY-----\n\",\"client_email\":\"service-account-id@innate-conquest-123456.iam.gserviceaccount.com\",\"client_id\":\"1166290***432952487857\",\"auth_uri\":\"https://accounts.google.com/o/oauth2/auth\",\"token_uri\":\"https://oauth2.googleapis.com/token\",\"auth_provider_x509_cert_url\":\"https://www.googleapis.com/oauth2/v1/certs\",\"client_x509_cert_url\":\"https://www.googleapis.com/robot/v1/metadata/x509/service-accound-id%40innate-conquest-123456.iam.gserviceaccount.com\",\"universe_domain\":\"googleapis.com\"}"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Redshift",
        "autoBootstrap": true,
        "config": {
          "host": "organization.aws.amazon.com",
          "database": "immuta",
          "initialDatabase": "REDSHIFT_SAMPLE_DATA",
          "authenticationType": "userPassword",
          "username": "[email protected]",
          "password": "abc1234"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": true,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "authenticationType": "userPassword",
          "username": "[email protected]",
          "password": "abc1234",
          "role": "ACCOUNTADMIN"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Trino"
        }'
    {
      "id": "123456789",
      "status": "creating",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "status": "passed"
        },
        {
          "name": "Initial Validation: Default Warehouse Access Test",
          "status": "passed",
          "result": []
        },
        {
          "name": "Initial Validation: Validate access to Privileged Role",
          "status": "passed",
          "result": []
        },
        {
          "name": "Validate Automatic: Database Does Not Exist",
          "status": "passed"
        },
        {
          "name": "Validate Automatic: Impersonation Role Does Not Exist",
          "status": "skipped"
        },
        {
          "name": "Validate Automatic Bootstrap User Grants",
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Snowflake integration already exists on host organization.us-east-1.snowflakecomputing.com (id = 123456789)"
    }
    curl -X 'DELETE' \
        'https://www.organization.immuta.com/integrations/123456789' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "authenticationType": "userPassword",
        "username": "[email protected]",
        "password": "abc1234",
        "role": "ACCOUNTADMIN"
        }'
    {
      "id": "123456789",
      "status": "deleting",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "status": "passed"
        },
        {
          "name": "Initial Validation: Default Warehouse Access Test",
          "status": "passed",
          "result": []
        },
        {
          "name": "Initial Validation: Validate access to Privileged Role",
          "status": "passed",
          "result": []
        },
        {
          "name": "Validate Automatic: Database Does Not Exist",
          "status": "passed"
        },
        {
          "name": "Validate Automatic: Impersonation Role Does Not Exist",
          "status": "skipped"
        },
        {
          "name": "Validate Automatic Bootstrap User Grants",
          "status": "passed"
        }
        ]
      }
    }
    curl -X 'GET' \
        'https://www.organization.immuta.com/integrations/123456789' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    {
      "id": "123456789",
      "status": "enabled",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "status": "passed"
        }, {
          "name": "Initial Validation: Default Warehouse Access Test",
          "result": [],
          "status": "passed"
        }, {
          "name": "Initial Validation: Table Grants Role Prefix is Unique",
          "status": "passed"
        }, {
          "name": "Initial Validation: Validate access to Privileged Role",
          "result": [],
          "status": "passed"
        }, {
          "name": "Validate Automatic: Database Does Not Exist",
          "status": "passed"
        }, {
          "name": "Validate Automatic: Impersonation Role Does Not Exist",
          "status": "skipped"
        }, {
          "name": "Validate Automatic Bootstrap User Grants",
          "status": "passed"
        }]
      },
      "type": "Snowflake",
      "autoBootstrap": true,
      "config": {
        "host": "organization.us-east-1.snowflakecomputing.com",
        "warehouse": "SAMPLE_WAREHOUSE",
        "database": "SNOWFLAKE_SAMPLE_DATA",
        "port": 443,
        "audit": {
          "enabled": false
        },
        "workspaces": {
          "enabled": false
        },
        "impersonation": {
          "enabled": false
        },
        "lineage": {
          "enabled": false
        },
        "authenticationType": "userPassword",
        "username": "<REDACTED>",
        "password": "<REDACTED>",
        "role": "ACCOUNTADMIN"
      }
    }
    curl -X 'PUT' \
        'https://www.organization.immuta.com/integrations/123456789' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Native S3",
        "autoBootstrap": false,
        "config": {
          "name": "S3 integration edited",
          "awsAccountId": "123456789",
          "awsRegion": "us-east-1",
          "awsLocationRole": "arn:aws:iam::123456789:role/access-grants-instance-role",
          "awsLocationPath": "s3://",
          "authenticationType": "accessKey",
          "awsAccessKeyId": "123456789",
          "awsSecretAccessKey": "123456789"
        }
        }'
    curl -X 'PUT' \
        'https://www.organization.immuta.com/integrations/123456789' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Azure Synapse Analytics",
        "autoBootstrap": true,
        "config": {
          "host": "organization.azure.com",
          "schema": "sample_schema",
          "database": "immuta",
          "impersonation": {
            "enabled": true,
            "role": "IMMUTA_IMPERSONATION"
          },
          "metadataDelimiters": {
            "hashDelimiter": "|",
            "hashKeyDelimiter": "-",
            "arrayDelimiter": ","
          },
          "username": "[email protected]",
          "password": "abc1234",
          "authenticationType": "userPassword"
        }
        }'
    curl -X 'PUT' \
        'https://www.organization.immuta.com/integrations/123456789' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Databricks",
        "autoBootstrap": true,
        "config": {
          "workspaceUrl": "www.example-workspace.cloud.databricks.com",
          "httpPath": "sql/protocolv1/o/0/0000-00000-abc123",
          "authenticationType": "token",
          "token": "REDACTED",
          "catalog": "immuta"
        }
        }'
      curl -X 'PUT' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Google BigQuery",
        "autoBootstrap": false,
        "config": {
          "role": "immuta",
          "datasetSuffix": "_secureView",
          "dataset": "immuta",
          "location": "us-east1",
          "credential": "{\"type\":\"service_account\",\"project_id\":\"innate-conquest-123456\",\"private_key_id\":\"9163c12345690924f5dd218ff39\",\"private_key\":\"-----BEGIN PRIVATE KEY-----\nXXXXXXXro0s\n/yQlPQijowkccmrmWJyr93kdLnwJzBvLHCto/+W\ncvF2ygX9oM/dyUK//z//4nptMp+Ck//Yw3D4rIBwGu4DWiR1qRnf\nDoGyXfThPTQ==\n-----END PRIVATE KEY-----\n\",\"client_email\":\"service-account-id@innate-conquest-123456.iam.gserviceaccount.com\",\"client_id\":\"1166290***432952487857\",\"auth_uri\":\"https://accounts.google.com/o/oauth2/auth\",\"token_uri\":\"https://oauth2.googleapis.com/token\",\"auth_provider_x509_cert_url\":\"https://www.googleapis.com/oauth2/v1/certs\",\"client_x509_cert_url\":\"https://www.googleapis.com/robot/v1/metadata/x509/service-accound-id%40innate-conquest-123456.iam.gserviceaccount.com\",\"universe_domain\":\"googleapis.com\"}"
        }
        }'
    curl -X 'PUT' \
        'https://www.organization.immuta.com/integrations/123456789' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Redshift",
        "autoBootstrap": true,
        "config": {
          "host": "organization.aws.amazon.com",
          "database": "immuta",
          "initialDatabase": "REDSHIFT_SAMPLE_DATA",
          "impersonation": {
            "enabled": true,
            "role": "immuta_impersonation"
          },
          "authenticationType": "okta",
          "okta": {
            "username": "[email protected]",
            "password": "abc1234",
            "appId": "Okta",
            "idpHost": "organization.okta.com",
            "role": "admin"
          }
        }
        }'
    curl -X 'PUT' \
        'https://www.organization.immuta.com/integrations/123456789' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": true,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "audit": {
            "enabled": true
          },
          "authenticationType": "userPassword",
          "username": "[email protected]",
          "password": "abc1234",
          "role": "ACCOUNTADMIN"
        }
        }'
    {
      "id": "123456789",
      "status": "editing",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "status": "passed"
        },
        {
          "name": "Initial Validation: Default Warehouse Access Test",
          "status": "passed",
          "result": []
        },
        {
          "name": "Initial Validation: Validate access to Privileged Role",
          "status": "passed",
          "result": []
        },
        {
          "name": "Validate Automatic: Database Does Not Exist",
          "status": "passed"
        },
        {
          "name": "Validate Automatic: Impersonation Role Does Not Exist",
          "status": "skipped"
        },
        {
          "name": "Validate Automatic Bootstrap User Grants",
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Unable to edit integration with ID 123456789 in current state editing."
    }
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/123456789/regenerate' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    { "newKey": "5bb6cae9******300c21acbb" }
    curl -X 'GET' \
        'https://www.organization.immuta.com/integrations/123456789/status' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    {"id":123456789,"status":"enabled"}
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/scripts/cleanup' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": false,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "audit": {
            "enabled": true
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "IMMUTA_SYSTEM_ACCOUNT",
          "password": "abc1234"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/scripts/create' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": false,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "audit": {
            "enabled": false
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "IMMUTA_SYSTEM_ACCOUNT",
          "password": "abc1234"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/1/scripts/delete' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/1/scripts/edit' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": false,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "audit": {
            "enabled": true
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "IMMUTA_SYSTEM_ACCOUNT",
          "password": "abc1234"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/scripts/initial-create' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Azure Synapse Analytics",
        "autoBootstrap": false,
        "config": {
          "host": "organization.azure.com",
          "schema": "sample_schema",
          "database": "immuta",
          "metadataDelimiters": {
            "hashDelimiter": "|",
            "hashKeyDelimiter": "-",
            "arrayDelimiter": ","
          },
          "username": "[email protected]",
          "password": "abc1234",
          "authenticationType": "userPassword"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/scripts/post-cleanup' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Azure Synapse Analytics",
        "autoBootstrap": false,
        "config": {
          "host": "organization.azure.com",
          "schema": "sample_schema",
          "database": "immuta",
          "metadataDelimiters": {
            "hashDelimiter": "|",
            "hashKeyDelimiter": "-",
            "arrayDelimiter": ","
          },
          "username": "[email protected]",
          "password": "abc1234",
          "authenticationType": "userPassword"
        }
        }'
    Amazon S3
    Azure Synapse Analytics
    Databricks Unity Catalog
    Google BigQuery
    Redshift
    Snowflake
    Azure Synapse Analytics
    Databricks Unity Catalog
    Google BigQuery
    Redshift
    Snowflake
    Azure Synapse Analytics
    Redshift
    Snowflake
    Azure Synapse Analytics
    Databricks Unity Catalog
    Redshift
    Snowflake
    Azure Synapse Analytics
    Redshift
    Snowflake
    Azure Synapse Analytics
    Redshift
    Azure Synapse Analytics

    Configure a Snowflake Integration

    In the Snowflake integration, Immuta manages access to Snowflake tables by administering Snowflake row access policies and column masking policies on those tables, allowing users to query tables directly in Snowflake while dynamic policies are enforced.

    Use the /integrations endpoint to

    • configure a Snowflake integration

    • get a Snowflake integration

    Requirements

    • APPLICATION_ADMIN Immuta permission

    • The Snowflake user running the installation, edit, or delete script must have the following privileges:

      • CREATE DATABASE ON ACCOUNT WITH GRANT OPTION

    Configure the integration

    You have two options for configuring your Snowflake integration:

    • : Grant Immuta one-time use of credentials to automatically configure your Snowflake environment and the integration. When performing an automated installation, Immuta requires temporary, one-time use of credentials with the Snowflake privileges listed in the .

      These privileges will be used to create and configure a new Immuta-managed database within the specified Snowflake instance. The credentials are not stored or saved by Immuta, and Immuta doesn’t retain access to them after initial setup is complete.

      You can create a new account for Immuta to use that has these privileges, or you can grant temporary use of a pre-existing account. By default, the pre-existing account with appropriate privileges is ACCOUNTADMIN. If you create a new account, it can be deleted after initial setup is complete.

    • : Run the Immuta script in your Snowflake environment yourself to configure your Snowflake environment and the integration. The specified role used to run the bootstrap needs to have the Snowflake privileges listed in the .

    Automatic setup

    1. Select the section below that matches your authentication method.

    2. Copy the request example and replace the values with your own as directed to configure the integration settings. The examples provided use JSON format, but the request also accepts YAML.

    See the for parameter definitions, value types, and additional configuration options.

    1. Replace the Immuta URL and with your own.

    2. Change the config values to your own, where

      • host is the URL of your Snowflake account.

    Response

    The response returns the status of the Snowflake integration configuration connection. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Manual setup

    Best practices

    The account you create for Immuta should only be used for the integration and should not be used as the credentials for creating data sources in Immuta; doing so will cause issues. Instead, create a separate, dedicated READ-ONLY account for creating and registering data sources within Immuta.

    To manually configure the integration, complete the following steps:

    Generate the script

    1. Select the tab below that matches your authentication method.

    2. Copy the request example and replace the values with your own as directed to generate the script. The examples provided use JSON format, but the request also accepts YAML.

    See the for parameter definitions, value types, and additional configuration options.

    1. Replace the Immuta URL and with your own.

    2. Change the config values to your own, where

      • host is the URL of your Snowflake account.

    Response

    The response returns the script for you to run in your environment.

    Configure the integration in Immuta

    1. Select the tab below that matches your authentication method.

    2. Copy the request example and replace the values with your own as directed to configure the integration settings. The examples provided use JSON format, but the request also accepts YAML. The parameters and values you provide in this payload must match those you provided when .

    See the for parameter definitions, value types, and additional configuration options.

    1. Replace the Immuta URL and with your own.

    2. Pass the same payload you sent when , where

      • host is the URL of your Snowflake account.

    Response

    The response returns the status of the Snowflake integration configuration connection. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Get an integration

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    3. Replace the {id} request parameter with the unique identifier of the integration you want to get. Alternatively, you can get a list of all integrations and their IDs with the .

    Response

    The response returns the Snowflake integration configuration. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Get all integrations

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    Response

    The response returns the configuration for all integrations. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Update an integration configuration

    You have two options for updating your integration. Follow the steps that match your initial configuration of autoBootstrap:

    • (autoBootstrap is true)

    • (autoBootstrap is false)

    Automatic update

    1. Select the section below that matches your authentication method.

    2. Copy the request example and replace the values with your own as directed to update the integration settings. The examples provided use JSON format, but the request also accepts YAML.

    See the for parameter definitions, value types, and additional configuration options.

    This request updates the configuration to enable query audit in Snowflake.

    1. Replace the Immuta URL and with your own.

    2. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    3. Change the config values to your own, where

    Response

    The response returns the status of the Snowflake integration configuration. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Manual update

    To manually update the integration, complete the following steps:

    Generate the updated script

    1. Select the tab below that matches your authentication method.

    2. Copy the request example and replace the values with your own as directed to generate the script. The examples provided use JSON format, but the request also accepts YAML.

    See the for parameter definitions, value types, and additional configuration options.

    This request updates the configuration to enable query audit in Snowflake.

    1. Replace the Immuta URL and with your own.

    2. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    3. Change the config values to your own, where

    Response

    The response returns the script for you to run in your environment.

    Update the integration in Immuta

    1. Select the section below that matches your authentication method.

    2. Copy the request example and replace the values with your own as directed to update the integration settings. The examples provided use JSON format, but the request also accepts YAML. The payload you provide must match the one you provided when .

    See the for parameter definitions, value types, and additional configuration options.

    This request updates the configuration to enable query audit in Snowflake.

    1. Replace the Immuta URL and with your own.

    2. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    3. Pass the same payload you sent when , where

    Response

    The response returns the status of the Snowflake integration configuration. See the for details about the response schema.

    A successful response includes the validation tests statuses.

    An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Delete an integration

    1. Copy the request example.

    2. Replace the Immuta URL and with your own.

    3. Replace the {id} request parameter with the unique identifier of the integration you want to delete.

    4. If you set

    Response

    The response returns the status of the Snowflake integration configuration that has been deleted. See the for details about the response schema. An unsuccessful request returns the status code and an error message. See the for a list of statuses, error messages, and troubleshooting guidance.

    Manage Data and Subscription Policies

    Policy API reference guide

    The policy endpoint allows you to manage and review policies in Immuta. This page outlines the endpoint and its request and response parameters.

    Additional fields may be included in some responses you receive; however, these attributes are for internal purposes and are therefore undocumented.

    Policy workflow

    1. .

    2. .

    3. .

    Create and manage policies

    Method
    Path
    Purpose

    Create a global policy with a specified entity type

    POST /policy/global

    Create a Global Policy with a given entityType.

    Query parameters

    Attribute
    Description
    Required

    Payload parameters

    See the for payload examples and details.

    Response parameters

    When successful, the response returns the body of the request payload.

    Request example

    This example request creates a Global Policy (saved in the example-payload.json file) in the Immuta tenant.

    Request payload example

    Response example

    Create or update a policy for a specific data source

    POST or PUT /policy/handler/{dataSourceId}

    Create (POST) or update (PUT) a policy for the specified data source.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request applies the policy specified in the payload to the data source with the ID 2.

    Request payload example

    Response example

    Apply a global policy to a data source

    Note: Global policies that contain the condition "with columns tagged" or "on all data sources" will automatically apply to relevant data sources when the policy is created. The endpoint detailed below can be used to apply Global Policies that contain the condition "when selected by data owners," as these policies are not automatically applied to data sources.

    POST /policy/global/applyPolicy

    Apply the Global Policy to the specified data source.

    Query parameters

    Attribute
    Description
    Required

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    None. When successful, no message will display.

    Request example

    This example request applies the specified Global Policy to the specified data source (saved in the example-payload.json file) in the Immuta tenant.

    Request payload example

    The following payload will apply the Global Policy with the ID 1 to the data source with ID 1.

    Update a global policy

    PUT /policy/global/{policyId}

    Update the specified policy.

    Query parameters

    Attribute
    Description
    Required

    Payload parameters

    See the for payload examples and details.

    Response parameters

    When successful, the response returns the body of the request payload.

    Request example

    This example request updates the specified Global Policy (8) with changes to the metadata saved in the example-payload.json file.

    Request payload example

    In this payload, the user updated the description attribute to update the policy.

    Response example

    Review policies

    Method
    Path
    Purpose

    Search for policies

    POST /policy/search

    Searches for specified policies.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request searches for a Global Policy that contains the text mask in Immuta.

    Response example

    Find policies by policy ID

    GET /policy/global/{policyId}

    Find the policy with the specified ID.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    The response returns a .

    Request example

    This example request returns the Global Policy with the ID 1.

    Response example

    Find policies by entity type

    GET /policy/global

    Find the policy with the specified entity type.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request returns the name, type, and ID of all policies.

    Response example

    Find the number of data sources a specified policy applies to

    GET /policy/global/appliedTo/{policyId}

    Find the number of data sources the specified policy applies to.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request returns the number of data sources the Global Policy with the ID 6 applies to.

    Response example

    Get the policy information for a specific data source

    GET /policy/dataSourcePolicies/{dataSourceId}

    Get the policy information for the specified data source.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request returns the information of policies applied to the data source with the ID 2.

    Response example

    Get the differences between two policy versions

    GET /policy/diff/{dataSourceId}

    Get the differences between two policy handler versions.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request returns the information of policies applied to the data source with the ID 3.

    Response example

    Get the policy handler metadata for a specific data source

    GET /policy/handler/{dataSourceId}

    Get the policy handler metadata for a specific data source.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request returns the policy handler metadata for policies applied to the data source with the ID 1.

    Response example

    Delete a global policy

    DELETE /policy/global/{policyId}

    Delete the specified Global Policy.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    The response returns a of the policy that was deleted.

    Request example

    The following request deletes the Global Policy with ID 6.

    Response example

    CREATE ROLE ON ACCOUNT WITH GRANT OPTION

  • CREATE USER ON ACCOUNT WITH GRANT OPTION

  • MANAGE GRANTS ON ACCOUNT WITH GRANT OPTION

  • APPLY MASKING POLICY ON ACCOUNT WITH GRANT OPTION

  • APPLY ROW ACCESS POLICY ON ACCOUNT WITH GRANT OPTION

  • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.
  • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

  • username and password are credentials of a Snowflake account attached to a role with the privileges outlined above. These credentials are not stored; they are used by Immuta to configure the integration.

  • role is a Snowflake role that has been granted the privileges outlined above.

  • Immuta will use the provided credentials to create a user called IMMUTA_SYSTEM_ACCOUNT and grant the following privileges to that user:

    • CREATE ROLE ON ACCOUNT WITH GRANT OPTION

    • APPLY MASKING POLICY ON ACCOUNT WITH GRANT OPTION

    • APPLY ROW ACCESS POLICY ON ACCOUNT WITH GRANT OPTION

    • MANAGE GRANTS ON ACCOUNT WITH GRANT OPTION

    Alternatively, you can use the manual setup method and edit the provided script to grant the Immuta system account OWNERSHIP on the objects that Immuta will secure, instead of granting MANAGE GRANTS ON ACCOUNT. The current role that has OWNERSHIP on the securables will need to be granted to the Immuta system role. However, if granting OWNERSHIP instead of MANAGE GRANTS ON ACCOUNT, Immuta will not be able to manage the role that is granted to the account.

    1. Replace the Immuta URL and API key with your own.

    2. Change the config values to your own, where

      • host is the URL of your Snowflake account.

      • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

      • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

      • username is the system account user that can assume the role to manage the database and administer Snowflake masking and row access policies.

      • privateKey is your private key. If you are using curl, replace new lines in the private key with a backslash before the new line character: "\n". If you are using another means of configuration, such as a Python script, the "\n" should not be added.

      • connectArgs is used to set PRIV_KEY_FILE_PWD if the private key is encrypted.

    Immuta will use the provided credentials to create a user called IMMUTA_SYSTEM_ACCOUNT and grant the following privileges to that user:

    • CREATE ROLE ON ACCOUNT WITH GRANT OPTION

    • APPLY MASKING POLICY ON ACCOUNT WITH GRANT OPTION

    • APPLY ROW ACCESS POLICY ON ACCOUNT WITH GRANT OPTION

    Alternatively, you can use the and edit the provided script to grant the Immuta system account OWNERSHIP on the objects that Immuta will secure, instead of granting MANAGE GRANTS ON ACCOUNT. The current role that has OWNERSHIP on the securables will need to be granted to the Immuta system role. However, if granting OWNERSHIP instead of MANAGE GRANTS ON ACCOUNT, Immuta will not be able to manage the role that is granted to the account.

    warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.
  • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

  • audit specifies whether query audit is enabled for Snowflake. See the object description for child parameters.

  • workspaces represents an Immuta project workspace configured for Snowflake. See the object description for child parameters.

  • impersonation specifies whether user impersonation is enabled. See the object description for child parameters.

  • username and password are the credentials for the system account that can assume the role to manage the database and administer Snowflake masking and row access policies.

  • Run the script returned in the response in your Snowflake environment. Running this script grants the following privileges to the Immuta system account:

    • CREATE ROLE ON ACCOUNT WITH GRANT OPTION

    • APPLY MASKING POLICY ON ACCOUNT WITH GRANT OPTION

    • APPLY ROW ACCESS POLICY ON ACCOUNT WITH GRANT OPTION

    • MANAGE GRANTS ON ACCOUNT WITH GRANT OPTION

    Alternatively, you can grant the Immuta system account OWNERSHIP on the objects that Immuta will secure, instead of granting MANAGE GRANTS ON ACCOUNT. The current role that has OWNERSHIP on the securables will need to be granted to the Immuta system role. However, if granting OWNERSHIP instead of MANAGE GRANTS ON ACCOUNT, Immuta will not be able to manage the role that is granted to the account, so it is recommended to run the script as-is, without changes.

    1. Replace the Immuta URL and API key with your own.

    2. Change the config values to your own, where

      • host is the URL of your Snowflake account.

      • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

      • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

      • audit specifies whether query audit is enabled for Snowflake. See the for child parameters.

      • workspaces represents an Immuta project workspace configured for Snowflake. See the for child parameters.

      • impersonation specifies whether user impersonation is enabled. See the for child parameters.

      • username is the system account user that can assume the role to manage the database and administer Snowflake masking and row access policies.

      • privateKey is your private key. If you are using curl, replace new lines in the private key with a backslash before the new line character: "\n". If you are using another means of configuration, such as a Python script, the "\n" should not be added.

      • connectArgs is used to set PRIV_KEY_FILE_PWD if the private key is encrypted.

    3. Run the script returned in the response in your Snowflake environment. Running this script grants the following privileges to the Immuta system account:

      • CREATE ROLE ON ACCOUNT WITH GRANT OPTION

      • APPLY MASKING POLICY ON ACCOUNT WITH GRANT OPTION

    In this example, Snowflake External OAuth is used to authenticate the system account user, ensuring secure communication between Immuta and Snowflake. To use this authentication method, autoBootstrap must be false.

    1. Replace the Immuta URL and API key with your own.

    2. Change the config values to your own, where

      • host is the URL of your Snowflake account.

      • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

      • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

      • audit specifies whether query audit is enabled for Snowflake. See the for child parameters.

      • workspaces.enabled specifies whether Immuta project workspaces are enabled for Snowflake.

      • workspaces.warehouses is a list of warehouses that workspace users have usage privileges on.

      • impersonation specifies whether user impersonation is enabled. See the for child parameters.

      • username is the system account user that can act on Snowflake objects and configure the integration.

      • oAuthClientConfig specifies your provider, client ID, client secret, authority URL, and your encoded public and private keys. See the for details about child parameters.

    3. Run the script returned in the response in your Snowflake environment. Running this script grants the following privileges to the Immuta system account:

      • CREATE ROLE ON ACCOUNT WITH GRANT OPTION

      • APPLY MASKING POLICY ON ACCOUNT WITH GRANT OPTION

    warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.
  • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

  • audit specifies whether query audit is enabled for Snowflake. See the object description for child parameters.

  • workspaces represents an Immuta project workspace configured for Snowflake. See the object description for child parameters.

  • impersonation specifies whether user impersonation is enabled. See the object description for child parameters.

  • username and password are the credentials for the system account that can assume the role to manage the database and administer Snowflake masking and row access policies.

    1. Replace the Immuta URL and API key with your own.

    2. Pass the same payload you sent when generating the script, where

      • host is the URL of your Snowflake account.

      • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

      • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

      • audit specifies whether query audit is enabled for Snowflake. See the for child parameters.

      • workspaces represents an Immuta project workspace configured for Snowflake. See the for child parameters.

      • impersonation specifies whether user impersonation is enabled. See the for child parameters.

      • username is the system account user that can assume the role to manage the database and administer Snowflake masking and row access policies.

      • privateKey is your private key. If you are using curl, replace new lines in the private key with a backslash before the new line character: "\n". If you are using another means of configuration, such as a Python script, the "\n" should not be added.

      • connectArgs is used to set PRIV_KEY_FILE_PWD if the private key is encrypted.

    In this example, Snowflake External OAuth is used to authenticate the system account user, ensuring secure communication between Immuta and Snowflake. To use this authentication method, autoBootstrap must be false.

    1. Replace the Immuta URL and API key with your own.

    2. Pass the same payload you sent when generating the script, where

      • host is the URL of your Snowflake account.

      • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

      • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

      • impersonation specifies whether user impersonation is enabled. See the for child parameters.

      • workspaces specifies whether Immuta project workspaces are enabled for Snowflake. See the for details about child parameters.

      • oAuthClientConfig specifies your provider, client ID, client secret, authority URL, and your encoded public and private keys. See the for details about child parameters.

    host is the URL of your Snowflake account.

  • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

  • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

  • audit specifies whether query audit is enabled for Snowflake. See the object description for child parameters.

  • username and password are credentials of a Snowflake account attached to a role with the privileges outlined above. These credentials are not stored; they are used by Immuta to enable or disable configuration settings.

  • role is a Snowflake role that has been granted the privileges outlined above.

  • This request updates the configuration to enable query audit in Snowflake.

    1. Replace the Immuta URL and API key with your own.

    2. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    3. Change the config values to your own, where

      • host is the URL of your Snowflake account.

      • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

      • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

      • audit specifies whether query audit is enabled for Snowflake. See the for child parameters.

      • username is the system account user that can assume the role to manage the database and administer Snowflake masking and row access policies.

      • privateKey is your private key. If you are using curl, replace new lines in the private key with a backslash before the new line character: "\n". If you are using another means of configuration, such as a Python script, the "\n" should not be added.

      • connectArgs is used to set PRIV_KEY_FILE_PWD if the private key is encrypted.

    host is the URL of your Snowflake account.

  • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

  • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

  • audit specifies whether query audit is enabled for Snowflake. See the object description for child parameters.

  • workspaces represents an Immuta project workspace configured for Snowflake. See the object description for child parameters.

  • impersonation specifies whether user impersonation is enabled. See the object description for child parameters.

  • username and password are the credentials for the system account that can assume the role to manage the database and administer Snowflake masking and row access policies.

  • Run the script returned in the response in your Snowflake environment.

  • This request updates the configuration to enable query audit in Snowflake.

    1. Replace the Immuta URL and API key with your own.

    2. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    3. Change the config values to your own, where

      • host is the URL of your Snowflake account.

      • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

      • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

      • audit specifies whether query audit is enabled for Snowflake. See the for child parameters.

      • workspaces represents an Immuta project workspace configured for Snowflake. See the for child parameters.

      • impersonation specifies whether user impersonation is enabled. See the for child parameters.

      • username is the system account user that can assume the role to manage the database and administer Snowflake masking and row access policies.

      • privateKey is your private key. If you are using curl, replace new lines in the private key with a backslash before the new line character: "\n". If you are using another means of configuration, such as a Python script, the "\n" should not be added.

      • connectArgs is used to set PRIV_KEY_FILE_PWD if the private key is encrypted.

    4. Run the script returned in the response in your Snowflake environment.

    This request updates the configuration to disable Snowflake workspaces for the integration.

    1. Replace the Immuta URL and API key with your own.

    2. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    3. Change the config values to your own, where

      • host is the URL of your Snowflake account.

      • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

      • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

      • audit specifies whether query audit is enabled for Snowflake. See the for child parameters.

      • workspaces represents an Immuta project workspace configured for Snowflake. See the for child parameters.

      • impersonation specifies whether user impersonation is enabled. See the for child parameters.

      • username is the system account user that can act on Snowflake objects and configure the integration.

      • oAuthClientConfig specifies your provider, client ID, client secret, authority URL, and your encoded public and private keys. See the for details about child parameters.

    4. Run the script returned in the response in your Snowflake environment.

    host is the URL of your Snowflake account.

  • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

  • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

  • audit specifies whether query audit is enabled for Snowflake. See the object description for child parameters.

  • workspaces represents an Immuta project workspace configured for Snowflake. See the object description for child parameters.

  • impersonation specifies whether user impersonation is enabled. See the object description for child parameters.

  • username and password are the credentials for the system account that can assume the role to manage the database and administer Snowflake masking and row access policies.

  • This request updates the configuration to enable query audit in Snowflake.

    1. Replace the Immuta URL and API key with your own.

    2. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    3. Pass the same payload you sent when generating the script, where

      • host is the URL of your Snowflake account.

      • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

      • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

      • audit specifies whether query audit is enabled for Snowflake. See the for child parameters.

      • workspaces represents an Immuta project workspace configured for Snowflake. See the for child parameters.

      • impersonation specifies whether user impersonation is enabled. See the for child parameters.

      • username is the system account user that can assume the role to manage the database and administer Snowflake masking and row access policies.

      • privateKey is your private key. If you are using curl, replace new lines in the private key with a backslash before the new line character: "\n". If you are using another means of configuration, such as a Python script, the "\n" should not be added.

      • connectArgs is used to set PRIV_KEY_FILE_PWD if the private key is encrypted.

    This request updates the configuration to disable Snowflake workspaces and enable Snowflake query audit for the integration.

    1. Replace the Immuta URL and API key with your own.

    2. Replace the {id} request parameter with the unique identifier of the integration you want to update.

    3. Pass the same payload you sent when generating the script, where

      • host is the URL of your Snowflake account.

      • warehouse is the default pool of Snowflake compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

      • database is the name of a new empty database that the Immuta system user will manage and store metadata in.

      • impersonation specifies whether user impersonation is enabled. See the for child parameters.

      • audit specifies whether query audit is enabled for Snowflake. See the for child parameters.

      • workspaces specifies whether Immuta project workspaces are enabled for Snowflake. See the for details about child parameters.

      • oAuthClientConfig specifies your provider, client ID, client secret, authority URL, and your encoded public and private keys. See the for details about child parameters.

    autoBootstrap to true when enabling the integration, specify the authenticationType and the credentials you used to configure the integration in the payload, as illustrated in the example. See the Integrations API endpoints guide for details.

  • autoBootstrap to false when enabling the integration,

  • Use the script cleanup endpoint (for integrations that were not successfully created) or the delete endpoint (for integrations that were successfully created) to generate a script that will remove Immuta-managed resources and policies from your environment.

  • Make the request above without including a payload to remove the integration from Immuta.

  • Run the generated script in Snowflake.

  • get all integrations
    update a Snowflake integration
    delete a Snowflake integration
    Automatic setup
    requirements section
    Manual setup
    requirements section
    config object description
    API key
    response schema reference
    HTTP status codes and error messages
    Generate the Immuta script and run it in your Snowflake environment.
    Configure the integration in Immuta.
    config object description
    API key
    generating the script
    config object description
    API key
    generating the script
    response schema reference
    HTTP status codes and error messages
    API key
    GET /integrations endpoint
    response schema reference
    HTTP status codes and error messages
    API key
    response schema reference
    HTTP status codes and error messages
    automatic update
    manual update
    config object description
    API key
    response schema reference
    HTTP status codes and error messages
    Generate the updated Immuta script and run it in your Snowflake environment.
    Update the integration in Immuta.
    config object description
    API key
    generating the updated script
    config object description
    API key
    generating the script
    response schema reference
    HTTP status codes and error messages
    API key
    response schema reference
    HTTP status codes and error messages

    rules

    string The conditions of the policy.

    createdAt

    timestamp The date the policy was created.

    updatedAt

    timestamp The date the policy was modified.

    GET

    /policy/dataSourcePolicies/{dataSourceId}

    .

    GET

    /policy/diff/{dataSourceId}

    .

    GET

    /policy/handler/{dataSourceId}

    .

    offset

    integer Used in combination with size to fetch pages.

    No

    sortField

    string Indicates which field to sort the policies by: name, createdBy, createdAt, state, isNotApplied, or scope.

    No

    sortOrder

    string Indicates whether to sort policies in ascending or descending order: asc or desc.

    No

    searchText

    string Searches text; this will filter policies by name.

    No

    countOnly

    boolean When true, will only return the number of policies found in the search.

    No

    mode

    string Attribute options include similarPolicies, impactedUsers, or impactedDataSources.

    No

    excludedPolicies

    array[integer] Global Policy IDs to exclude.

    No

    searchText

    string Searches text; this will filter policies by name.

    No

    type

    string The type of policy to search for: data or subscription.

    No

    scope

    string Indicates whether the policy is global or local.

    No

    nameOnly

    boolean When true, only returns the policy name, type, and ID.

    No

    templates

    boolean When true, returns templates only. When false, returns non-templates only. When omitted, returns both.

    No

    POST

    /policy/global

    Create a Global Policy with a given entityType.

    POST or PUT

    /policy/handler/{dataSourceId}

    Create (POST) or update (PUT) a policy for the specified data source.

    POST

    /policy/global/applyPolicy

    Apply a Global Policy to a data source.

    PUT

    /policy/global/{policyId}

    Update the specified Global Policy.

    body

    array Contains Global Policy metadata.

    Yes

    dataSourceId

    integer The ID of the data source.

    Yes

    jsonPolicies

    array[object] An array of JSON rules objects.

    Yes

    id

    integer The policy handler ID.

    url

    string The URL of the Immuta tenant.

    dataSourceId

    integer The ID of the data source the policy is applied to.

    createdBy

    integer The ID of the user who created the policy.

    ca

    string The certificate authority.

    jsonPolicies

    array[object] Policy metadata, including the policy type (visibility, masking, time, minimization, exemption, external, prerequisite, customWhere, showRowsNever, or rowOrObjectRestriction), rules, and description.

    payload

    array Contains Global Policy and data source metadata.

    Yes

    policyID

    integer The ID of the Global Policy.

    Yes

    dataSourceID

    integer The ID of the data source to apply the policy to.

    Yes

    merged

    boolean Default false.

    Yes

    policyID

    integer The ID of the Global Policy you want to update.

    Yes

    payload

    array Contains Global Policy and metadata.

    Yes

    POST

    /policy/search

    Search all policies.

    GET

    /policy/global/{policyId}

    Find the policy with the specified ID.

    GET

    /policy/global

    Find a list of Global Policies with the specified entityType.

    GET

    /policy/global/appliedTo/{policyId}

    Find the number of data sources the specified policy is currently applied to.

    body

    array[object] Facets of the policy to search by, including the rule type, where the policy applies, exceptions, and policy circumstances.

    No

    type

    string The type of policy to search for: data or subscription.

    No

    scope

    string Indicates whether the policy is global or local.

    No

    size

    integer Pages results by default; size is the number of results to return per page.

    Count

    integer The number of policies found that match the search criteria.

    Hits

    array Policy metadata, including the name, scope, type, and data sources it applies to.

    policyId

    integer The ID of the Global Policy.

    Yes

    offset

    integer Used in combination with size to fetch pages.

    No

    size

    integer Pages results by default; size is the number of results to return per page.

    No

    sortField

    string Indicates which field to sort the policies by: name or createdAt. Default createdAt.

    No

    sortOrder

    string Indicates whether to sort policies in ascending or descending order: asc or desc. Default desc.

    name

    string The name of the policy.

    id

    integer The policy ID.

    type

    string The type of policy: data or subscription.

    hits

    array Policy metadata, including the name, scope, type, and dataSources it applies to.

    policyId

    integer The ID of the Global Policy.

    Yes

    count

    integer The number of data sources the policy applies to.

    dataSourceId

    integer The ID of the data source.

    Yes

    retrieveAll

    boolean When false, filters out any custom domain-specific language rules.

    No

    excludeGlobal

    boolean When true, filters out any policy actions driven by a Global Policy.

    No

    body

    array Contains policy metadata, including the policy type, rules, exceptions, and date of creation.

    dataSourceId

    integer The ID of the data source.

    Yes

    previousHandlerId

    integer The ID of the previous policy.

    No

    currentHandlerId

    integer The ID of the current policy.

    No

    current

    array Contains policy metadata of the current policy, including the policy type, rules, exceptions, and date of creation.

    previous

    array Contains policy metadata of the previous policy, including the policy type, rules, exceptions, and date of creation.

    hasChanges

    boolean When true, indicates the policy was changed.

    dataSourceId

    integer The ID of the data source.

    Yes

    hits

    array Policy metadata, including the name, scope, rules, and policy type.

    policyId

    integer The ID of the policy.

    Yes

    Create and manage policies
    Search for, review, and compare policies
    Delete Global Policies
    Policy Handler Objects tutorial
    Policy Handler Objects tutorial
    policy object
    policy object

    No

    No

    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": true,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "authenticationType": "keyPair",
          "username": "SYSTEM_ACCOUNT",
          "privateKey": "-----BEGIN PRIVATE KEY-----\n<first line of private key content>\n<another line of private key content>\n<another line of private key content>\n-----END PRIVATE KEY-----"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/scripts/create' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": false,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "audit": {
            "enabled": false,
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "authenticationType": "keyPair",
          "username": "SYSTEM_ACCOUNT",
          "privateKey": "-----BEGIN PRIVATE KEY-----\n<first line of private key content>\n<another line of private key content>\n<another line of private key content>\n-----END PRIVATE KEY-----"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/scripts/create' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": false,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "impersonation": {
            "enabled": true,
            "role": "IMMUTA_IMPERSONATION"
          },
          "audit": {
            "enabled": false
          },
          "workspaces": {
            "enabled": true,
            "warehouses": ["SAMPLE_WAREHOUSE"]
          },
          "authenticationType": "oAuthClientCredentials",
          "oAuthClientConfig": {
            "provider": "Okta",
            "clientId": "123456abc",
            "useCertificate": false,
            "clientSecret": "secret",
            "authorityUrl": "example.authority.com"
          }
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": false,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "audit": {
            "enabled": false,
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "authenticationType": "keyPair",
          "username": "SYSTEM_ACCOUNT",
          "privateKey": "-----BEGIN PRIVATE KEY-----\n<first line of private key content>\n<another line of private key content>\n<another line of private key content>\n-----END PRIVATE KEY-----"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": false,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "impersonation": {
            "enabled": true,
            "role": "IMMUTA_IMPERSONATION"
          },
          "workspaces": {
            "enabled": true,
            "warehouses": ["SAMPLE_WAREHOUSE"]
          },
          "authenticationType": "oAuthClientCredentials",
          "oAuthClientConfig": {
            "provider": "Okta",
            "clientId": "123456abc",
            "useCertificate": false,
            "clientSecret": "secret",
            "authorityUrl": "example.authority.com"
          }
        }
        }'
    curl -X 'PUT' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": true,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "audit": {
            "enabled": true
          },
          "authenticationType": "keyPair",
          "username": "SYSTEM_ACCOUNT",
          "privateKey": "-----BEGIN PRIVATE KEY-----\n<first line of private key content>\n<another line of private key content>\n<another line of private key content>\n-----END PRIVATE KEY-----"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/{id}/scripts/edit' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": false,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "audit": {
            "enabled": true
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "authenticationType": "keyPair",
          "username": "SYSTEM_ACCOUNT",
          "privateKey": "-----BEGIN PRIVATE KEY-----\n<first line of private key content>\n<another line of private key content>\n<another line of private key content>\n-----END PRIVATE KEY-----"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/{id}/scripts/edit' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": false,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "impersonation": {
            "enabled": true,
            "role": "IMMUTA_IMPERSONATION"
          },
          "audit": {
            "enabled": true
          },
          "workspaces": {
            "enabled": false
          },
          "authenticationType": "oAuthClientCredentials",
          "oAuthClientConfig": {
            "provider": "Okta",
            "clientId": "123456abc",
            "useCertificate": false,
            "clientSecret": "secret",
            "authorityUrl": "example.authority.com"
          }
        }
        }'
    curl -X 'PUT' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": false,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "audit": {
            "enabled": true
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "authenticationType": "keyPair",
          "username": "SYSTEM_ACCOUNT",
          "privateKey": "-----BEGIN PRIVATE KEY-----\n<first line of private key content>\n<another line of private key content>\n<another line of private key content>\n-----END PRIVATE KEY-----"
        }
        }'
    curl -X 'PUT' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": false,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "impersonation": {
            "enabled": true,
            "role": "IMMUTA_IMPERSONATION"
          },
          "audit": {
            "enabled": true
          },
          "workspaces": {
            "enabled": false
          },
          "authenticationType": "oAuthClientCredentials",
          "oAuthClientConfig": {
            "provider": "Okta",
            "clientId": "123456abc",
            "useCertificate": false,
            "clientSecret": "secret",
            "authorityUrl": "example.authority.com"
          }
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": true,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "authenticationType": "userPassword",
          "username": "[email protected]",
          "password": "abc1234",
          "role": "ACCOUNTADMIN"
        }
        }'
    {
      "id": "123456789",
      "status": "creating",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "status": "passed"
        },
        {
          "name": "Initial Validation: Default Warehouse Access Test",
          "status": "passed",
          "result": []
        },
        {
          "name": "Initial Validation: Validate access to Privileged Role",
          "status": "passed",
          "result": []
        },
        {
          "name": "Validate Automatic: Database Does Not Exist",
          "status": "passed"
        },
        {
          "name": "Validate Automatic: Impersonation Role Does Not Exist",
          "status": "skipped"
        },
        {
          "name": "Validate Automatic Bootstrap User Grants",
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Snowflake integration already exists on host organization.us-east-1.snowflakecomputing.com (id = 123456789)"
    }
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/scripts/create' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": false,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "audit": {
            "enabled": false,
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "[email protected]",
          "password": "abc1234"
        }
        }'
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": false,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "audit": {
            "enabled": false,
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "[email protected]",
          "password": "abc1234"
        }
        }'
    {
      "id": "123456789",
      "status": "creating",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "status": "passed"
        },
        {
          "name": "Initial Validation: Default Warehouse Access Test",
          "status": "passed",
          "result": []
        },
        {
          "name": "Initial Validation: Validate access to Privileged Role",
          "status": "passed",
          "result": []
        },
        {
          "name": "Validate Automatic: Database Does Not Exist",
          "status": "passed"
        },
        {
          "name": "Validate Automatic: Impersonation Role Does Not Exist",
          "status": "skipped"
        },
        {
          "name": "Validate Automatic Bootstrap User Grants",
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Snowflake integration already exists on host organization.us-east-1.snowflakecomputing.com (id = 123456789)"
    }
    curl -X 'GET' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    {
      "id": "123456789",
      "status": "enabled",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "status": "passed"
        },
        {
          "name": "Initial Validation: Default Warehouse Access Test",
          "status": "passed",
          "result": []
        },
        {
          "name": "Initial Validation: Validate access to Privileged Role",
          "status": "passed",
          "result": []
        },
        {
          "name": "Validate Automatic: Database Does Not Exist",
          "status": "passed"
        },
        {
          "name": "Validate Automatic: Impersonation Role Does Not Exist",
          "status": "skipped"
        },
        {
          "name": "Validate Automatic Bootstrap User Grants",
          "status": "passed"
        }
        ]
      },
      "type": "Snowflake",
      "autoBootstrap": true,
      "config": {
        "host": "organization.us-east-1.snowflakecomputing.com",
        "warehouse": "SAMPLE_WAREHOUSE",
        "database": "SNOWFLAKE_SAMPLE_DATA",
        "port": 443,
        "audit": {
          "enabled": false,
          },
        "workspaces": {
          "enabled": false
        },
        "impersonation": {
          "enabled": false
        },
        "lineage": {
          "enabled": false
        },
        "authenticationType": "userPassword",
        "username": "<REDACTED>",
        "password": "<REDACTED>",
        "role": "ACCOUNTADMIN"
      }
    }
    {
      "id": "123456789",
      "status": "enabled",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "status": "passed"
        },
        {
          "name": "Initial Validation: Default Warehouse Access Test",
          "status": "passed",
          "result": []
        },
        {
          "name": "Initial Validation: Validate access to Privileged Role",
          "status": "passed",
          "result": []
        },
        {
          "name": "Validate Automatic: Database Does Not Exist",
          "status": "passed"
        },
        {
          "name": "Validate Automatic: Impersonation Role Does Not Exist",
          "status": "skipped"
        },
        {
          "name": "Validate Automatic Bootstrap User Grants",
          "status": "passed"
        }
        ]
      },
      "type": "Snowflake",
      "autoBootstrap": false,
      "config": {
        "host": "organization.us-east-1.snowflakecomputing.com",
        "warehouse": "SAMPLE_WAREHOUSE",
        "database": "SNOWFLAKE_SAMPLE_DATA",
        "port": 443,
        "impersonation": {
          "enabled": true,
          "role": "IMMUTA_IMPERSONATION"
        },
        "audit": {
          "enabled": false
        },
        "workspaces": {
          "enabled": true,
          "warehouses": ["SAMPLE_WAREHOUSE"]
        },
        "lineage": {
          "enabled": false
        },
        "authenticationType": "oAuthClientCredentials",
        "oAuthClientConfig": {
          "provider": "Okta",
          "clientId": "123456abc",
          "useCertificate": false,
          "clientSecret": "secret",
          "authorityUrl": "example.authority.com"
        }
      }
    }
    curl -X 'GET' \
        'https://www.organization.immuta.com/integrations' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f'
    [
      {
        "id": "1",
        "status": "enabled",
        "validationResults": {
          "status": "passed",
          "validationTests": [
            {
              "name": "Initial Validation: Basic Connection Test",
              "status": "passed"
            },
            {
              "name": "Initial Validation: Default Warehouse Access Test",
              "status": "passed",
              "result": []
            },
            {
              "name": "Initial Validation: Validate access to Privileged Role",
              "status": "passed",
              "result": []
            },
            {
              "name": "Validate Automatic: Database Does Not Exist",
              "status": "passed"
            },
            {
              "name": "Validate Automatic: Impersonation Role Does Not Exist",
              "status": "skipped"
            },
            {
              "name": "Validate Automatic Bootstrap User Grants",
              "status": "passed"
            }
          ]
        },
        "type": "Snowflake",
        "autoBootstrap": true,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "port": 443,
          "audit": {
            "enabled": false
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "lineage": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "<REDACTED>",
          "password": "<REDACTED>",
          "role": "ACCOUNTADMIN"
        }
      },
      {
        "id": "2",
        "status": "enabled",
        "type": "Databricks",
        "validationResults": {
          "status": "passed",
          "validationTests": [
            {
              "name": "Metastore validation",
              "status": "passed"
            },
            {
              "name": "Basic Connection Test",
              "result": [
                {
                  "1": 1
                }
              ],
              "status": "passed"
            }
          ]
        },
        "autoBootstrap": true,
        "config": {
          "workspaceUrl": "www.example-workspace.cloud.databricks.com",
          "httpPath": "sql/protocolv1/o/0/0000-00000-abc123",
          "token": "REDACTED",
          "audit": {
            "enabled": false
          },
          "catalog": "immuta"
        }
      }
    ]
    curl -X 'PUT' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": true,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "audit": {
            "enabled": true,
          },
          "authenticationType": "userPassword",
          "username": "[email protected]",
          "password": "abc1234",
          "role": "ACCOUNTADMIN"
        }
        }'
    {
      "id": "123456789",
      "status": "editing",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "status": "passed"
        },
        {
          "name": "Initial Validation: Default Warehouse Access Test",
          "status": "passed",
          "result": []
        },
        {
          "name": "Initial Validation: Validate access to Privileged Role",
          "status": "passed",
          "result": []
        },
        {
          "name": "Validate Automatic: Database Does Not Exist",
          "status": "passed"
        },
        {
          "name": "Validate Automatic: Impersonation Role Does Not Exist",
          "status": "skipped"
        },
        {
          "name": "Validate Automatic Bootstrap User Grants",
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Unable to edit integration with ID 123456789 in current state editing."
    }
    curl -X 'POST' \
        'https://www.organization.immuta.com/integrations/{id}/scripts/edit' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": false,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "audit": {
            "enabled": true
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "[email protected]",
          "password": "abc1234"
        }
        }'
    curl -X 'PUT' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "type": "Snowflake",
        "autoBootstrap": false,
        "config": {
          "host": "organization.us-east-1.snowflakecomputing.com",
          "warehouse": "SAMPLE_WAREHOUSE",
          "database": "SNOWFLAKE_SAMPLE_DATA",
          "audit": {
            "enabled": true
          },
          "workspaces": {
            "enabled": false
          },
          "impersonation": {
            "enabled": false
          },
          "authenticationType": "userPassword",
          "username": "[email protected]",
          "password": "abc1234"
        }
        }'
    {
      "id": "123456789",
      "status": "editing",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "status": "passed"
        },
        {
          "name": "Initial Validation: Default Warehouse Access Test",
          "status": "passed",
          "result": []
        },
        {
          "name": "Initial Validation: Validate access to Privileged Role",
          "status": "passed",
          "result": []
        },
        {
          "name": "Validate Automatic: Database Does Not Exist",
          "status": "passed"
        },
        {
          "name": "Validate Automatic: Impersonation Role Does Not Exist",
          "status": "skipped"
        },
        {
          "name": "Validate Automatic Bootstrap User Grants",
          "status": "passed"
        }
        ]
      }
    }
    {
      "statusCode": 409,
      "error": "Conflict",
      "message": "Unable to edit integration with ID 123456789 in current state editing."
    }
    curl -X 'DELETE' \
        'https://www.organization.immuta.com/integrations/{id}' \
        -H 'accept: application/json' \
        -H 'Content-Type: application/json' \
        -H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
        -d '{
        "authenticationType": "userPassword",
        "username": "[email protected]",
        "password": "abc1234",
        "role": "ACCOUNTADMIN"
        }'
    {
      "id": "123456789",
      "status": "deleting",
      "validationResults": {
        "status": "passed",
        "validationTests": [
        {
          "name": "Initial Validation: Basic Connection Test",
          "status": "passed"
        },
        {
          "name": "Initial Validation: Default Warehouse Access Test",
          "status": "passed",
          "result": []
        },
        {
          "name": "Initial Validation: Validate access to Privileged Role",
          "status": "passed",
          "result": []
        },
        {
          "name": "Validate Automatic: Database Does Not Exist",
          "status": "passed"
        },
        {
          "name": "Validate Automatic: Impersonation Role Does Not Exist",
          "status": "skipped"
        },
        {
          "name": "Validate Automatic Bootstrap User Grants",
          "status": "passed"
        }
        ]
      }
    }
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/policy/global
    {
      "type": "data",
      "template": false,
      "ownerRestrictions": null,
      "actions": [{
        "type": "masking",
        "rules": [{
          "type": "masking",
          "exceptions": null,
          "config": {
            "fields": [{
              "name": "Discovered.Passport",
              "displayName": "Discovered > Passport",
              "hasLeafNodes": false,
              "source": "curated"
            }],
            "maskingConfig": {
              "type": "Consistent Value",
              "metadata": {}
            }
          }
        }],
        "description": ""
      }],
      "circumstances": [{
        "operator": "or",
        "type": "columnTags",
        "columnTag": {
          "name": "Discovered.Passport",
          "displayName": "Discovered > Passport",
          "hasLeafNodes": false,
          "source": "curated"
        }
      }],
      "name": "Mask Passports",
      "certification": {
        "text": "This certifies that all columns containing passports in this data source have been tagged appropriately.",
        "label": "Certified",
        "tags": [],
        "recertify": true
      },
      "staged": false
    }
    {
      "id": 8,
      "policyKey": "Mask Passports",
      "name": "Mask Passports",
      "type": "data",
      "template": false,
      "staged": false,
      "systemGenerated": false,
      "deleted": false,
      "certification": {
        "tags": [],
        "text": "This certifies that all columns containing passports in this data source have been tagged appropriately.",
        "label": "Certified",
        "recertify": true
      },
      "actions": [{
        "type": "masking",
        "rules": [{
          "type": "masking",
          "config": {
            "fields": [{
              "name": "Discovered.Passport",
              "source": "curated",
              "hasLeafNodes": false
            }],
            "maskingConfig": {
              "type": "Consistent Value",
              "metadata": {}
            }
          },
          "exceptions": null
        }],
        "description": null
      }],
      "circumstances": [{
        "type": "columnTags",
        "operator": "or",
        "columnTag": {
          "name": "Discovered.Passport",
          "hasLeafNodes": false
        }
      }],
      "metadata": null,
      "clonedFrom": null,
      "createdBy": 2,
      "createdAt": "2021-09-21T18:35:48.615Z",
      "updatedAt": "2021-09-21T18:35:48.615Z",
      "createdByName": "Katie",
      "ownerRestrictions": null
    }
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/policy/handler/2
    {
      "jsonPolicies": [{
        "type": "masking",
        "rules": [{
          "type": "masking",
          "config": {
            "fields": ["amount"],
            "maskingConfig": {
              "type": "Consistent Value",
              "metadata": {
                "constant": null
              }
            }
          },
          "exceptions": null
        }],
        "createdAt": "2021-09-20T20:03:18.001Z",
        "createdBy": 2,
        "description": null
      }, {
        "type": "masking",
        "rules": [{
          "type": "masking",
          "config": {
            "fields": ["geo_latitude"],
            "maskingConfig": {
              "type": "Consistent Value",
              "metadata": {}
            }
          },
          "exceptions": null
        }],
        "createdAt": "2021-09-20T20:02:02.213Z",
        "createdBy": 2,
        "description": null
      }, {
        "type": "prerequisite",
        "rules": [{
          "type": "prerequisite",
          "exceptions": null,
          "config": {
            "qualifications": {
              "operator": "and",
              "conditions": [{
                "type": "purposes",
                "value": "Re-identification Prohibited"
              }]
            }
          }
        }],
        "description": ""
      }],
      "dataSourcePolicyHandler": {
        "handlerId": 26,
        "visibilitySchema": {
          "fields": []
        }
      }
    }
    {
      "id": 42,
      "dataSourceId": 2,
      "createdBy": 2,
      "ca": ["-----BEGIN CERTIFICATE-----\ncertificatedata\n-----END CERTIFICATE-----"],
      "jsonPolicies": [
        {
          "type": "masking",
          "rules": [
            {
              "type": "masking",
              "config": {
                "fields": [
                  "amount"
                ],
                "maskingConfig": {
                  "type": "Consistent Value",
                  "metadata": {
                    "constant": null
                  }
                }
              },
              "exceptions": null
            }
          ],
          "createdAt": "2021-09-20T20:03:18.001Z",
          "createdBy": 2,
          "description": null
        },
        {
          "type": "masking",
          "rules": [
            {
              "type": "masking",
              "config": {
                "fields": [
                  "geo_latitude"
                ],
                "maskingConfig": {
                  "type": "Consistent Value",
                  "metadata": {}
                }
              },
              "exceptions": null
            }
          ],
          "createdAt": "2021-09-20T20:02:02.213Z",
          "createdBy": 2,
          "description": null
        },
        {
          "type": "prerequisite",
          "rules": [
            {
              "type": "prerequisite",
              "config": {
                "qualifications": {
                  "operator": "and",
                  "conditions": [
                    {
                      "type": "purposes",
                      "value": "Re-identification Prohibited"
                    }
                  ]
                }
              },
              "exceptions": null
            }
          ],
          "createdAt": "2021-09-20T20:05:35.925Z",
          "createdBy": 2,
          "description": null
        }
      ],
      "createdAt": "2021-09-21T18:49:34.021Z",
      "updatedAt": "2021-09-21T18:49:34.021Z"
    }
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/policy/global/applyPolicy
    {
      "policyId": 1,
      "dataSourceId": 1,
      "merged": false
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/policy/global/8
    {
      "id": 8,
      "policyKey": "Mask Passports",
      "name": "Mask Passport",
      "type": "data",
      "template": false,
      "staged": false,
      "systemGenerated": false,
      "deleted": false,
      "certification": {
        "tags": ["Discovered.Passport"],
        "text": "This certifies that all columns containing passports in this data source have been tagged appropriately.",
        "label": "Certified"
      },
      "actions": [{
        "type": "masking",
        "rules": [{
          "type": "masking",
          "config": {
            "fields": [{
              "name": "Discovered.Passport",
              "source": "curated",
              "hasLeafNodes": false,
              "displayName": "Discovered > Passport"
            }],
            "maskingConfig": {
              "type": "Consistent Value",
              "metadata": {}
            }
          },
          "exceptions": null
        }],
        "description": "This policy masks all passports for data sources with columns tagged Discovered.Passport."
      }],
      "circumstances": [{
        "type": "columnTags",
        "operator": "or",
        "columnTag": {
          "name": "Discovered.Passport",
          "hasLeafNodes": false,
          "displayName": "Discovered > Passport"
        }
      }],
      "metadata": null,
      "clonedFrom": null,
      "createdBy": 2,
      "createdAt": "2021-09-21T18:35:48.615Z",
      "updatedAt": "2021-09-21T18:41:36.054Z",
      "createdByName": "Katie",
      "ownerRestrictions": null
    }
    {
      "id": 6,
      "policyKey": "mask-passports",
      "name": "Mask Passports",
      "type": "data",
      "template": false,
      "createdBy": 2,
      "createdByName": "Kate",
      "createdAt": "2021-09-14",
      "updatedAt": "2021-09-15",
      "actions": [
        {
          "type": "masking",
          "rules": [
            {
              "type": "masking",
              "exceptions": null,
              "config": {
                "fields": [
                  {
                    "name": "Discovered.Passport",
                    "hasLeafNodes": false,
                    "source": "curated"
                  }
                ],
                "maskingConfig": {
                  "type": "Consistent Value",
                  "metadata": {}
                }
              }
            }
          ],
          "description": "This policy masks all passports for data sources with columns tagged Discovered.Passport."
          }
        ],
          "circumstances": [
            {
              "operator": "or",
              "type": "columnTags",
              "columnTag": {
                "name": "Discovered.Passport",
                "hasLeafNodes": false
              }
            }
          ],
      "clonedFrom": 0,
      "staged": false,
      "systemGenerated": false,
      "deleted": false,
      "certification": {
        "label": "string",
        "text": "string",
        "tags": [
          "string"
        ],
        "recertify": false
      }
    }
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/policy/search?scope=global&searchText=mask
    {
      "count": 1,
      "hits": [{
        "name": "Mask Passports",
        "createdBy": "Katie",
        "state": "active",
        "isNotApplied": false,
        "scope": "global",
        "type": "data",
        "globalPolicyId": 8,
        "policyId": null,
        "dataSourceId": null,
        "createdAt": "2021-09-21T18:35:48.615Z",
        "detailLabels": {
          "ruleType": ["masking"],
          "tags": ["Discovered.Passport"]
        },
        "enforcedOn": {
          "count": 1,
          "hits": [{
            "id": 1,
            "name": "Public Credit Accounts"
          }]
        }
      }]
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/policy/global/1
    {
      "id": 1,
      "policyKey": "New Column Added",
      "name": "New Column Added",
      "type": "data",
      "template": false,
      "staged": false,
      "systemGenerated": true,
      "deleted": false,
      "certification": null,
      "actions": [
        {
          "type": "masking",
          "rules": [
            {
              "type": "masking",
              "config": {
                "fields": [
                  {
                    "name": "New",
                    "source": "curated",
                    "hasLeafNodes": false
                  }
                ],
                "maskingConfig": {
                  "type": "Consistent Value",
                  "metadata": {
                    "constant": null
                  }
                }
              },
              "exceptions": null
            }
          ],
          "description": null
        }
      ],
      "circumstances": [
        {
          "type": "columnTags",
          "operator": "or",
          "columnTag": {
            "name": "New",
            "hasLeafNodes": false
          }
        }
      ],
      "metadata": null,
      "clonedFrom": null,
      "createdBy": 1,
      "createdAt": "2021-09-09T13:47:03.448Z",
      "updatedAt": "2021-09-16T14:10:05.694Z",
      "createdByName": "Immuta System Account",
      "ownerRestrictions": null
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/policy/global?nameOnly=true
    [
      {
        "name": "Mask Passports",
        "id": 6,
        "type": "data"
      },
      {
        "name": "New Column Added",
        "id": 1,
        "type": "data"
      }
    ]
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/policy/global/appliedTo/6
    {
      "count": 1
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/policy/dataSourcePolicies/2
    [
      {
        "type": "masking",
        "rules": [
          {
            "type": "masking",
            "config": {
              "fields": [
                "amount"
              ],
              "maskingConfig": {
                "type": "Consistent Value",
                "metadata": {
                  "constant": null
                }
              }
            },
            "exceptions": null
          }
        ],
        "createdAt": "2021-09-20T20:03:18.001Z",
        "createdBy": 2,
        "description": null
      },
      {
        "type": "masking",
        "rules": [
          {
            "type": "masking",
            "config": {
              "fields": [
                "geo_latitude"
              ],
              "maskingConfig": {
                "type": "Consistent Value",
                "metadata": {}
              }
            },
            "exceptions": null
          }
        ],
        "createdAt": "2021-09-20T20:02:02.213Z",
        "createdBy": 2,
        "description": null
      },
      {
        "type": "prerequisite",
        "rules": [
          {
            "type": "prerequisite",
            "config": {
              "qualifications": {
                "operator": "and",
                "conditions": [
                  {
                    "type": "purposes",
                    "value": "Re-identification Prohibited"
                  }
                ]
              }
            },
            "exceptions": null
          }
        ],
        "createdAt": "2021-09-20T20:05:35.925Z",
        "createdBy": 2,
        "description": null
      }
    ]
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/policy/diff/3?currentHandlerId=47&previousHandlerId=46
    {
      "current": [{
        "type": "rowOrObjectRestriction",
        "rules": [{
          "type": "visibility",
          "config": {
            "predicate": "(`city` in (@groups()))",
            "qualifications": {
              "operator": "and",
              "conditions": [{
                "type": "groups",
                "field": "city"
              }]
            }
          },
          "exceptions": null
        }],
        "createdAt": "2021-09-28T18:46:00.868Z",
        "createdBy": 2,
        "description": null
      }],
      "previous": [{
        "type": "rowOrObjectRestriction",
        "rules": [{
          "type": "visibility",
          "config": {
            "predicate": "(`city` in (@groups()))",
            "qualifications": {
              "operator": "and",
              "conditions": [{
                "type": "groups",
                "field": "city"
              }]
            }
          },
          "exceptions": null
        }],
        "createdAt": "2021-09-28T18:46:00.868Z",
        "createdBy": 2,
        "description": null
      }],
      "hasChanges": false
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/policy/handler/1
    {
      "id": 44,
      "dataSourceId": 1,
      "rules": "rule masking_0_0 {  when { model_0_0 : MaskingModel ; } then { Masked(model_0_0, 0, 0) } } rule masking_5_0 {  when { model_5_0 : MaskingModel ; } then { Masked(model_5_0, 5, 0) } } rule masking_6_0 {  when { model_6_0 : MaskingModel ; } then { Masked(model_6_0, 6, 0) } }",
      "jsonPolicies": [
        {
          "type": "masking",
          "rules": [
            {
              "type": "masking",
              "config": {
                "fields": [
                  "email"
                ],
                "maskingConfig": {
                  "type": "Consistent Value",
                  "metadata": {
                    "constant": null
                  }
                }
              },
              "exceptions": null
            }
          ],
          "createdAt": "2021-09-21T19:27:27.589Z",
          "createdBy": 2,
          "description": null
        },
        {
          "type": "masking",
          "rules": [
            {
              "type": "masking",
              "config": {
                "fields": [
                  "email"
                ],
                "maskingConfig": {
                  "type": "Consistent Value",
                  "metadata": {}
                }
              },
              "exceptions": null
            }
          ],
          "global": {
            "id": 0,
            "tag": "Discovered.Passport",
            "name": "string",
            "reason": "test",
            "staged": false,
            "deleted": false,
            "conflict": "existingMasking",
            "disabled": true,
            "metadata": {
              "HEDReportVersion": "string",
              "certificationExpirationInterval": "string"
            },
            "template": false,
            "createdAt": "2021-09-14T00:00:00.000Z",
            "createdBy": "Katie",
            "policyKey": "string",
            "updatedAt": "2021-09-14T00:00:00.000Z",
            "clonedFrom": 0,
            "certification": true,
            "createdByName": "Katie",
            "changedOnApply": [],
            "systemGenerated": false,
            "ownerRestrictions": null
          },
          "description": null
        },
        {
          "type": "masking",
          "rules": [
            {
              "type": "masking",
              "config": {
                "fields": [
                  "last_name"
                ],
                "maskingConfig": {
                  "type": "Consistent Value",
                  "metadata": {}
                }
              },
              "exceptions": null
            }
          ],
          "global": {
            "id": 0,
            "tag": "Discovered.Passport",
            "name": "string",
            "reason": "test",
            "staged": false,
            "deleted": false,
            "conflict": null,
            "disabled": true,
            "metadata": {
              "HEDReportVersion": "string",
              "certificationExpirationInterval": "string"
            },
            "template": false,
            "createdAt": "2021-09-14T00:00:00.000Z",
            "createdBy": "Katie",
            "policyKey": "string",
            "updatedAt": "2021-09-14T00:00:00.000Z",
            "clonedFrom": 0,
            "certification": true,
            "createdByName": "Katie",
            "changedOnApply": [],
            "systemGenerated": false,
            "ownerRestrictions": null
          },
          "description": null
        },
        {
          "type": "masking",
          "rules": [
            {
              "type": "masking",
              "config": {
                "fields": [
                  "ssn"
                ],
                "maskingConfig": {
                  "type": "Consistent Value",
                  "metadata": {}
                }
              },
              "exceptions": null
            }
          ],
          "global": {
            "id": 0,
            "tag": "Discovered.Passport",
            "name": "string",
            "reason": "test",
            "staged": false,
            "deleted": false,
            "conflict": null,
            "disabled": true,
            "metadata": {
              "HEDReportVersion": "string",
              "certificationExpirationInterval": "string"
            },
            "template": false,
            "createdAt": "2021-09-14T00:00:00.000Z",
            "createdBy": "Katie",
            "policyKey": "string",
            "updatedAt": "2021-09-14T00:00:00.000Z",
            "clonedFrom": 0,
            "certification": true,
            "createdByName": "Katie",
            "changedOnApply": [],
            "systemGenerated": false,
            "ownerRestrictions": null
          },
          "description": null
        },
        {
          "type": "masking",
          "rules": [
            {
              "type": "masking",
              "config": {
                "fields": [
                  "email"
                ],
                "maskingConfig": {
                  "type": "Consistent Value",
                  "metadata": {}
                }
              },
              "exceptions": null
            }
          ],
          "global": {
            "id": 8,
            "tag": "Discovered.Passport",
            "name": "Mask Passports",
            "reason": null,
            "staged": false,
            "deleted": false,
            "conflict": "existingMasking",
            "disabled": true,
            "metadata": null,
            "template": false,
            "createdAt": "2021-09-21T18:35:48.615Z",
            "createdBy": "Katie",
            "policyKey": "Mask Passport",
            "updatedAt": "2021-09-21T18:41:54.299Z",
            "clonedFrom": null,
            "certification": true,
            "createdByName": "Katie",
            "changedOnApply": [],
            "systemGenerated": false,
            "ownerRestrictions": null
          },
          "description": "This policy masks all passports for data sources with columns tagged Discovered.Passport."
        },
        {
          "type": "masking",
          "rules": [
            {
              "type": "masking",
              "config": {
                "fields": [
                  "last_name"
                ],
                "maskingConfig": {
                  "type": "Consistent Value",
                  "metadata": {}
                }
              },
              "exceptions": null
            }
          ],
          "global": {
            "id": 8,
            "tag": "Discovered.Passport",
            "name": "Mask Passport",
            "reason": null,
            "staged": false,
            "deleted": false,
            "conflict": null,
            "disabled": false,
            "metadata": null,
            "template": false,
            "createdAt": "2021-09-21T18:35:48.615Z",
            "createdBy": "Katie",
            "policyKey": "Mask Passport",
            "updatedAt": "2021-09-21T18:41:54.299Z",
            "clonedFrom": null,
            "certification": true,
            "createdByName": "Katie",
            "changedOnApply": [],
            "systemGenerated": false,
            "ownerRestrictions": null
          },
          "description": "This policy masks all passports for data sources with columns tagged Discovered.Passport."
        },
        {
          "type": "masking",
          "rules": [
            {
              "type": "masking",
              "config": {
                "fields": [
                  "ssn"
                ],
                "maskingConfig": {
                  "type": "Consistent Value",
                  "metadata": {}
                }
              },
              "exceptions": null
            }
          ],
          "global": {
            "id": 8,
            "tag": "Discovered.Passport",
            "name": "Mask Passport",
            "reason": null,
            "staged": false,
            "deleted": false,
            "conflict": null,
            "disabled": false,
            "metadata": null,
            "template": false,
            "createdAt": "2021-09-21T18:35:48.615Z",
            "createdBy": "Katie",
            "policyKey": "Mask Passports",
            "updatedAt": "2021-09-21T18:41:54.299Z",
            "clonedFrom": null,
            "certification": true,
            "createdByName": "Katie",
            "changedOnApply": [],
            "systemGenerated": false,
            "ownerRestrictions": null
          },
          "description": "This policy masks all passports for data sources with columns tagged Discovered.Passport."
        }
      ],
      "createdAt": "2021-09-21T19:27:27.977Z",
      "updatedAt": "2021-09-21T19:27:27.977Z"
    }
    curl \
        --request DELETE \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/policy/global/6
    {
      "id": 6,
      "policyKey": "mask-passports",
      "name": "Mask Passports",
      "type": "data",
      "template": false,
      "staged": false,
      "systemGenerated": false,
      "deleted": false,
      "certification": {
        "tags": [
          "string"
        ],
        "text": "string",
        "label": "string"
      },
      "actions": [
        {
          "type": "masking",
          "rules": [
            {
              "type": "masking",
              "config": {
                "fields": [
                  {
                    "name": "Discovered.Passport",
                    "source": "curated",
                    "hasLeafNodes": false
                  }
                ],
                "maskingConfig": {
                  "type": "Consistent Value",
                  "metadata": {}
                }
              },
              "exceptions": null
            }
          ],
          "description": "This policy masks all passports for data sources with columns tagged Discovered.Passport."
        }
      ],
      "circumstances": [
        {
          "type": "columnTags",
          "operator": "or",
          "columnTag": {
            "name": "Discovered.Passport",
            "hasLeafNodes": false
          }
        }
      ],
      "metadata": null,
      "clonedFrom": 0,
      "createdBy": 2,
      "createdAt": "2021-09-14T00:00:00.000Z",
      "updatedAt": "2021-09-15T18:46:17.661Z",
      "createdByName": "Katie",
      "ownerRestrictions": null
    }
    MANAGE GRANTS ON ACCOUNT WITH GRANT OPTION
    APPLY ROW ACCESS POLICY ON ACCOUNT WITH GRANT OPTION
  • MANAGE GRANTS ON ACCOUNT WITH GRANT OPTION

  • Alternatively, you can grant the Immuta system account OWNERSHIP on the objects that Immuta will secure, instead of granting MANAGE GRANTS ON ACCOUNT. The current role that has OWNERSHIP on the securables will need to be granted to the Immuta system role. However, if granting OWNERSHIP instead of MANAGE GRANTS ON ACCOUNT, Immuta will not be able to manage the role that is granted to the account, so it is recommended to run the script as-is, without changes.

    APPLY ROW ACCESS POLICY ON ACCOUNT WITH GRANT OPTION
  • MANAGE GRANTS ON ACCOUNT WITH GRANT OPTION

  • Alternatively, you can grant the Immuta system account OWNERSHIP on the objects that Immuta will secure, instead of granting MANAGE GRANTS ON ACCOUNT. The current role that has OWNERSHIP on the securables will need to be granted to the Immuta system role. However, if granting OWNERSHIP instead of MANAGE GRANTS ON ACCOUNT, Immuta will not be able to manage the role that is granted to the account, so it is recommended to run the script as-is, without changes.

    manual setup method
    object description
    object description
    object description
    object description
    object description
    object description
    object description
    object description
    object description
    object description
    object description
    object description
    object description
    object description
    object description
    object description
    object description
    object description
    object description
    object description
    object description
    object description
    object description
    object description
    object description
    object description
    object description
    Get the policy information for the specified data source
    Get the differences between two policy handler versions
    Get the policy handler metadata for a specific data source

    Integration Configuration Payload

    The parameters for configuring an integration in Immuta are outlined in the table below.

    Parameter
    Description
    Required or optional
    Default values
    Accepted values

    type string

    The type of integration to configure.

    Required

    -

    autoBootstrap boolean

    Amazon S3 configuration object

    The config object configures the S3 integration. The table below outlines its child parameters.

    Parameter
    Description
    Required or optional
    Default values
    Accepted values

    Azure Synapse Analytics configuration objects

    The config object configures the Azure Synapse Analytics integration. The table below outlines its child parameters.

    Parameter
    Description
    Required or optional
    Default values
    Accepted values

    Azure Synapse Analytics impersonation object

    The impersonation object enables and defines roles for user impersonation for Azure Synapse Analytics. The table below outlines its child parameters.

    Parameter
    Description
    Default values
    Accepted values

    Delete Azure Synapse Analytics payload

    The credentials you used when configuring your integration are required in the payload when autoBootstrap was set to true when setting up your integration. For integration configurations with autoBootstrap set to false, no payload is required when deleting the integration.

    Parameter
    Description
    Required or optional
    Accepted values

    Metadata delimiters object

    The metadataDelimiters object specifies the delimiters that Immuta uses to store profile data in Azure Synapse Analytics. The table below outlines its child parameters.

    Parameter
    Description
    Default values
    Accepted values

    Databricks Unity Catalog configuration objects

    The config object configures the Databricks Unity Catalog integration. The table below outlines its child parameters.

    Parameter
    Description
    Required or optional
    Default values
    Accepted values

    Databricks Unity Catalog audit object

    The audit object enables Databricks Unity Catalog query audit. The table below outlines its child parameter.

    Parameter
    Description
    Default values
    Accepted values

    Group pattern object

    The groupPattern object excludes the listed group from having data policies applied in the Databricks Unity Catalog integration. This account-level group should be used for privileged users and service accounts that require an unmasked view of data. The table below outlines its child parameters.

    Parameter
    Description
    Default values
    Accepted values

    Databricks Unity Catalog proxy options object

    The proxyOptions object represents your proxy server configuration in Databricks Unity Catalog. The table below outlines the object's child attributes.

    Parameter
    Description
    Required or optional
    Default values
    Accepted values

    Databricks Unity Catalog OAuth configuration object

    The oAuthClientConfig object represents your OAuth configuration in Databricks Unity Catalog. This object is required if you set oAuthM2M as your . The table below outlines the object's child parameters.

    Parameter
    Description
    Required or optional
    Default values
    Accepted values

    Google BigQuery configuration object

    The config object configures the Google BigQuery integration. The table below outlines its child parameters.

    Parameter
    Description
    Required or optional
    Default values
    Accepted values

    Redshift configuration objects

    The config object configures the Redshift integration. The table below outlines its child parameters.

    Parameter
    Description
    Required or optional
    Default values
    Accepted values

    Delete Redshift integration payload

    The authentication type and credentials you used when configuring your integration are required in the payload when autoBootstrap was set to true when setting up your integration. For integration configurations with autoBootstrap set to false, no payload is required when deleting the integration.

    Parameter
    Description
    Required or optional
    Accepted values

    Redshift impersonation object

    The impersonation object enables and defines roles for user impersonation for Redshift. The table below outlines its child parameters.

    Parameter
    Description
    Default values
    Accepted values

    Okta object

    The okta object represents your Okta configuration. This object is required if you set okta as your authentication type in the Redshift integration configuration. The table below outlines its child parameters.

    Parameter
    Description
    Required or optional
    Default values
    Accepted values

    Snowflake configuration objects

    The config object configures the Snowflake integration. The table below outlines its child parameters.

    Parameter
    Description
    Required or optional
    Default values
    Accepted values

    Audit object

    The audit object enables Snowflake query audit. The table below outlines its child parameter.

    Parameter
    Description
    Default values
    Accepted values

    Delete Snowflake integration payload

    The authentication type and credentials you used when configuring your integration are required in the payload when autoBootstrap was set to true when setting up your integration. For integration configurations with autoBootstrap set to false, no payload is required when deleting the integration.

    Parameter
    Description
    Required or optional
    Accepted values

    Snowflake impersonation object

    The impersonation object enables and defines roles for user impersonation for Snowflake. The table below outlines its child parameters.

    Parameter
    Description
    Default values
    Accepted values

    Lineage object

    The lineage object enables Snowflake lineage ingestion. When this setting is enabled, Immuta automatically applies tags added to a Snowflake table to its descendant data source columns in Immuta so you can build policies using those tags to restrict access to sensitive data. The table below outlines its child parameters.

    Parameter
    Description
    Required or optional
    Default values
    Accepted values

    Snowflake OAuth configuration object

    The oAuthClientConfig object represents your OAuth configuration in Snowflake. This object is required if you set oAuthClientCredentials as your authentication type in the Snowflake integration configuration, and you must set autoBootstrap to false. The table below outlines the object's child parameters.

    Parameter
    Description
    Required or optional
    Default values
    Accepted values

    User role pattern object

    The userRolePattern object excludes roles and users from authorization checks in the Snowflake integration. The table below outlines its child parameter.

    Parameter
    Description
    Default values
    Accepted values

    Workspaces object

    The workspaces object represents an Immuta project workspace configured for Snowflake. The table below outlines its child parameters.

    Parameter
    Description
    Default values
    Accepted values

    awsRegion string

    The AWS region to use.

    Required

    -

    Any valid AWS region (us-east-1, for example)

    awsLocationRole string

    The AWS IAM role ARN assigned to the base access grants location. This is the role the AWS Access Grants service assumes to vend credentials to the grantee. When a grantee accesses S3 data, the AWS Access Grants service attaches session policies and assumes this role in order to vend scoped down credentials to the grantee. This role needs full access to all paths under the S3 location prefix.

    Required

    -

    -

    awsLocationPath string

    The base S3 location prefix that Immuta will use for this connection when registering S3 data sources. This path must be unique across all S3 integrations configured in Immuta.

    Required

    -

    -

    awsRoleToAssume string

    The AWS IAM role ARN Immuta assumes when interacting with AWS.

    Required when authenticationType is auto.

    []

    -

    authenticationType string

    The method used to authenticate with AWS when configuring the S3 integration.

    Required

    -

    • auto

    • accessKey

    awsAccessKeyId string

    The AWS access key ID for the AWS account configuring the integration.

    Required when authenticationType is accessKey.

    -

    -

    awsSecretAccessKey string

    The AWS secret access key for the AWS account configuring the integration.

    Required when authenticationType is accessKey.

    -

    -

    port number

    The port to use when connecting to your S3 Access Grants instance.

    Optional

    443

    0-65535

    schema string

    Name of the Immuta-managed schema where all your secure views will be created and stored.

    Required

    -

    -

    authenticationType string

    The method used to authenticate with Azure Synapse Analytics when configuring the integration.

    Required

    -

    userPassword

    username string

    The username of the system account that can act on Azure Synapse Analytics objects and configure the integration.

    Required

    -

    -

    password string

    The password of the system account that can act on Azure Synapse Analytics objects and configure the integration.

    Required

    -

    -

    object

    This object is a set of delimiters that Immuta uses to store profile data in Azure Synapse Analytics. See the for parameters.

    Optional

    See the for default values.

    -

    port number

    The port to use when connecting to your Azure Synapse Analytics account host.

    Optional

    1433

    0-65535

    object

    Enables user impersonation. See the for parameters.

    Optional

    Disabled by default. See the for parameters.

    -

    connectArgs string

    The connection string arguments to pass to the ODBC driver when connecting as the Immuta system user.

    Optional

    -

    -

    httpPath string

    The HTTP path of your Databricks cluster or SQL warehouse.

    Required

    -

    -

    authenticationType string

    The type of authentication to use when connecting to Databricks.

    Required

    -

    • token

    • oAuthM2M

    token string

    The Databricks personal access token. This is the access token for the Immuta service principal.

    Required if authenticationType is token.

    -

    -

    object

    This object allows you to configure your integration to use a proxy server. See the for child attributes.

    Optional

    []

    -

    object

    This object represents your OAuth configuration. To use this authentication method, authenticationType must be oAuthM2M. See the for parameters.

    Required if you selected oAuthM2M as your authenticationType.

    -

    -

    object

    This object enables Databricks Unity Catalog query audit. See the for parameters.

    Optional

    Disabled by default. See the for parameters.

    -

    catalog string

    The name of the Databricks catalog Immuta will create to store internal entitlements and other user data specific to Immuta. This catalog will only be readable for the Immuta service principal and should not be granted to other users. The catalog name may only contain letters, numbers, and underscores and cannot start with a number.

    Optional

    immuta

    -

    object

    This object allows you to exclude an account-level group in Databricks from data policies. See the for parameters.

    Optional

    -

    -

    username string

    The username to use with the proxy server.

    Optional

    []

    -

    password string

    The password to use with the proxy server.

    Optional

    []

    -

    scope

    The scope limits the operations and roles allowed in Databricks by the access token. See the for details about scopes.

    Optional

    []

    -

    clientSecret string

    .

    Required

    -

    -

    dataset string

    Name of the BigQuery dataset to provision inside of the project for Immuta metadata storage.

    Optional

    immuta

    -

    location string

    The dataset's location. After a dataset is created, the location can't be changed.

    Required

    -

    Any valid GCP location (us-east1, for example).

    credential string

    The Google BigQuery service account JSON keyfile credential content. See the for guidance on generating and downloading this keyfile.

    Required

    -

    -

    port number

    The port to use when connecting to your BigQuery account host.

    Optional

    443

    0-65535

    initialDatabase string

    Name of the existing database in Redshift that Immuta initially connects to and creates the Immuta-managed database.

    Required if autoBootstrap is true.

    -

    -

    authenticationType string

    The type of authentication to use when connecting to Redshift.

    Required

    -

    • userPassword

    • accessKey

    • okta

    username string

    The username of the system account that can act on Redshift objects and configure the integration.

    Required if you selected userPassword as your authenticationType.

    -

    -

    password string

    The password of the system account that can act on Redshift objects and configure the integration.

    Required if you selected userPassword as your authenticationType.

    -

    -

    object

    This object represents your Okta configuration. See the for parameters.

    Required if you selected okta as your authenticationType.

    -

    -

    databaseUser string

    The Redshift database username.

    Required if you selected accessKey as your authenticationType.

    -

    -

    accessKeyId string

    The Redshift access key ID.

    Required if you selected accessKey as your authenticationType.

    -

    -

    secretKey string

    The Redshift secret key.

    Required if you selected accessKey as your authenticationType.

    -

    -

    sessionToken string

    The Redshift session token.

    Optional if you selected accessKey as your authenticationType.

    -

    -

    port number

    The port to use when connecting to your Redshift account host.

    Optional

    5439

    0-65535

    object

    Enables user impersonation. See the for parameters.

    Optional

    Disabled by default. See the for parameters.

    -

    connectArgs string

    The connection string arguments to pass to the ODBC driver when connecting as the Immuta system user.

    Optional

    -

    -

    databaseUser string

    The Redshift database username.

    Required if you selected accessKey as your authenticationType.

    -

    accessKeyId string

    The Redshift access key ID.

    Required if you selected accessKey as your authenticationType.

    -

    secretKey string

    The Redshift secret key.

    Required if you selected accessKey as your authenticationType.

    -

    sessionToken string

    The Redshift session token.

    Optional if you selected accessKey as your authenticationType.

    -

    object

    This object represents your Okta configuration. See the for parameters.

    Required if you selected okta as your authenticationType.

    -

    appId string

    The Okta application ID.

    Required

    -

    -

    idpHost string

    The Okta identity provider host URL.

    Required

    -

    -

    role string

    The Okta role.

    Required

    -

    -

    database string

    Name of a new empty database that the Immuta system user will manage and store metadata in.

    Required

    -

    -

    authenticationType string

    The type of authentication to use when connecting to Snowflake.

    Required

    -

    • userPassword

    • keyPair

    • oAuthClientCredentials

    username string

    The username of a Snowflake account that can act on Snowflake objects and configure the integration.

    Required if you selected userPassword as your authenticationType.

    -

    -

    password string

    The password of a Snowflake account that can act on Snowflake objects and configure the integration.

    Required if you selected userPassword as your authenticationType.

    -

    -

    privateKey string

    The private key. Replace new lines in the private key with a backslash before the new line character: "\n". If you are using another means of configuration, such as a Python script, the "\n" should not be added.

    Required if you selected keyPair as your authenticationType.

    -

    -

    object

    This object represents your OAuth configuration. To use this authentication method, autoBootstrap must be false. See the for parameters.

    Required if you selected oAuthClientCredentials as your authenticationType.

    -

    -

    role string

    The privileged Snowflake role used by the Immuta system account when configuring the Snowflake integration.

    Required when autoBootstrap is true.

    -

    -

    port number

    The port to use when connecting to your Snowflake account host.

    Optional

    443

    0-65535

    object

    This object enables Snowflake query audit. See the for the parameter.

    Optional

    Disabled by default. See the for the parameter.

    -

    object

    Enables user impersonation. See the for parameters.

    Optional

    Disabled by default. See the for parameters.

    -

    object

    This object excludes roles and users from authorization checks. See the for parameters.

    Optional

    {[]}

    -

    object

    This object represents an Immuta project workspace configured for Snowflake. See the for parameters.

    Optional

    Disabled by default. See the for parameters.

    -

    connectArgs string

    The connection string arguments to pass to the Node.js driver when connecting as the Immuta system user.

    Optional

    -

    -

    privilegedConnectArgs string

    The connection string arguments to pass to the Node.js driver when connecting as the privileged user.

    Optional when autoBootstrap is true.

    -

    -

    object

    Enables Snowflake lineage ingestion so that Immuta can apply tags added to Snowflake tables to their descendant data source columns. See the for parameters.

    Optional

    -

    -

    privateKey string

    The private key. Replace new lines in the private key with a backslash before the new line character: "\n". If you are using another means of configuration, such as a Python script, the "\n" should not be added.

    Required if you selected keyPair as your authenticationType.

    -

    object

    This object represents your OAuth configuration. See the for parameters.

    Required if you selected oAuthClientCredentials as your authenticationType.

    -

    role string

    The privileged Snowflake role used by the Immuta system account when configuring the Snowflake integration.

    Required when autoBootstrap is true for Snowflake.

    -

    lineageConfig.tableFilter string

    This child parameter of lineageConfig determines which tables Immuta will ingest lineage for. Use a regular expression that excludes / from the beginning and end to filter tables. Without this filter, Immuta will attempt to ingest lineage for every table on your Snowflake instance.

    Optional

    ^.*$

    Regular expression that excludes / from the beginning and end.

    lineageConfig.tagFilterRegex string

    This child parameter of lineageConfig determines which tags to propagate using lineage. Use a regular expression that excludes / from the beginning and end to filter tags. Without this filter, Immuta will ingest lineage for every tag on your Snowflake instance.

    Optional

    ^.*$

    Regular expression that excludes / from the beginning and end.

    lineageConfig.ingestBatchSize number

    This child parameter of lineageConfig configures the number of rows Immuta ingests per batch when streaming Access History data from your Snowflake instance.

    Optional

    1000

    Minimum value of 1.

    authorityUrl string

    Authority URL of your identity provider.

    Required

    -

    -

    useCertificate boolean

    Specifies whether or not to use a certificate and private key for authenticating with OAuth.

    Required

    -

    true or false

    publicCertificateThumbprint string

    Your certificate thumbprint.

    Required if useCertificate is true.

    -

    -

    oauthPrivateKey string

    The private key content.

    Required if useCertificate is true.

    -

    -

    clientSecret string

    Client secret of the application.

    Required if useCertificate is false.

    -

    -

    resource string

    An optional resource to pass to the token provider.

    Optional

    -

    -

    scope string

    The scope limits the operations and roles allowed in Snowflake by the access token. See the for details about scopes.

    Optional

    []

    -

    Redshift

  • Snowflake

  • Trino

  • When true, Immuta will automatically configure the integration in your Azure Synapse Analytics, Databricks Unity Catalog, Redshift, or Snowflake environment for you. When false, you must set up your environment manually before configuring the integration with the API. This parameter must be set to false in the Amazon S3 and Google BigQuery configurations. See the specific how-to guide for configuring your integration for details: Azure Synapse Analytics, Databricks Unity Catalog, Redshift, Snowflake.

    Required for all integrations except Starburst (Trino)

    -

    true or false

    config object

    This object specifies the integration settings. See the config object description for your integration for details: Amazon S3, Azure Synapse Analytics, Databricks Unity Catalog, Google BigQuery, Redshift, or Snowflake.

    Required for all integrations except Starburst (Trino)

    -

    -

    name string

    A name for the integration that is unique across all Amazon S3 integrations configured in Immuta.

    Required

    -

    -

    awsAccountId string

    The ID of your AWS account.

    Required

    -

    -

    host string

    The URL of your Azure Synapse Analytics account.

    Required

    -

    Valid URL hostnames.

    database string

    Name of an existing database where the Immuta system user will store all Immuta-generated schemas and views.

    Required

    -

    -

    enabled boolean

    When true, enables user impersonation.

    false

    true or false

    role string

    The name of the user impersonation role.

    IMMUTA_IMPERSONATION

    -

    authenticationType string

    The type of authentication used when originally configuring the Azure Synapse Analytics integration.

    Required

    userPassword

    username string

    The username of the system account that configured the integration.

    Required if autoBootstrap was true when setting up the integration.

    -

    password string

    The password of the system account that configured the integration.

    Required if autoBootstrap was true when setting up the integration.

    hashDelimiter string

    A delimiter used to separate key-value pairs.

    `

    `

    hashKeyDelimiter string

    A delimiter used to separate a key from its value.

    :

    -

    arrayDelimiter string

    A delimiter used to separate array elements.

    ,

    port number

    The port to use when connecting to your Databricks account host.

    Optional

    443

    0-65535

    workspaceUrl string

    Databricks workspace URL. For example, my-workspace.cloud.databricks.com.

    Required

    -

    -

    enabled boolean

    This setting enables or disables Databricks Unity Catalog query audit.

    false

    true or false

    deny string

    The name of an account-level group in Databricks that will be excluded from having data policies applied. This group should be used for privileged users and service accounts that require an unmasked view of data. See the Databricks Unity Catalog reference guide for details.

    immuta_exemption_group

    -

    host string

    The hostname of the proxy server.

    Required

    -

    Valid URL hostnames

    port number

    The port to use when connecting to your proxy server.

    Optional

    443

    0-65535

    clientId string

    The client identifier of the Immuta service principal you configured. This is the client ID displayed in Databricks when creating the client secret for the service principal.

    Required

    -

    -

    authorityUrl string

    Authority URL of your identity provider.

    Required

    https://<your workspace name>.cloud.databricks.com/oidc/v1/token

    -

    role string

    Google Cloud role used to connect to Google BigQuery.

    Required

    -

    -

    datasetSuffix string

    Suffix to postfix to the name of each dataset created to store secure views. This string must start with an underscore.

    Required

    -

    -

    host string

    The URL of your Redshift account.

    Required

    -

    Valid URL hostnames

    database string

    Name of a new empty database that the Immuta system user will manage and store metadata in.

    Required

    -

    -

    authenticationType string

    The type of authentication used when originally configuring the Redshift integration.

    Required if autoBootstrap was true when setting up the integration.

    • userPassword

    • accessKey

    • okta

    username string

    The username of the system account that configured the integration.

    Required if you selected userPassword as your authenticationType.

    -

    password string

    The password of the system account that configured the integration.

    Required if you selected userPassword as your authenticationType.

    enabled boolean

    When true, enables user impersonation.

    false

    true or false

    role string

    The name of the user impersonation role.

    immuta_impersonation

    -

    username string

    The username of the system account that can act on Redshift objects and configure the integration.

    Required

    -

    -

    password string

    The password of the system account that can act on Redshift objects and configure the integration.

    Required

    -

    -

    host string

    The URL of your Snowflake account.

    Required

    -

    Valid URL hostnames

    warehouse string

    The default pool of compute resources the Immuta system user will use to run queries and perform other Snowflake operations.

    Required

    -

    -

    enabled boolean

    This setting enables or disables Snowflake query audit.

    false

    true or false

    authenticationType string

    The type of authentication used when originally configuring the integration.

    Required if autoBootstrap was true when configuring the integration.

    • userPassword

    • keyPair

    • oAuthClientCredentials

    username string

    The username of the system account that configured the integration.

    Required for the Azure Synapse Analytics integration or if you selected userPassword as your authenticationType for Redshift or Snowflake.

    -

    password string

    The password of the system account that configured the integration.

    Required for the Azure Synapse Analytics integration or if you selected userPassword as your authenticationType for Redshift or Snowflake.

    enabled boolean

    When true, enables user impersonation.

    false

    true or false

    role string

    The name of the user impersonation role.

    IMMUTA_IMPERSONATION

    -

    enabled boolean

    When true, enables Snowflake lineage so that Immuta can apply tags added to Snowflake data sources to their descendant data source columns in Immuta.

    Optional

    false

    true or false

    lineageConfig object

    Configures what tables Immuta will ingest lineage history for, the number of rows to ingest per batch, and what tags to propagate. Child parameters include tableFilter, tagFilterRegex, and ingestBatchSize.

    Required if enabled is true.

    -

    -

    provider string

    The identity provider for OAuth, such as Okta.

    Required

    -

    -

    clientId string

    The client identifier of your registered application.

    Required

    -

    -

    exclude array[string]

    This array is a list of roles and users (both case-sensitive) to exclude from authorization checks. Wildcards are unsupported.

    []

    -

    enabled boolean

    This setting enables or disables Snowflake project workspaces. If you use Snowflake secure data sharing with Immuta, set this property to true, as project workspaces are required. If you use Snowflake table grants, set this property to false; project workspaces cannot be used when Snowflake table grants are enabled.

    false

    true or false

    warehouses array[string]

    This array is a list of warehouses workspace users have usage privileges on.

    []

    -

    authentication type in the Databricks Unity Catalog integration configuration
    Azure Synapse Analytics
    Databricks
    Google BigQuery
    Native S3

    -

    -

    -

    -

    metadataDelimiters
    object description
    object description
    impersonation
    impersonation object description
    impersonation object description
    proxyOptions
    proxy options object description
    oAuthClientConfig
    oAuthClientConfig object description
    audit
    audit object description
    audit object description
    groupPattern
    groupPattern object description
    OAuth 2.0 documentation
    Client secret created for the Immuta service principal
    Google documentation
    okta
    Okta object description
    impersonation
    impersonation object description
    impersonation object description
    okta
    Okta object description
    oAuthClientConfig
    oAuthClientConfig object description
    audit
    audit object description
    audit object description
    impersonation
    impersonation object description
    impersonation object description
    userRolePattern
    userRolePattern object description
    workspaces
    workspaces object description
    workspaces object description
    lineage
    lineage ingestion object description
    oAuthClientConfig
    oAuthClientConfig object description
    OAuth 2.0 documentation

    Manage Sensitive Data Discovery (SDD)

    Sensitive data discovery (SDD) API reference guide

    Workflow

    1. Create an identifier.

    2. Create an identification framework containing one or more identifiers.

    3. .

    4. .

    5. .

    6. .

    7. .

    Create an identifier

    To run this identifier against your data, ensure it is

    POST /sdd/classifier

    Create an identifier.

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    The following request creates an identifier, saved in example-payload.json.

    Payload examples

    Response example

    Create an identification framework

    POST /sdd/template

    Create an identification framework.

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    The following request creates an identification framework that contains 2 identifiers, saved in example-payload.json.

    Payload example

    Response example

    Search for identifiers or identification frameworks

    Method
    Path
    Purpose

    List or search for identifiers

    GET /sdd/classifier

    List or search identifiers.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    The following request lists 5 identifiers.

    Response example

    List or search for identification frameworks

    GET /sdd/template

    List or search identification frameworks.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    The following request lists all identification frameworks.

    Response example

    View an identifier by name

    GET /sdd/classifier/{classifierName}

    Get an identifier by name.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This request gets the identifier named MY_REGEX_IDENTIFIER.

    Response example

    View an identification framework by name

    GET /sdd/template/{templateName}

    Get an identification framework by name.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This request gets the identification framework named MY_FIRST_FRAMEWORK.

    Response example

    View the current global framework

    GET /sdd/template/global

    View the current global framework.

    Response parameters

    Attribute
    Description

    Request example

    This request gets the current global framework information.

    Response example

    Apply identification frameworks to data sources

    PUT /sdd/template/apply

    Apply an identification framework to a set of data sources.

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This request applies the MY_FIRST_FRAMEWORK framework to the Public Case data source.

    Payload example

    Response example

    Run SDD on data sources

    POST /sdd/run

    Run SDD on specified data sources.

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example: Run SDD on a single data source

    This request runs SDD on the data source Public Case.

    Payload example

    Response example

    Request example: Run SDD on all data sources

    This request runs SDD on all your data sources.

    Payload example

    Response example

    Request example: Test run SDD on all data sources

    This request runs SDD on the Medical Claims data source with the PII_REVISION framework, but will not tag any columns if matches are found.

    Payload example

    Response example

    Update identifiers or identification frameworks

    Method
    Path
    Purpose

    Update an identifier

    PUT /sdd/classifier/{classifierName}

    Update an identifier. Partial updates are not supported.

    Query parameters

    Attribute
    Description
    Required

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    The following request updates the name and description of the MY_REGEX_IDENTIFIER identifier.

    Payload example

    Response example

    Clone an identification framework

    POST /sdd/template/{templateName}/clone

    Clone an identification framework.

    Query parameters

    Attribute
    Description
    Required

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This request clones the MY_FIRST_FRAMEWORK identification framework.

    Payload example

    Response example

    Update an identification framework

    PUT /sdd/template/{templateName}

    Update an identification framework.

    Query parameters

    Attribute
    Description
    Required

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    The following request updates the name of, description of, and identifiers in the MY_FIRST_FRAMEWORK identification framework.

    Payload example

    Response example

    Delete identifiers or identification frameworks

    Method
    Path
    Purpose

    Delete an identifier

    DELETE /sdd/classifier/{classifierName}

    Delete an identifier.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    The following request deletes the REGULAR_EXPRESSION identifier.

    Response example

    Delete an identification framework

    DELETE /sdd/template/{templateName}

    Delete an identification framework.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    The following request deletes the HEALTH_DATA identification framework.

    Response example

    config

    object The configuration of the identifier, which includes config.values, config.caseSensitive, config.regex, config.columnNameRegex, and config.tags. The config object must include one of the following: config.regex, config.columnNameRegex, or config.values.

    Yes

    config.tags

    array[string] The default resulting tags to apply when the identifier is matched; they must begin with Discovered . .

    No

    config.regex

    string A case-insensitive regular expression to match against column values.

    No

    config.columnNameRegex

    string A case-insensitive regular expression to match against column names.

    No

    config.values

    array[string] The list of words included in the dictionary to match against column values.

    No

    config.caseSensitive

    boolean Indicates whether or not values are case sensitive. Defaults to false.

    No

    config.minConfidence

    integer Apply tags when the identifier match is at least this percentage. Not supported for native SDD. Must be between 0 and 1.

    Yes

    config.tags

    array[string] The default resulting tags to apply to the data source when the identifier is matched.

    config.columnNameRegex

    string A case-insensitive regular expression to match against column names.

    config.regex

    string A case-insensitive regular expression to match against column values.

    config.values

    array[string] The list of words included in the dictionary to match against column values.

    config.caseSensitive

    boolean Indicates whether or not values are case sensitive.

    config.minConfidence

    integer Apply tags when the identifier match is at least this percentage. Not supported for native SDD.

    createdAt

    date When the identifier was created.

    updatedAt

    date When the identifier was last updated.

    classifiers.name

    string The name of the identifier to include in the framework.

    Yes

    classifiers.overrides

    array The overrides to modify the identifier for this framework.

    No

    classifiers.overrides.tags

    array The resulting tags to apply when the identifier is matched. These tags will override the identifier's default tags and must begin with Discovered . .

    No

    createdAt

    date When the framework was created.

    updatedAt

    date When the framework was last updated.

    GET

    sdd/template/global

    .

    type

    array[string] Searches based on identifier type: regex, dictionary, builtIn, or columnNameRegex.

    No

    searchText

    string A partial, case-insensitive search on name.

    No

    config

    object The configuration of the identifier, which includes config.values, config.caseSensitive, config.regex, config.columnNameRegex, and config.tags.

    config.tags

    array[string] The default resulting tags to apply when the identifier is matched.

    config.columnNameRegex

    string A case-insensitive regular expression to optionally match against column names.

    config.regex

    string A case-insensitive regular expression to match against column values.

    config.values

    array[string] The list of words included in the dictionary to match against column values.

    config.caseSensitive

    boolean Indicates whether or not values are case sensitive.

    createdAt

    date When the identifier was created.

    updatedAt

    date When the identifier was last updated.

    classifiers

    array[string] Filters framework results to those containing the specified identifiers.

    No

    searchText

    string A partial, case-insensitive search on the framework name.

    No

    classifiers

    array The identifiers in the framework and any overrides for those identifiers.

    createdAt

    date When the framework was created.

    updatedAt

    date When the framework was last updated.

    config

    object The configuration of the identifier, which includes config.values, config.caseSensitive, config.regex, config.columnNameRegex, and config.tags.

    config.tags

    array[string] The name of the resulting tags to apply to the data source.

    config.columnNameRegex

    string A case-insensitive regular expression to optionally match against column names.

    config.regex

    string A case-insensitive regular expression to match against column values.

    config.values

    array[string] The list of words included in the dictionary to match against column values.

    config.caseSensitive

    boolean Indicates whether or not values are case sensitive.

    createdAt

    date When the identifier was created.

    updatedAt

    date When the identifier was last updated.

    createdAt

    date When the framework was created.

    updatedAt

    date When the framework was last updated.

    createdAt

    date When the framework was created.

    updatedAt

    date When the framework was last updated.

    template

    string If passed, Immuta will run SDD with this framework instead of the applied framework on the data source(s). Passing template when dryRun is false will cause an error.

    No

    config

    object The configuration of the identifier, which includes config.values, config.caseSensitive, config.regex, config.columnNameRegex, and config.tags. The config object must contain one of the following: config.regex, config.columnNameRegex, or config.values.

    Yes

    config.tags

    array[string] The default resulting tags to apply when the identifier is matched; they must begin with Discovered . .

    No

    config.regex

    string A case-insensitive regular expression to match against column values.

    No

    config.columnNameRegex

    string A case-insensitive regular expression to match against column names.

    No

    config.values

    array[string] The list of words included in the dictionary to match against column values.

    No

    config.caseSensitive

    boolean Indicates whether or not values are case sensitive. Defaults to false.

    No

    config.minConfidence

    integer Apply tags when the identifier match is at least this percentage. Not supported for native SDD. Must be between 0 and 1.

    Yes

    config.tags

    array[string] The default resulting tags to apply to the data source when the identifier is matched.

    config.columnNameRegex

    string A case-insensitive regular expression to match against column names.

    config.regex

    string A case-insensitive regular expression to match against column values.

    config.values

    array[string] The list of words included in the dictionary to match against column values.

    config.caseSensitive

    boolean Indicates whether or not values are case sensitive.

    createdAt

    date When the identifier was created.

    updatedAt

    date When the identifier was last updated.

    createdAt

    date When the framework was created.

    updatedAt

    date When the framework was last updated.

    classifiers.name

    string The name of the identifier to include in the framework.

    Yes

    classifiers.overrides

    array The overrides to modify the identifier for this framework.

    No

    classifiers.overrides.tags

    array The resulting tags to apply when the identifier is matched. These tags will override the identifier's default tags and must begin with Discovered . .

    No

    createdAt

    date When the framework was created.

    updatedAt

    date When the framework was last updated.

    config.tags

    array[string] The default resulting tags to apply to the data source when the identifier is matched.

    config.columnNameRegex

    string A case-insensitive regular expression to match against column names.

    config.regex

    string A case-insensitive regular expression to match against column values.

    config.values

    array[string] The list of words included in the dictionary to match against column values.

    config.caseSensitive

    boolean Indicates whether or not values are case sensitive.

    createdAt

    date When the identifier was created.

    updatedAt

    date When the identifier was last updated.

    createdAt

    date When the framework was created.

    updatedAt

    date When the framework was last updated.

    name

    string Unique, request-friendly identifier name. Must be uppercase letters or numbers.

    Yes

    displayName

    string Unique, human-readable identifier name.

    Yes

    description

    string The identifier description.

    Yes

    type

    string The type of identifier: regex, dictionary, columnNameRegex, or builtIn.

    createdBy

    array Includes details about the user who created the identifier, such as their profile id, name, and email.

    name

    string Unique, request-friendly identifier name.

    displayName

    string Unique, human-readable identifier name.

    description

    string The identifier description.

    type

    string The type of identifier: regex, dictionary, columnNameRegex, or builtIn.

    config

    object The configuration of the identifier, which includes config.values, config.caseSensitive, config.regex, config.columnNameRegex, and config.tags.

    name

    string Unique, request-friendly framework name. Must be uppercase letters or numbers.

    Yes

    displayName

    string Unique, human-readable framework name.

    Yes

    description

    string The framework description.

    Yes

    classifiers

    array The identifiers to include in the framework and any additional overrides for those identifiers.

    id

    integer The unique ID of the framework.

    createdBy

    array Includes details about the user who created the framework, such as their profile id, name, and email.

    name

    string Unique, request-friendly framework name.

    displayName

    string Unique, human-readable framework name.

    description

    string The framework description.

    classifiers

    array The identifiers in the framework and any overrides for those identifiers.

    GET

    sdd/classifier

    List or search identifiers.

    GET

    sdd/template

    List or search identification frameworks.

    GET

    sdd/classifier/{classifierName}

    View a specific identifier by name.

    GET

    sdd/template/{templateName}

    View a specific identification framework by name.

    sortField

    string The field to sort the search results: id, name, displayName, type, createdAt, or updatedAt.

    No

    sortOrder

    string Denotes whether to sort the results in ascending (asc) or descending (desc) order. Default is asc.

    No

    offSet

    integer Use in combination with limit to fetch pages.

    No

    limit

    integer Limits the number of results displayed per page.

    count

    integer The number of identifiers found matching the search criteria.

    createdBy

    array Includes details about the user who created the identifier, such as their profile id, name, and email.

    name

    string Unique, request-friendly identifier name.

    displayName

    string Unique, human-readable identifier name.

    description

    string The identifier description.

    type

    string The type of identifier: regex, dictionary, columnNameRegex, or builtIn.

    sortField

    string The field to sort the search results: id, name, displayName, type, createdAt, or updatedAt.

    No

    sortOrder

    string Denotes whether to sort the results in ascending (asc) or descending (desc) order. Default is asc.

    No

    offSet

    integer Use in combination with limit to fetch pages.

    No

    limit

    integer Limits the number of results displayed per page.

    count

    integer The number of identification frameworks found matching the search criteria.

    id

    integer The unique ID of the framework.

    createdBy

    array Includes details about the user who created the framework, such as their profile id, name, and email.

    name

    string Unique, request-friendly framework name.

    displayName

    string Unique, human-readable framework name.

    description

    string The framework description.

    classifierName

    string The name of the identifier.

    Yes

    id

    integer The unique ID of the identifier.

    createdBy

    array Includes details about the user who created the identifier, such as their profile id, name, and email.

    name

    string Unique, request-friendly identifier name.

    displayName

    string Unique, human-readable identifier name.

    description

    string The identifier description.

    type

    string The type of identifier: regex, dictionary, columnNameRegex, or builtIn.

    templateName

    string The name of the identification framework.

    Yes

    id

    integer The unique ID of the framework.

    createdBy

    array Includes details about the user who created the framework, such as their profile id, name, and email.

    name

    string Unique, request-friendly framework name.

    displayName

    string Unique, human-readable framework name.

    description

    string The framework description.

    classifiers

    array The identifiers in the framework and any overrides for those identifiers.

    id

    integer The unique ID of the framework.

    name

    string Unique, request-friendly framework name.

    displayName

    string Unique, human-readable framework name.

    description

    string The framework description.

    classifiers

    array The identifiers in the framework and any overrides for those identifiers.

    createdBy

    array Includes details about the user who created the framework, such as their profile id, name, and email.

    template

    string The name of the identification framework to apply to the data sources. null to clear current framework, and the data source will use the global framework.

    Yes

    sources

    string The name of the data sources to apply the framework to.

    Yes

    success

    boolean When true, the request was successful.

    sources

    string The name of the data sources to apply the identification framework to.

    Yes

    all

    boolean If true, SDD will run on all Immuta data sources.

    No

    wait

    integer The number of seconds to wait for the SDD jobs to finish. The value -1 will wait until the jobs complete. Default is -1.

    No

    dryRun

    boolean When true, SDD will not update the tags on the data source(s). Instead of applying tags, SDD returns the tags that would be applied to the data source. This allows users to evaluate whether or not identifiers or frameworks are applying tags correctly without updating the data source. Default is false.

    id

    string The unique identifier of the job.

    state

    string The job state. Statuses include created, retry, active, completed, expired, cancelled, or failed.

    output

    array[string] Information about the tags applied on the data source, including diff (added and removed tags) and the current state of allTags on all columns in the data sources.

    PUT

    /sdd/classifier/{classifierName}

    Update an identifier. Partial updates are not supported.

    POST

    sdd/classifier/template/{templateName}/clone

    Clone an identification framework.

    PUT

    /sdd/template/{templateName}

    Update an identification framework.

    classifierName

    string The name of the identifier to update.

    Yes

    name

    string Unique, request-friendly identifier name. Must be uppercase letters or numbers.

    Yes

    displayName

    string Unique, human-readable identifier name.

    Yes

    description

    string The identifier description.

    Yes

    type

    string The type of identifier: regex, dictionary, columnNameRegex, or builtIn.

    createdBy

    array Includes details about the user who created the identifier, such as their profile id, name, and email.

    name

    string Unique, request-friendly identifier name.

    displayName

    string Unique, human-readable identifier name.

    description

    string The identifier description.

    type

    string The type of identifier: regex, dictionary, columnNameRegex, or builtIn.

    config

    object The configuration of the identifier, which includes config.values, config.caseSensitive, config.regex, config.columnNameRegex, and config.tags.

    templateName

    string The name of the identification framework to clone.

    Yes

    name

    string Unique, request-friendly framework name for the cloned framework.

    Yes

    displayName

    string Unique, human-readable framework name for the cloned framework.

    Yes

    description

    string The cloned framework description.

    No

    id

    integer The unique ID of the framework.

    createdBy

    array Includes details about the user who created the framework, such as their profile id, name, and email.

    name

    string Unique, request-friendly framework name.

    displayName

    string Unique, human-readable framework name.

    description

    string The framework description.

    classifiers

    array The identifiers in the framework and any overrides for those identifiers.

    templateName

    string The name of the identification framework to update.

    Yes

    name

    string Unique, request-friendly framework name. Must be uppercase letters or numbers.

    Yes

    displayName

    string Unique, human-readable framework name.

    Yes

    description

    string The framework description.

    Yes

    classifiers

    array The identifiers to include in the framework and any additional overrides for those identifiers.

    id

    integer The unique ID of the framework.

    createdBy

    array Includes details about the user who created the framework, such as their profile id, name, and email.

    name

    string Unique, request-friendly framework name.

    displayName

    string Unique, human-readable framework name.

    description

    string The framework description.

    classifiers

    array The identifiers in the framework and any overrides for those identifiers.

    DELETE

    /sdd/classifier/{classifierName}

    Delete an identifier.

    DELETE

    /sdd/template/{templateName}

    Delete an identification framework.

    classifierName

    string The name of the identifier to delete.

    Yes

    createdBy

    array Includes details about the user who created the identifier, such as their profile id, name, and email.

    name

    string Unique, request-friendly identifier name.

    displayName

    string Unique, human-readable identifier name.

    description

    string The identifier description.

    type

    string The type of identifier: regex, dictionary, columnNameRegex, or builtIn.

    config

    object The configuration of the identifier, which includes config.values, config.caseSensitive, config.regex, config.columnNameRegex, and config.tags.

    templateName

    string The name of the identification framework to delete.

    Yes

    id

    integer The unique ID of the framework.

    createdBy

    array Includes details about the user who created the framework, such as their profile id, name, and email.

    name

    string Unique, request-friendly framework name.

    displayName

    string Unique, human-readable framework name.

    description

    string The framework description.

    classifiers

    array The identifiers in the framework and any overrides for those identifiers.

    Search for identifiers or identification frameworks
    Apply an identification framework to one or more data sources
    Run SDD on one or more data sources; tags are applied to columns where identifiers were found
    Update identifiers or identification frameworks
    Delete identifiers or identification frameworks
    added to a framework.

    Yes

    Yes

    No

    No

    No

    Yes

    Yes

    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://your-immuta-url.immuta.com/sdd/classifier
    {
      "name": "MY_REGEX_IDENTIFIER",
      "displayName": "My Regex Identifier",
      "description": "A regex identifier example",
      "type": "regex",
      "config": {
        "regex": "^[A-Z][a-z]+",
        "tags": ["Discovered.regex-example"],
        "minConfidence": 0.9
      }
    }
    {
      "name": "MY_DICTIONARY_IDENTIFIER",
      "displayName": "My Dictionary Identifier",
      "description": "A dictionary identifier example",
      "type": "dictionary",
      "config": {
        "values": ["Bob", "Eve"],
        "caseSensitive": true,
        "tags": ["Discovered.dictionary-example", "Discovered.dictionary-identifier-example"],
        "minConfidence": 0.9
      }
    }
    {
      "name": "MY_COLUMN_NAME_IDENTIFIER",
      "displayName": "My Column Name Identifier",
      "description": "A column name identifier example",
      "type": "columnNameRegex",
      "config": {
        "columnNameRegex": "ssn|social ?security",
        "tags": ["Discovered.column-name-regex"],
        "minConfidence": 0.9
      }
    }
    {
      "createdBy": {
        "id": 1,
        "name": "John",
        "email": "[email protected]"
      },
      "name": "MY_REGEX_IDENTIFIER",
      "displayName": "My Regex Identifier",
      "description": "A regex identifier example",
      "type": "regex",
      "config": {
        "tags": [
          "Discovered.regex-example"
        ],
        "regex": "^[A-Z][a-z]+",
        "minConfidence": 0.9
      },
      "id": 67,
      "createdAt": "2021-10-14T18:48:56.289Z",
      "updatedAt": "2021-10-14T18:48:56.289Z"
    }
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://your-immuta-url.immuta.com/sdd/template
    {
      "name": "MY_FIRST_FRAMEWORK",
      "displayName": "My First Framework",
      "description": "This is the first framework I've created.",
      "classifiers": [
        {
          "name": "MY_COLUMN_NAME_IDENTIFIER"
        },
        {
          "name": "MY_REGEX_IDENTIFIER"
        },
        {
          "name": "AGE",
          "overrides": {
            "tags": [
              "Discovered.Entity.Age"
            ]
          }
        }
      ]
    }
    {
      "name": "MY_FIRST_FRAMEWORK",
      "displayName": "My First Framework",
      "description": "This is the first framework I've created.",
      "createdBy": {
        "id": 1,
        "name": "John",
        "email": "[email protected]"
      },
      "id": 1,
      "createdAt": "2021-10-14T19:12:22.092Z",
      "updatedAt": "2021-10-14T19:12:22.092Z",
      "classifiers": [
        {
          "name": "MY_COLUMN_NAME_REGEX_IDENTIFIER",
          "overrides": {}
        },
        {
          "name": "MY_REGEX_IDENTIFIER",
          "overrides": {}
        }
      ]
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.immuta.com/sdd/classifier?sortField=name&sortOrder=asc&limit=5
    {
      "count": 67,
      "hits": [
        {
          "createdBy": {
            "id": 21,
            "name": "Immuta System Account",
            "email": "[email protected]"
          },
          "name": "AGE",
          "displayName": "Age",
          "description": "Matches numeric strings between 10 and 199.",
          "type": "builtIn",
          "config": {
            "tags": ["Discovered.Entity.Age"],
            "conditionalTags": {}
          },
          "id": 3,
          "createdAt": "2021-10-28T07:34:58.761Z",
          "updatedAt": "2021-10-28T07:34:58.761Z"
        },
        {
          "createdBy": {
            "id": 21,
            "name": "Immuta System Account",
            "email": "[email protected]"
          },
          "name": "ARGENTINA_DNI_NUMBER",
          "displayName": "Argentina DNI Number",
          "description": "Matches strings consistent with Argentina National Identity (DNI) Number.  Requires an eight digit number with optional periods between the second and third and fifth and sixth digit.",
          "type": "builtIn",
          "config": {
            "tags": [
              "Discovered.Country.Argentina",
              "Discovered.Entity.DNI Number"
            ],
            "conditionalTags": {}
          },
          "id": 4,
          "createdAt": "2021-10-28T07:34:58.769Z",
          "updatedAt": "2021-10-28T07:34:58.769Z"
        },
        {
          "createdBy": {
            "id": 21,
            "name": "Immuta System Account",
            "email": "[email protected]"
          },
          "name": "AUSTRALIA_MEDICARE_NUMBER",
          "displayName": "Australia Medicare Number",
          "description": "Matches numeric strings consistent with Australian Medicare Number.  Requires a ten or eleven digit number.  The starting digit must be between 2 and 6, inclusive.  Optional spaces can be placed between the fourth and fifth and ninth and tenth digit.  Optional 11th separated by a `/` can be present.  A checksum is required.",
          "type": "builtIn",
          "config": {
            "tags": [
              "Discovered.Country.Australia",
              "Discovered.Entity.Medicare Number"
            ],
            "conditionalTags": {}
          },
          "id": 5,
          "createdAt": "2021-10-28T07:34:58.779Z",
          "updatedAt": "2021-10-28T07:34:58.779Z"
        },
        {
          "createdBy": {
            "id": 21,
            "name": "Immuta System Account",
            "email": "[email protected]"
          },
          "name": "AUSTRALIA_PASSPORT",
          "displayName": "Australia Passport",
          "description": "Matches strings consistent with Australian Passport number.  A 8 or 9 character string is required, with a starting upper case character (N, E, D, F, A, C, U, X) or a two character starting character (P followed by A, B, C, D, E, F, U, W, X, or Z) followed by seven digits",
          "type": "builtIn",
          "config": {
            "tags": [
              "Discovered.Country.Australia",
              "Discovered.Entity.Passport"
            ],
            "conditionalTags": {}
          },
          "id": 26,
          "createdAt": "2021-10-28T07:34:59.010Z",
          "updatedAt": "2021-10-28T07:34:59.010Z"
        },
        {
          "createdBy": {
            "id": 21,
            "name": "Immuta System Account",
            "email": "[email protected]"
          },
          "name": "AUSTRALIA_TAX_FILE_NUMBER",
          "displayName": "Australia Tax File Number",
          "description": "Matches strings consistent with Australia Tax File Number.  Requires a nine digit number with optional spaces between the third and fourth and sixth and seventh digits.  A checksum is also required",
          "type": "builtIn",
          "config": {
            "tags": [
              "Discovered.Country.Australia",
              "Discovered.Entity.Tax File Number"
            ],
            "conditionalTags": {}
          },
          "id": 6,
          "createdAt": "2021-10-28T07:34:58.789Z",
          "updatedAt": "2021-10-28T07:34:58.789Z"
        }
      ]
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.immuta.com/sdd/template
    {
      "count": 1,
      "hits": [
        {
          "name": "MY_FIRST_FRAMEWORK",
          "displayName": "My First Framework",
          "description": "This is the first framework I've created.",
          "createdBy": {
            "id": 1,
            "name": "John",
            "email": "[email protected]"
          },
          "id": 1,
          "createdAt": "2021-10-14T19:12:22.092Z",
          "updatedAt": "2021-10-14T19:12:22.092Z",
          "classifiers": [
            {
              "name": "MY_COLUMN_NAME_IDENTIFIER",
              "overrides": {}
            },
            {
              "name": "MY_REGEX_IDENTIFIER",
              "overrides": {}
            }
          ]
        }
      ]
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.immuta.com/sdd/classifier/MY_REGEX_IDENTIFIER
    {
      "createdBy": {
        "id": 1,
        "name": "John",
        "email": "[email protected]"
      },
      "name": "MY_REGEX_IDENTIFIER",
      "displayName": "My Regex Identifier",
      "description": "A regex identifier example",
      "type": "regex",
      "config": {
        "tags": [
          "Discovered.regex-example"
        ],
        "regex": "^[A-Z][a-z]+"
      },
      "id": 67,
      "createdAt": "2021-10-18T16:48:18.819Z",
      "updatedAt": "2021-10-18T16:48:18.819Z"
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.immuta.com/sdd/template/MY_FIRST_FRAMEWORK
    {
      "name": "MY_FIRST_FRAMEWORK",
      "displayName": "My First Framework",
      "description": "This is the first framework I've created.",
      "createdBy": {
        "id": 1,
        "name": "John",
        "email": "[email protected]"
      },
      "id": 1,
      "createdAt": "2021-10-18T16:54:24.920Z",
      "updatedAt": "2021-10-18T16:54:24.920Z",
      "classifiers": [
        {
          "name": "MY_DICTIONARY_IDENTIFIER",
          "overrides": {}
        },
        {
          "name": "MY_REGEX_IDENTIFIER",
          "overrides": {}
        }
      ]
    }
    curl -X 'GET' \
      'https://demo.immuta.com/sdd/template/global' \
      -H 'accept: application/json' \
      -H 'Authorization: Bearer 9ba76f3c64c345ad817fa467d7110556'
    {
      "name": "MY_FIRST_FRAMEWORK",
      "displayName": "My First Framework",
      "description": "This is the first framework I've created.",
      "createdBy": {
        "id": 2,
        "name": "Jane Doe",
        "email": "[email protected]"
      },
      "id": 1,
      "createdAt": "2022-08-10T20:35:43.252Z",
      "updatedAt": "2022-08-10T20:35:43.252Z",
      "classifiers": [
        {
          "name": "AGE",
          "overrides": {}
        },
        {
          "name": "ETHNIC_GROUP",
          "overrides": {}
        }
      ]
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://your-immuta-url.immuta.com/sdd/template/apply
    {
      "template": "MY_FIRST_FRAMEWORK",
      "sources": [
        "Public Case"
      ]
    }
    {
      "success": true
    }
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://your-immuta-url.immuta.com/sdd/run
    {
      "sources": [
        "Insurance Data"
      ]
    }
    {
      "Insurance Data": {
        "id": "d2edc1d0-328c-11ec-9d5a-6793988ccf95",
        "state": "completed",
        "output": {
          "diff": {
            "addedTags": {
              "ssn": [
                "Discovered.Social Security Number"
              ],
              "email": [
                "Discovered.Electronic Mail Address"
              ]
            },
            "removedTags": {
              "ssn": [
                "Discovered.Country.US"
              ]
            }
          },
          "sddTagResult": {
            "ssn": ["Discovered.Entity.Social Security Number"],
            "email": ["Discovered.Entity.Electronic Mail Address"]
          }
        }
      }
    }
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://your-immuta-url.immuta.com/sdd/run
    {
      "all": true
    }
    {
      "Insurance Data": {
        "id": "d2edc1d0-328c-11ec-9d5a-6793988ccf95",
        "state": "completed",
        "output": {
          "diff": {
            "addedTags": {
              "ssn": [
                "Discovered.Social Security Number"
              ],
              "email": [
                "Discovered.Electronic Mail Address"
              ]
            },
            "removedTags": {
              "ssn": [
                "Discovered.Country.US"
              ]
            }
          },
          "sddTagResult": {
            "ssn": ["Discovered.Entity.Social Security Number"],
            "email": ["Discovered.Entity.Electronic Mail Address"]
          }
        }
      }
      "Finance Data": {
        "id": "d2edc1d0-328c-11ec-9d5a-695e896d59s",
        "state": "completed",
        "output": {
          "diff": {
            "addedTags": {
              "ssn": [
                "Discovered.Social Security Number"
              ],
              "email": [
                "Discovered.Electronic Email Address"
              ]
            },
            "removedTags": {
              "ssn": [
                "Discovered.Country.US"
              ]
            }
          },
          "sddTagResult": {
            "ssn": ["Discovered.Entity.Social Security Number"],
            "email": ["Discovered.Entity.Electronic Mail Address"]
          }
        }
      }
    }
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://your-immuta-url.immuta.com/sdd/run
    {
      "sources": [
        "Medical Claims"
      ],
      "dryRun": true,
      "template": "PII_REVISION"
    }
    {
      "Medical Claims": {
        "id": "86fc4f70-380f-11ec-a432-81748c911385",
        "state": "completed",
        "output": {
          "diff": {
            "addedTags": {},
            "removedTags": {
              "dob": [
                "Discovered.Entity.Date",
                "Discovered.Entity.Date of Birth",
              ],
              "ssn": [
                "Discovered.Country.US",
                "Discovered.Entity.Social Security Number",
              ],
              "state": [
                "Discovered.Country.US",
                "Discovered.Entity.Location",
                "Discovered.Entity.State",
              ],
              "gender": ["Discovered.Entity.Gender"],
              "date_of_service": ["Discovered.Entity.Date"]
            }
          },
          "sddTagResult": {
            "ssn": [
              "Discovered.Social Security Number"
            ]
          }
        }
      }
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://your-immuta-url.immuta.com/sdd/classifier/MY_REGEX_IDENTIFIER
    {
      "name": "REGULAR_EXPRESSIONS",
      "displayName": "Regular Expressions",
      "description": "An identifier example using regex.",
      "type": "regex",
      "config": {
        "regex": "^[A-Z][a-z]+",
        "tags": ["Discovered.regex-example"]
      }
    }
    {
      "createdBy": {
        "id": 1,
        "name": "John",
        "email": "[email protected]"
      },
      "name": "REGULAR_EXPRESSIONS",
      "displayName": "Regular Expressions",
      "description": "An identifier example using regex.",
      "type": "regex",
      "config": {
        "tags": [
          "Discovered.regex-example"
        ],
        "regex": "^[A-Z][a-z]+"
      },
      "id": 67,
      "createdAt": "2021-10-14T18:48:56.289Z",
      "updatedAt": "2021-10-19T12:48:56.289Z"
    }
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://your-immuta-url.immuta.com/sdd/template/MY_FIRST_FRAMEWORK/clone
    {
      "name": "CLONE_OF_FIRST_FRAMEWORK",
      "displayName": "Clone of My First Framework",
      "description": "This is a clone of my first framework."
    }
    {
      "name": "CLONE_OF_FIRST_FRAMEWORK",
      "displayName": "Clone of My First Framework",
      "description": "This is a clone of my first framework.",
      "createdBy": {
        "id": 1,
        "name": "John",
        "email": "[email protected]"
      },
      "id": 4,
      "createdAt": "2021-10-19T16:21:17.660Z",
      "updatedAt": "2021-10-19T16:21:17.660Z",
      "classifiers": [
        {
          "name": "MY_COLUMN_NAME_REGEX_IDENTIFIER",
          "overrides": {}
        },
        {
          "name": "MY_REGEX_IDENTIFIER",
          "overrides": {}
        }
      ]
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://your-immuta-url.immuta.com/sdd/template/MY_FIRST_FRAMEWORK
    {
      "name": "HEALTH_DATA",
      "displayName": "Health Data",
      "description": "This framework uses the column regex and regex identifiers.",
      "classifiers": [
        {
          "name": "MY_COLUMN_NAME_REGEX_IDENTIFIER"
        },
        {
          "name": "REGULAR_EXPRESSION"
        }
      ]
    }
    {
      "name": "HEALTH_DATA",
      "displayName": "Health Data",
      "description": "This framework uses the column regex and regex identifiers.",
      "createdBy": {
        "id": 1,
        "name": "John",
        "email": "[email protected]"
      },
      "id": 1,
      "createdAt": "2021-10-14T19:12:22.092Z",
      "updatedAt": "2021-10-20T19:12:22.092Z",
      "classifiers": [
        {
          "name": "MY_COLUMN_NAME_REGEX_IDENTIFIER",
          "overrides": {}
        },
        {
          "name": "REGULAR_EXPRESSION",
          "overrides": {}
        }
      ]
    }
    curl \
        --request DELETE \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.immuta.com/sdd/classifier/REGULAR_EXPRESSION
    {
      "createdBy": {
        "id": 1,
        "name": "John",
        "email": "[email protected]"
      },
      "name": "REGULAR_EXPRESSION",
      "displayName": "Regular Expression",
      "description": "This identifier uses regular expression",
      "type": "regex",
      "config": {
        "tags": [
          "Discovered.regex-example"
        ],
        "regex": "^[A-Z][a-z]+"
      },
      "id": 67,
      "createdAt": "2021-10-19T15:54:28.695Z",
      "updatedAt": "2021-10-19T16:00:02.329Z"
    }
    curl \
        --request DELETE \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.immuta.com/sdd/template/HEALTH_DATA
    {
      "name": "HEALTH_DATA",
      "displayName": "Health Data",
      "description": "This is a framework for health data.",
      "createdBy": {
        "id": 1,
        "name": "John",
        "email": "[email protected]"
      },
      "id": 1,
      "createdAt": "2021-10-19T16:07:39.356Z",
      "updatedAt": "2021-10-19T16:07:39.356Z",
      "classifiers": [
        {
          "name": "MY_COLUMN_NAME_REGEX_IDENTIFIER",
          "overrides": {}
        }
      ]
    }
    View the current global framework

    Manage Projects

    Projects API reference guide

    This page details how to use the projects API to query projects and the data sources associated with them in Immuta.

    Projects workflow

    1. Create a project.

    2. .

    3. .

    4. .

    5. .

    6. .

    7. .

    Create a project

    POST /project

    Create the project.

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Example request

    This example request with the payload below will create a new project.

    Example request payload

    This example payload will create a new project named API Project.

    Example response

    Search projects

    Method
    Path
    Purpose

    Search all projects

    GET /project

    Search for projects.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request gets a list of all of the projects.

    Response example

    Search for projects by ID

    GET /project/{projectId}

    Get the project with the given ID.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Example request

    This example gets the project object for the project with the ID 2.

    Example response

    Manage projects

    Method
    Path
    Purpose

    Update project by ID

    PUT /project/{projectId}

    Update the project with the given ID.

    Query parameters

    Attribute
    Description
    Required

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Example request

    This example request with the payload below will update the project with the project ID 2.

    Example request payload

    This example payload will update the project to be named Documentation Project.

    Example response

    View project activity by project ID

    GET /project/{projectId}/activity

    Get all of the recent activity for a given project.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Example request

    This example gets one activity for the project with the project ID 2.

    Example response

    View the state of an equalized project

    GET /project/{projectId}/checkEqualizationState

    Get current state of an equalized project.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Example request

    This example gets the state of project equalization of the project with the project ID 2.

    Example response

    Manage project members

    Method
    Path
    Purpose

    View project members

    GET /project/{projectId}/members

    Get all of the members for a given project.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Example request

    This request gets all of the members of the project with the project ID 2.

    Example response

    Check the members' equalized entitlements

    POST /project/{projectId}/checkEqualizedAuths

    Check that all members meet the provided equalized entitlements.

    Query parameters

    Attribute
    Description
    Required

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This request with the payload below will check if the requesting user is in the "View Masked Values" group.

    Payload example

    Response example

    Add a member to a project

    POST /project/{projectId}/members

    Add a member to the project.

    Query parameters

    Attribute
    Description
    Required

    Payload parameters

    Attribute
    Description
    Required

    Example request

    This example request with the payload below will add a new member to the project with the project ID 1.

    Example request payload

    Example response

    Update a project member

    PUT /project/{projectId}/members/{subscriptionId}

    Update a member of the project.

    Query parameters

    Attribute
    Description
    Required

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request with the payload below will update the user with the subscription ID 2 to be a subscriber of the project with the project ID 3.

    Payload example

    Response example

    Manage project data sources

    Method
    Path
    Purpose

    View project data sources by project ID

    GET project/{projectId}/dataSources

    Get all of the data sources for a given project.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Example request

    This example gets the data source details for all of the data sources of the project with the project ID 2.

    Example response

    Remove data sources from a project

    DELETE /project/{projectId}/dataSources

    Remove supplied data sources from the project.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Example request

    This example request deletes the data source with the ID 8 from the project with the project ID 2.

    Example response

    Add data sources to a project

    POST /project/{projectId}/dataSources

    Adds data sources to a project.

    Query parameters

    Attribute
    Description
    Required

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Example request

    This example request with the payload below will add the data source with the data source ID 1 to the project with the project ID 1.

    Example request payload

    This example payload will add the data source with the data source ID 2 to the project.

    Example response

    Update the reason for adding a data source

    PUT /project/{projectId}/dataSources/{dataSourceId}

    Updates the reason for adding a data source to a project.

    Query parameters

    Attribute
    Description
    Required

    Request example

    This example request with the payload below will update the reason that the data source with the data source ID 1 was added to the project with the project ID 1.

    Response example

    None.

    Use projects

    Method
    Path
    Purpose

    Unsubscribe from a project

    DELETE /project/{projectId}/unsubscribe

    Unsubscribe from a project.

    Query parameters

    Attribute
    Description
    Required

    Request example

    This example request unsubscribes the user from the project with the project ID 5.

    Select the current project to act under

    POST /project/current/{projectId}

    Set the current project ID the current user is acting under.

    Query parameters

    Attribute
    Description
    Required

    Request example

    This example request sets the current project to act under as the project with the project ID 1.

    Set current project to None

    POST /project/current/null

    Set the to None.

    Request example

    Acknowledge the project restrictions

    POST /project/{projectId}/members/{subscriptionId}/acknowledge

    Acknowledge all the restrictions on this project.

    Query parameters

    Attribute
    Description
    Required

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request acknowledges all of the purposes in the project with the project ID 1.

    Payload example

    Response example

    Delete project by ID

    DELETE /project/{projectId}

    Delete the project with the given ID.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Example request

    This example request will delete the project with the project ID 4.

    Example response

    description

    string Project description.

    No

    documentation

    string Project documentation.

    No

    tags

    array Project tags.

    No

    purposes

    array Project purposes.

    No

    stagedPurposes

    array Project purposes staged for approval.

    No

    deleted

    boolean If true, the project will be deleted.

    No

    snowflake

    array This enables a Snowflake workspace for the project and details the schema, hostname, and warehouse.

    No

    allowMaskedJoins

    boolean If true, masked joins will be allowed.

    No

    subscriptionPolicy

    array[object] A policy object for the Subscription Policy on the project. Details include type, exceptions, conditions, allowDiscovery, and automaticSubscription. If this is not set, it will be the default manual.

    No

    subscriptionType

    string The type of subscription policy on the project. The type can be automatic (which allows anyone to subscribe), approval (which requires the subscriber to be manually approved), policy (which only allows users with specific groups or attributes to subscribe), or manual (which requires users to be manually added).

    No

    equalization

    array Details the policy conditions of the equalization, including the configured (or recommended) user groups and attributes.

    No

    workspace

    array Information on workspaces in the project.

    No

    type

    string The type of Immuta project, either user created project (user) or system generated project (schema).

    No

    createdAt

    timestamp Date of the project creation.

    No

    updatedAt

    timestamp Date of the most recent update.

    No

    tags

    array Project tags.

    purposes

    array Project purposes.

    stagedPurposes

    array Project purposes staged for approval.

    deleted

    boolean If true, the project has been deleted.

    snowflake

    array If a Snowflake workspace has been enabled for the project, this attribute will detail the schema, hostname, and warehouse.

    allowMaskedJoins

    boolean If true, masked joins are allowed.

    subscriptionPolicy

    array[object] A policy object for the Subscription Policy on the project. Details include type, exceptions, conditions, allowDiscovery, and automaticSubscription.

    subscriptionType

    string The type of subscription policy on the project. The type can be automatic (which allows anyone to subscribe), approval (which requires the subscriber to be manually approved), policy (which only allows users with specific groups or attributes to subscribe), or manual (which requires users to be manually added).

    equalization

    array Details the policy conditions of the equalization, including the configured (or recommended) user groups and attributes.

    workspace

    array Information on workspaces in the project.

    type

    string The type of Immuta project, either user created project (user) or system generated project (schema).

    createdAt

    timestamp Date of the project creation.

    updatedAt

    timestamp Date of the most recent update.

    workspaceWarnings

    string This message describes issues with the created workspace.

    subscription

    array[string] Filters projects by subscription types, which must be automatic, approval, or policy.

    No

    status

    array[string] Filters projects based on their status: open or closed.

    No

    searchText

    string Searches text. By default this will filter projects by name, description, documentation, category, and organization.

    No

    tag

    array[string] Filters projects by tags associated with the projects.

    No

    nameOnly

    boolean If true, searchText will only filter by project name, allowing you to retrieve specific projects. The default is false.

    No

    isEqualized

    boolean If true, only equalized projects will be included.

    No

    snowflake

    boolean If true, only projects with a Snowflake workspace will be included.

    No

    dataSourceId

    integer Filters projects by whether they have the data source associated with the data source ID.

    No

    mode

    integer Specifies the query mode, which must be 0 (FULL), 1 (COUNT), 4 (TAG), 5 (MIN_MAX), or 6 (STATUS).

    No

    description

    string Project description.

    documentation

    string Project documentation.

    tags

    array Project tags.

    purposes

    array Project purposes.

    stagedPurposes

    array Project purposes staged for approval.

    deleted

    boolean If true, the project has been deleted.

    snowflake

    array If a Snowflake workspace has been enabled for the project, this attribute will detail the schema, hostname, and warehouse.

    allowMaskedJoins

    boolean If true, masked joins are allowed.

    subscriptionPolicy

    array[object] A policy object for the Subscription Policy on the project. Details include type, exceptions, conditions, allowDiscovery, and automaticSubscription.

    subscriptionType

    string The type of subscription policy on the project. The type can be automatic (which allows anyone to subscribe), approval (which requires the subscriber to be manually approved), policy (which only allows users with specific groups or attributes to subscribe), or manual (which requires users to be manually added).

    equalization

    array Details the policy conditions of the equalization, including the configured (or recommended) user groups and attributes.

    workspace

    array Information on workspaces in the project.

    type

    string The type of Immuta project, either user created project (user) or system generated project (schema).

    createdAt

    timestamp Date of the project creation.

    updatedAt

    timestamp Date of the most recent update.

    acknowledgeRequired

    boolean When true, the requesting user has not yet agreed to the project acknowledgement.

    subscriptionId

    integer The project member's subscription ID.

    subscribedAsUser

    boolean If true, the user running the request is currently subscribed.

    subscriptionStatus

    string Subscription status of the user running the request.

    filterId

    integer Corresponds with the ID of the project.

    facets

    array Facets (categories) relevant to the search.

    tags

    array Project tags.

    purposes

    array Project purposes.

    stagedPurposes

    array Project purposes staged for approval.

    deleted

    boolean If true, the project has been deleted.

    snowflake

    array If a Snowflake workspace has been enabled for the project, this attribute will detail the schema, hostname, and warehouse.

    allowMaskedJoins

    boolean If true, masked joins are allowed.

    subscriptionPolicy

    array[object] A policy object for the Subscription Policy on the project. Details include type, exceptions, conditions, allowDiscovery, and automaticSubscription.

    subscriptionType

    string The type of subscription policy on the project. The type can be automatic (which allows anyone to subscribe), approval (which requires the subscriber to be manually approved), policy (which only allows users with specific groups or attributes to subscribe), or manual (which requires users to be manually added).

    equalization

    array Details the policy conditions of the equalization, including the configured (or recommended) user groups and attributes.

    workspace

    array Information on workspaces in the project.

    type

    string The type of Immuta project, either user created project (user) or system generated project (schema).

    createdAt

    timestamp Date of the project creation.

    updatedAt

    timestamp Date of the most recent update.

    acknowledgeRequired

    boolean When true, the requesting user has not yet agreed to the project acknowledgement.

    subscriptionId

    integer The project member's subscription ID.

    subscribedAsUser

    boolean If true, the user running the request is currently subscribed.

    subscriptionStatus

    string Subscription status of the user running the request.

    status

    string Accepted statuses are open or closed.

    No

    subscriptionType

    string The type of subscription policy on the project. The type can be automatic (which allows anyone to subscribe), approval (which requires the subscriber to be manually approved), policy (which only allows users with specific groups or attributes to subscribe), or manual (which requires users to be manually added).

    No

    tags

    array The project's new tags.

    No

    purposes

    array The project's new purposes.

    No

    stagedPurposes

    array The project's new purposes staged for approval.

    No

    deleted

    boolean If true, the project will be deleted.

    No

    snowflake

    array This enables a Snowflake workspace for the project and details the schema, hostname, and warehouse.

    No

    allowMaskedJoins

    boolean If true, masked joins will be allowed.

    No

    subscriptionPolicy

    array[object] A policy object for the Subscription Policy on the project. Details include type, exceptions, conditions, allowDiscovery, and automaticSubscription. If this is not set, it will be the default manual.

    No

    equalization

    array Details the policy conditions of the equalization, including the configured (or recommended) user groups and attributes.

    No

    workspace

    array Information on workspaces in the project.

    No

    tags

    array Project tags.

    purposes

    array Project purposes.

    stagedPurposes

    array Project purposes staged for approval.

    deleted

    boolean If true, the project will be deleted.

    snowflake

    array If a Snowflake workspace has been enabled for the project, this attribute will detail the schema, hostname, and warehouse.

    allowMaskedJoins

    boolean If true, masked joins will be allowed.

    subscriptionPolicy

    array[object] A policy object for the Subscription Policy on the project. Details include type, exceptions, conditions, allowDiscovery, and automaticSubscription.

    subscriptionType

    string The type of subscription policy on the project. The type can be automatic (which allows anyone to subscribe), approval (which requires the subscriber to be manually approved), policy (which only allows users with specific groups or attributes to subscribe), or manual (which requires users to be manually added).

    equalization

    array Details the policy conditions of the equalization, including the configured (or recommended) user groups and attributes.

    workspace

    array Information on workspaces in the project.

    type

    string The type of Immuta project, either user created project (user) or system generated project (schema).

    createdAt

    timestamp Date of the project creation.

    updatedAt

    timestamp Date of the most recent update.

    workspaceWarnings

    string This message describes issues with the created workspace.

    actionBy

    array The user data for the user who took the action.

    targetUser

    array The user data for the user who the action was directed towards.

    targetGroup

    array The group data for the group who the action was directed towards.

    metadata

    array Details about the action. For example, if the notificationType was modelCreated, the metadata attribute would include the project name.

    createdAt

    timestamp Date the action was taken.

    updatedAt

    timestamp Date of the most recent activity on the action.

    read

    boolean If true, the activity has been viewed.

    unread

    integer The number of unviewed activities on that project.

    sortOrder

    string Sorts results by order, which must be asc or desc. The default is asc.

    No

    searchText

    string Searches text of member names.

    No

    approved

    boolean Filters results based on whether or not members' subscription status has been approved.

    No

    checkDataSources

    boolean When true, will check if users' meet the compliance requirements set on data sources within the project.

    No

    expandGroups

    boolean

    No

    email

    string The user's email.

    type

    string The type of Immuta project, either user created project (user) or system generated project (schema).

    approved

    boolean When true, the members' subscription status has been approved.

    state

    string The user's relationship to the project. Options include owner, not_subscribed, pending, subscribed, and expert.

    systemGenerated

    boolean When true, the user is a system generated account.

    lastExternalRefresh

    timestamp The date of the last time this user's information was updated from an external IAM.

    subscriptionId

    integer The project member's subscription ID.

    createdAt

    timestamp The date that this user was created in Immuta.

    updatedAt

    timestamp The date of the most recent update of the user.

    approvals

    array Details on how this new member will fit into the project's approval process.

    compliance

    array Details about the compliance requirements of the project, including missingDataSources and invalidSubscriptions.

    group

    array Includes the group id, name, and iam.

    No

    approvals

    array Details on how this new member will fit into the project's approval process.

    No

    sortField

    string Used to sort results by field. Options include addedBy, addedOn, and dataSourceName. The default is dataSourceName.

    No

    sortOrder

    string Sorts results by order, which must be asc or desc. The default is asc.

    No

    unsubscribed

    boolean If true, filters by unsubscribed status (includes data sources with a pending subscription). If false, filters by subscribed status.

    No

    subscription

    string Searches based on the subscription status of the user. Options include not_subscribed, owner, pending, or subscribed.

    No

    dataSourceId

    integer The data source ID.

    addedByProfile

    integer The profile ID of the user who added the data source to the project.

    deleted

    boolean If true, the data source has been deleted.

    subscriptionType

    string The type of subscription policy on the project. The type can be automatic (which allows anyone to subscribe), approval (which requires the subscriber to be manually approved), policy (which only allows users with specific groups or attributes to subscribe), or manual (which requires users to be manually added).

    subscriptionStatus

    string

    subscriptionPolicy

    array[object] A policy object for the Subscription Policy on the data source. Details include type, exceptions, conditions, allowDiscovery, and automaticSubscription.

    connectionString

    string The data source connection string.

    blobHandlerType

    string The data platform.

    derivedInThisProject

    boolean If true, this data source was created as a derived data source in this project.

    id

    integer Project ID.

    Yes

    projectKey

    string Name of the project.

    Yes

    name

    string Name of the project.

    Yes

    status

    string (Accepted statuses are open or closed.)

    id

    integer Project ID.

    projectKey

    string Name of the project.

    name

    string Name of the project.

    status

    string (Statuses are open or closed.)

    description

    string Project description.

    documentation

    string Project documentation.

    GET

    /project

    Search for projects.

    GET

    /project/{projectId}

    Get the project with the given ID.

    offset

    integer Used in combination with size to fetch pages. The default is 0.

    No

    size

    integer The number of results to return per page.

    No

    sortField

    string Used to sort results by field.

    No

    sortOrder

    string Sorts results by order, which must be asc or desc. The default is asc.

    count

    integer Number of projects found.

    hits

    array Details about each project listed.

    id

    integer The project ID.

    projectKey

    string Name of the project.

    name

    string Name of the project.

    status

    string Statuses are open or closed.

    projectId

    integer The project ID.

    Yes

    checkForSqlAccount

    boolean Default is true.

    No

    id

    integer Project ID.

    projectKey

    string Name of the project.

    name

    string Name of the project.

    status

    string Statuses are open or closed.

    description

    string Project description.

    documentation

    string Project documentation.

    PUT

    /project/{projectId}

    Update the project with the given ID.

    GET

    /project/{projectId}/activity

    Get all of the recent activity for a given project.

    GET

    /project/{projectId}/checkEqualizationState

    Get current state of an equalized project.

    projectId

    integer The project ID.

    Yes

    deleteDataSources

    boolean If true, the data sources in the project will be deleted.

    No

    type

    string The type of Immuta project, either user created project (user) or system generated project (schema).

    No

    name

    string The project's new name.

    No

    description

    string The project's new description.

    No

    documentation

    string The project's new documentation.

    id

    integer Project ID.

    projectKey

    string Name of the project.

    name

    string Name of the project.

    status

    string Statuses are open or closed.

    description

    string Project description.

    documentation

    string Project documentation.

    projectId

    integer The project ID.

    Yes

    offset

    integer Used in combination with size to fetch pages.

    No

    size

    integer Used to select the number of activities.

    No

    count

    integer The total number of actions.

    activities

    array The id, modelType, modelId, notificationType, actionsBy, targetUser, targetGroup, additionalText, array, createdAt, updatedAt, and read for each action listed.

    id

    integer The activity ID.

    modelType

    string The Immuta feature the activity is attached to.

    modelId

    string The ID of the Immuta feature the activity is attached to.

    notificationType

    string The type of activity or notification, such as modelCreated, modelUserAdded, or projectUpdated.

    projectId

    integer The project ID.

    Yes

    equalizationState

    string The state of the project's equalization. Options include: off, recommended, active, upgrade, or nonCompliantMembers.

    GET

    /project/{projectId}/members

    Get all of the members for a given project.

    POST

    /project/{projectId}/checkEqualizedAuths

    Check that all members meet the provided equalized entitlements.

    POST

    /project/{projectId}/members

    Add a member to the project.

    PUT

    /project/{projectId}/members/{subscriptionId}

    Update a member of the project.

    projectId

    integer The project ID.

    Yes

    offset

    integer Used in combination with size to fetch pages.

    No

    size

    integer The number of results to return per page.

    No

    sortField

    string Sorts results by field. The default is name.

    count

    integer The number of members in the project.

    members

    array The profile, name, iamId, userId, email, type, approved, state, systemGenerated, lastExternalRefresh, subscriptionId, createdAt, updatedAt, approvals, currentUserCanApprove, and compliance for each member result.

    profile

    integer The user's profile ID.

    name

    string The user's name.

    iamId

    string The ID of the IAM, which is configured on the App Settings page.

    userId

    string The user's Immuta username.

    projectId

    integer The project ID.

    Yes

    conditionsObj

    array Details containing operator, conditions, type, group, and field values.

    Yes

    operator

    string

    Yes

    conditions

    array Details containing type, group, and field.

    Yes

    type

    string The type of Immuta project, either user created project (user) or system generated project (schema).

    validSet

    boolean When true, users meet the specified entitlements.

    usersMissingAuths

    array Metadata about the user (name and subscription id) and the name of the group they're missing.

    projectId

    integer The project ID.

    Yes

    profileId

    integer The new user's ID.

    Yes

    groupId

    integer The group ID that the new user is a part of. This will add a whole group.

    No

    state

    string The new user's connection to the project. Options include owner, not_subscribed, pending, subscribed, and expert.

    No

    expiration

    timestamp The date when the member should no longer have access to the project.

    projectId

    integer The project ID.

    Yes

    subscriptionId

    integer The project member's subscription ID.

    Yes

    state

    array[string] The user's role in the project. Options include owner, not_subscribed, pending, subscribed, and expert.

    Yes

    expiration

    timestamp The date when the member should no longer have access to the project.

    No

    state

    array[string] The user's role in the project. Options include owner, not_subscribed, pending, subscribed, and expert.

    expiration

    timestamp The date when the member should no longer have access to the project.

    GET

    /project/{projectId}/dataSources

    Get all of the data sources for a given project.

    DELETE

    /project/{projectId}/dataSources

    Remove supplied data sources from the project.

    POST

    /project/{projectId}/dataSources

    Add data sources to a project.

    PUT

    /project/{projectId}/dataSources/{dataSourceId}

    Update the reason for adding a data source to a project.

    projectId

    integer The project ID.

    Yes

    offset

    integer Used in combination with size to fetch pages.

    No

    searchText

    string Searches text of the data source names.

    No

    size

    integer The number of results to return per page.

    count

    integer The total number of data sources in the project.

    dataSources

    array[object] An array of data source objects that includes addedBy, dataSourceName, policyHandlerType, addedOn, dataSourceId, addedByProfile, deleted, subscriptionType, subscriptionStatus, subscriptionPolicy, connectionString, blobHandlerType, and derivedThisProject values for each data source.

    addedBy

    string The user who added the data source to the project.

    dataSourceName

    string The name of the data source.

    policyHandlerType

    string

    addedOn

    timestamp The date the data source was added to the project.

    projectId

    integer The project ID.

    Yes

    ids

    integer The IDs of the data sources to remove from the project.

    Yes

    success

    array The id, blobHandlerType, and name values of the data sources that have been successfully removed.

    inError

    array The id, blobHandlerType, and name values of the data sources that have not been successfully removed.

    id

    integer The data source ID.

    blobHandlerType

    string The type of blob handler of the data source.

    name

    string The data source name.

    projectId

    integer The project ID.

    Yes

    dataSourceIds

    integer The data source IDs for the data sources to add to the project.

    Yes

    success

    array The id, blobHandlerType, and name values of the data sources that have been successfully added.

    inError

    array The id, blobHandlerType, and name values of the data sources that have not been successfully added.

    id

    integer The data source ID.

    blobHandlerType

    string The type of blob handler of the data source.

    name

    string The data source name.

    projectId

    integer The project ID.

    Yes

    dataSourceId

    integer The data source ID.

    Yes

    DELETE

    /project/{projectId}/unsubscribe

    Unsubscribe from a project.

    POST

    /project/current/{projectId}

    Set the current project ID the current user is acting under.

    POST

    /project/current/null

    Set current project to None.

    POST

    /project/{projectId}/members/{subscriptionId}/acknowledge

    Acknowledge all the restrictions on this project.

    projectId

    string The project ID.

    Yes

    projectId

    integer The project ID.

    Yes

    projectId

    integer The project ID.

    Yes

    subscriptionId

    integer The project member's subscription ID.

    Yes

    text

    string

    Yes

    acknowledgeRequired

    boolean When true, the requesting user has not yet agreed to the project acknowledgement.

    purposes

    array Details of the purpose that has been acknowledged.

    projectId

    integer The project ID.

    Yes

    hardDelete

    boolean If true, the project was permanently deleted.

    Search for Immuta projects
    Manage your Immuta projects
    Manage project members
    Manage project data sources
    Use projects
    Delete projects
    project context

    Yes

    No

    No

    No

    No

    No

    No

    curl \
      --request POST \
      --header "Content-Type: application/json" \
      --header "Authorization: Bearer dea464c07bd07300095caa8" \
      --data @example-payload.json \
      https://demo.immuta.com/project
    {
      "id": 4,
      "projectKey": "api project",
      "name": "API Project",
      "status": "open",
      "description": "project created with api",
      "deleted": false,
      "allowMaskedJoins": false,
      "createdAt": "2021-09-10",
      "updatedAt": "2021-09-10"
    }
    {
      "id": 4,
      "projectKey": "api project",
      "name": "API Project",
      "status": "open",
      "description": "project created with api",
      "documentation": "# API Project",
      "deleted": false,
      "allowMaskedJoins": false,
      "subscriptionType": "manual",
      "subscriptionPolicy": null,
      "equalization": null,
      "workspace": null,
      "snowflake": null,
      "type": null,
      "schema": null,
      "createdBy": 2,
      "updatedBy": 2,
      "createdAt": "2021-09-10T00:00:00.000Z",
      "updatedAt": "2021-09-10T00:00:00.000Z",
      "schemaEvolutionId": null,
      "purposes": [],
      "stagedPurposes": []
    }
    curl \
      --request GET \
      --header "Content-Type: application/json" \
      --header "Authorization: Bearer dea464c07bd07300095caa8" \
      https://demo.immuta.com/project
    {
      "hits": [
        {
          "id": 8,
          "name": "Improving Employee Onboarding and Retention",
          "status": "open",
          "description": null,
          "deleted": false,
          "updatedAt": "2021-07-14T23:14:46.210Z",
          "subscriptionPolicy": null,
          "createdAt": "2021-07-14T23:13:53.752Z",
          "filterId": 8,
          "subscriptionType": "manual",
          "isEqualized": false,
          "acknowledgeRequired": false,
          "subscriptionStatus": "not_subscribed",
          "purposeCount": 1,
          "hasDeletedPurposes": false,
          "workspace": null,
          "type": null,
          "allowMaskedJoins": false
        },
        {
          "id": 4,
          "name": "Medical Records",
          "status": "open",
          "description": "This project contains all data sources under the schema, medical_records, from [email protected]:1433/example.",
          "deleted": false,
          "updatedAt": "2021-06-22T23:24:58.766Z",
          "subscriptionPolicy": null,
          "createdAt": "2021-06-22T23:24:58.766Z",
          "filterId": 4,
          "subscriptionType": "manual",
          "isEqualized": false,
          "acknowledgeRequired": false,
          "subscriptionStatus": "owner",
          "purposeCount": 0,
          "hasDeletedPurposes": false,
          "workspace": null,
          "type": "Schema",
          "allowMaskedJoins": false
        },
        {
          "id": 6,
          "name": "sample123",
          "status": "open",
          "description": null,
          "deleted": false,
          "updatedAt": "2021-07-12T21:32:37.020Z",
          "subscriptionPolicy": null,
          "createdAt": "2021-07-12T21:32:37.012Z",
          "filterId": 6,
          "subscriptionType": "manual",
          "isEqualized": false,
          "acknowledgeRequired": false,
          "subscriptionStatus": "not_subscribed",
          "purposeCount": 1,
          "hasDeletedPurposes": false,
          "workspace": null,
          "type": null,
          "allowMaskedJoins": false
        },
        {
          "id": 2,
          "name": "test",
          "status": "open",
          "description": null,
          "deleted": false,
          "updatedAt": "2021-07-19T20:48:00.758Z",
          "subscriptionPolicy": null,
          "createdAt": "2021-05-19T22:50:44.190Z",
          "filterId": 2,
          "subscriptionType": "manual",
          "isEqualized": false,
          "acknowledgeRequired": false,
          "subscriptionStatus": "owner",
          "purposeCount": 2,
          "hasDeletedPurposes": false,
          "workspace": null,
          "type": null,
          "allowMaskedJoins": false
        },
        {
          "id": 3,
          "name": "Tpc",
          "status": "open",
          "description": "This project contains all data sources under the schema, tpc, from [email protected]:1433/example.",
          "deleted": false,
          "updatedAt": "2021-05-20T16:29:09.679Z",
          "subscriptionPolicy": null,
          "createdAt": "2021-05-20T16:29:09.679Z",
          "filterId": 3,
          "subscriptionType": "manual",
          "isEqualized": false,
          "acknowledgeRequired": false,
          "subscriptionStatus": "owner",
          "purposeCount": 0,
          "hasDeletedPurposes": false,
          "workspace": null,
          "type": "Schema",
          "allowMaskedJoins": false
        }
      ],
      "facets": {},
      "count": 5
    }
    curl \
      --request GET \
      --header "Content-Type: application/json" \
      --header "Authorization: Bearer dea464c07bd07300095caa8" \
      https://demo.immuta.com/project/2
    {
      "id": 2,
      "projectKey": "test",
      "name": "test",
      "status": "open",
      "description": null,
      "documentation": "# test\n\n12345",
      "deleted": true,
      "allowMaskedJoins": true,
      "subscriptionType": "manual",
      "subscriptionPolicy": null,
      "equalization": null,
      "workspace": null,
      "snowflake": null,
      "type": null,
      "schema": null,
      "createdBy": 2,
      "updatedBy": 2,
      "createdAt": "2021-05-19T22:50:44.190Z",
      "updatedAt": "2021-07-29T18:30:04.066Z",
      "schemaEvolutionId": null,
      "subscribedAsUser": true,
      "subscriptionId": 5,
      "acknowledgeRequired": false,
      "subscriptionStatus": "owner",
      "requestedState": "owner",
      "approved": true,
      "subscriptionExpiration": null,
      "filterId": 2,
      "purposeCount": null,
      "purposes": [
        {
          "id": 8,
          "name": "Analyzing Onboarding and Job Satisfaction",
          "acknowledgement": null,
          "description": "Data can only be accessed for analyzing the effectiveness of current onboarding practices and trends in employee job satisfaction  reasons for data access must be approved by a compliance committee.",
          "addedByProfile": 2,
          "displayAcknowledgement": true,
          "deleted": false,
          "systemGenerated": false,
          "policyMetadata": null,
          "createdAt": "2021-07-07T19:56:06.360Z",
          "updatedAt": "2021-07-07T19:56:06.360Z",
          "createdBy": 2
        },
        {
          "id": 4,
          "name": "Use Case Outside De-identification",
          "acknowledgement": "I agree to use the data associated with this project for the stated purpose of the project, and for that purpose only, as listed in the project's homepage, and to refrain from sharing that data outside of the project or Immuta. In the event that I discover risks that I believe could lead to unauthorized access, I agree to immediately notify the project owner or governance team and take immediate action t  address and mitigate such risks.",
          "description": null,
          "addedByProfile": 1,
          "displayAcknowledgement": true,
          "deleted": false,
          "systemGenerated": true,
          "policyMetadata": null,
          "createdAt": "2021-05-19T20:32:03.437Z",
          "updatedAt": "2021-07-28T14:17:22.690Z",
          "createdBy": 2
        }
      ],
      "stagedPurposes": [],
      "tags": []
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/project/2
    {
      "name": "Documentation Project",
      "deleted": false
    }
    {
      "workspace": null,
      "createdBy": 2,
      "updatedBy": 2,
      "schemaEvolutionId": 1,
      "projectKey": "Medical Records",
      "name": "Documentation Project",
      "status": "open",
      "description": "This project contains all data sources under the schema, medical_records, from [email protected]:1433/example.",
      "documentation": "This is an automatically generated project that collects data sources under the schema, medical_records, from [email protected]:1433/example. When data sources in this schema are added to the system, they will automatically be added to this project.",
      "deleted": false,
      "allowMaskedJoins": false,
      "subscriptionType": "manual",
      "subscriptionPolicy": null,
      "equalization": null,
      "snowflake": null,
      "type": "Schema",
      "schema": "medical_records",
      "id": 2,
      "createdAt": "2021-08-24T15:44:29.477Z",
      "updatedAt": "2021-09-10T21:49:00.678Z",
      "purposeCount": 0,
      "tags": [],
      "projectPurposes": [],
      "stagedPurposes": [],
      "purposes": [],
      "workspaceWarnings": []
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/project/2/activity?size=1
    {
      "count": 40,
      "activities": [
        {
          "modelType": "project",
          "modelId": "2",
          "createdAt": "2021-07-29T20:56:11.856Z",
          "notificationType": "projectUpdated",
          "metadata": {
            "fields": [
              "deleted",
              "purposes"
            ],
            "projectName": "test",
            "approvedPurposeCount": 0,
            "deniedPurposesCount": 0,
            "requestedPurposeCount": 0,
            "newPurposesAddedCount": 2
          },
          "read": false,
          "id": 191,
          "updatedAt": "2021-07-29T20:56:11.856Z",
          "actionBy": {
            "id": 2,
            "name": "John Doe",
            "email": "[email protected]"
          },
          "targetUser": {
            "id": 2,
            "name": "John Doe",
            "email": "[email protected]"
          }
        }
      ],
      "unread": 40,
      "next": "191_2021-07-29T20:56:11.856Z"
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/project/2/checkEqualizationState
    {
      "equalizationState": "recommended"
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/project/2/members
    {
      "count": 1,
      "members": [
        {
          "profile": 2,
          "name": "John Doe",
          "iamid": "bim",
          "userid": "[email protected]",
          "email": "[email protected]",
          "type": "user",
          "approved": true,
          "state": "owner",
          "systemGenerated": false,
          "lastExternalRefresh": "2021-07-30T17:49:55.050Z",
          "subscriptionId": 5,
          "createdAt": "2021-05-19T22:50:44.206Z",
          "updatedAt": "2021-07-19T20:47:53.069Z",
          "approvals": [],
          "currentUserCanApprove": false
        }
      ]
    }
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/project/1/checkEqualizedAuths
    {
      "conditionsObj": {
        "operator": "and",
        "conditions": [
          {
            "type": "groups",
            "group": {
              "id": 1,
              "name": "View Masked Values"
            }
          }
        ]
      }
    }
    {
      "validSet": true,
      "usersMissingAuths": {}
    }
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https:demo.immuta.com/project/1/members
    {
      "profileId": 3,
      "state": "subscribed",
    }
    {
      "subscriptionId": 18,
      "state": "subscribed",
      "approved": true
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/project/3/members/2
    {
      "state": "subscribed"
    }
    {
      "state": "subscribed",
      "expiration": null
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/project/2/dataSources
    {
      "count": 3,
      "dataSources": [
        {
          "addedBy": "John Doe",
          "dataSourceName": "Fake Medical Claims 2017",
          "policyHandlerType": "Builder",
          "addedOn": "2021-06-25T19:11:03.230Z",
          "dataSourceId": 8,
          "addedByProfile": 2,
          "deleted": false,
          "subscriptionType": "policy",
          "subscriptionStatus": "owner",
          "subscriptionPolicy": {
            "type": "subscription",
            "exceptions": {
              "operator": "or",
              "conditions": [
                {
                  "type": "groups",
                  "group": {
                    "name": "HR Department"
                  }
                },
                {
                  "type": "authorizations",
                  "authorization": {
                    "auth": "Manager",
                    "value": "Receiving Surveys"
                  }
                }
              ]
            },
            "shareResponsibility": false,
            "automaticSubscription": true
          },
          "connectionString": "[email protected]:1433/example",
          "blobHandlerType": "Snowflake",
          "derivedInThisProject": false
        },
        {
          "addedBy": "John Doe",
          "dataSourceName": "Tpc Randomized",
          "policyHandlerType": "Builder",
          "addedOn": "2021-06-25T22:26:38.170Z",
          "dataSourceId": 6,
          "addedByProfile": 2,
          "deleted": false,
          "subscriptionType": "policy",
          "subscriptionStatus": "owner",
          "subscriptionPolicy": {
            "type": "subscription",
            "exceptions": {
              "operator": "and",
              "conditions": [
                {
                  "type": "groups",
                  "group": {
                    "name": "HR"
                  }
                }
              ]
            },
            "shareResponsibility": false,
            "automaticSubscription": true
          },
          "connectionString": "[email protected]:1433/example",
          "blobHandlerType": "Azure Synapse Analytics",
          "derivedInThisProject": false
        },
        {
          "addedBy": "John Doe",
          "dataSourceName": "Tpc Web Sales",
          "policyHandlerType": "None",
          "addedOn": "2021-06-25T19:11:03.226Z",
          "dataSourceId": 7,
          "addedByProfile": 2,
          "deleted": false,
          "subscriptionType": "manual",
          "subscriptionStatus": "owner",
          "subscriptionPolicy": null,
          "connectionString": "[email protected]:1433/example",
          "blobHandlerType": "Azure Synapse Analytics",
          "derivedInThisProject": false
        }
      ]
    }
    curl \
        --request DELETE \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/project/2/dataSources?ids=8
    {
      "success": [
        {
          "id": 8,
          "name": "Fake Medical Claims 2017",
          "blobHandlerType": "Snowflake"
        }
      ],
      "inError": []
    }
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/project/1/dataSources
    {
      "dataSourceIds": [
        2
      ]
    }
    {
      "success": [
        {
          "id": 2,
          "name": "Credit Payments Bank Deposits",
          "blobHandlerType": "Snowflake"
        }
      ],
      "inError": []
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/project/1/dataSources/1
    curl \
        --request DELETE \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/project/5/unsubscribe
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/project/current/1
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/project/current/null
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/project/1/members/1/acknowledge
    {}
    {
      "acknowledgeRequired": false,
      "purposes": [
        {
          "id": 1,
          "name": "Re-identification Prohibited",
          "acknowledgement": "I agree to use the data associated with this project for the stated purpose of the project, and for that purpose only, as listed in the project's homepage, and to refrain from sharing that data outside of the project or Immuta. I also agree not to re-identify or take any steps to re-identify the individuals whose personal information is contained in the data sources attached to the project. In the event that these individuals have been identified or that I discover risks that I believe could lead to their identification, I agree to immediately notify the project owner or governance team and take immediate action to address and mitigate such risks. I further agree to refrain from contacting any individuals who might be identified."
        }
      ]
    }
    curl \
        --request DELETE \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/project/4
    {
      "hardDelete": true
    }

    Generate Governance Reports

    Governance API reference guide

    This page describes the /governance endpoint of the Immuta API and its request parameters used to generate governance reports.

    Additional fields may be included in some responses you receive; however, these attributes

    are for internal purposes and are therefore undocumented.

    Default 9-minute timeout

    Governance report queries will timeout after 9 minutes to avoid overconsumption of resources. If your governance report was not generated because of this timeout, to change the default setting.

    Endpoints

    Method
    Endpoint
    Description

    GET /governance/reports/user/allUserDataSources

    Generate a report of all the data sources that all users are currently subscribed to.

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/user/allUserStatus

    Generate a report of all current users and details about them.

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/user/{userId}/dataSource

    Generate a report of the data sources the specified user is currently subscribed to.

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/user/{userId}/group

    Generate a report of the groups the specified user is currently a member of.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/user/{userId}/project

    Generate a report of the projects the specified user is currently a member of.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/user/{userId}/dataSourcePurposeAccess

    Generate a report of all the purposes the user has accessed data for during the specified date range.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/user/{userId}/dataSourceUserAccess

    Generate a report of all the data sources the user has directly accessed during the specified date range.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/user/{userId}/attribute

    Generate a report of all the attributes the specified user currently has.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/group/allGroupDataSourceAccess

    Generate a report of all the data sources that any member in any group is subscribed to.

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/group/{groupId}/user

    Generate a report of all the users who are currently a member of the group.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/group/{groupId}/dataSource

    Generate a report of all the data sources that members of the group are currently subscribed to.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/group/{groupId}/project

    Generate a report of all the projects that the members of the group are currently subscribed to.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/group/{groupId}/attribute

    Generate a report of all the attributes currently assigned to the specified group.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/project/{projectId}/user

    Generate a report of all the data sources and members currently in the project.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/project/{projectId}/dataSource

    Generate a report of all the data sources currently in the specified project.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/project/{projectId}/purpose

    Generate a report of all the purposes currently assigned to the specified project.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/dataSource/allDataSourceUsers

    Generate a report of every user and group currently subscribed to any data source.

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/dataSource/{dataSourceId}/user

    Generate a report of all the users and groups currently subscribed to the specified data source.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/dataSource/{dataSourceId}/project

    Generate a report of the projects that currently have the specified data source.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/dataSource/{dataSourceId}/purpose

    Generate a report of the purpose of every project that has the specified data source.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/dataSource/{dataSourceId}/dataSourceUserAccess

    Generate a report of the users that have accessed the data source during the specified date range.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/dataSource/{dataSourceId}/dataSourcePurposeAccess

    Generate a report of the purposes the data source has been accessed for during the specified date range.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/dataSource/{dataSourceId}/subscriptionHistory

    Generate a report of the users and groups that have been subscribed to the data source during the specified date range.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/dataSource/{dataSourceId}/dataSourceSddScoring

    Generate a report of data discovery scoring information for every column in the specified data source.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/purpose/{purposeId}/user

    Generate a report of all current members of the projects that use the specified purpose.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/purpose/{purposeId}/dataSource

    Generate a report of all current data sources of the projects that use the specified purpose.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/purpose/{purposeId}/purpose

    Generate a report of all other purposes currently combined with the specified purpose.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/purpose/{purposeId}/project

    Generate a report of projects with the specified purpose currently assigned.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/purpose/{purposeId}/dataSourcePurposeAccess

    Generate a report of data sources that have been accessed for the specified purpose during the specified date range.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/tag/allDataSourceUserAccess

    Generate a report of the users who have subscribed to data sources that were tagged with any tag since the specified start date.

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/tag/allProjects

    Generate a report of the projects with data sources currently tagged with any tag.

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/tag/allUserDataSources

    Generate a report of every data source currently tagged with any tag.

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/tag/{tagName}/dataSource

    Generate a report of the data sources currently tagged with the specified tag.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/tag/{tagName}/dataSourceUserAccess

    Generate a report of users who have accessed data sources tagged with the specified tag during the specified date range.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/tag/{tagName}/dataSourcePurposeAccess

    Generate a report of the purposes that have been used to access data with the specified tag during the specified date range.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/tag/{tagName}/project

    Generate a report of the projects that have data sources currently tagged with this tag.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/policy/{policyType}/dataSource

    Generate a report of the data sources this data policy type is currently applied to.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/globalPolicy/globalPolicyDisabled

    Generate a report of all disabled global policies.

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/globalPolicy/globalPolicyInConflict

    Generate a report of all policies currently in conflict.

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/globalPolicy/{policyId}/globalPolicyNotCertified

    Generate a report of all data sources the specified policy has not been certified on.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/globalPolicy/{policyId}/globalPolicyCertified

    Generate a report of all data sources the specified policy has been certified on.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/globalPolicy/{policyId}/dataSource

    Generate a report of all data sources the specified global policy is applied to.

    Request parameter

    Parameter
    Description
    Required or optional

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/sdd/sddTagsOverview

    Generate a report of all columns with Discovered tags currently applied.

    Query parameters

    Parameter
    Description
    Required or optional

    GET /governance/reports/sdd/legacySddTags

    Generate a report of all columns with legacy Discovered tags currently applied.

    Query parameters

    Parameter
    Description
    Required or optional

    Example request

    Example response

    GET

    Generate a report of the projects the specified user is currently a member of.

    GET

    Generate a report of all the purposes the user has accessed data for during the specified date range.

    GET

    Generate a report of all the data sources the user has directly accessed during the specified date range.

    GET

    Generate a report of all the attributes the specified user currently has.

    GET

    Generate a report of all the data sources that any member in any group is subscribed to.

    GET

    Generate a report of all the users who are currently a member of the group.

    GET

    Generate a report of all the data sources that members of the group are currently subscribed to.

    GET

    Generate a report of all the projects that the members of the group are currently subscribed to.

    GET

    Generate a report of all the attributes currently assigned to the specified group.

    GET

    Generate a report of all the data sources and members currently in the project.

    GET

    Generate a report of all the data sources currently in the specified project.

    GET

    Generate a report of all the purposes currently assigned to the specified project.

    GET

    Generate a report of every user and group currently subscribed to any data source.

    GET

    Generate a report of all the users and groups currently subscribed to the specified data source.

    GET

    Generate a report of the projects that currently have the specified data source.

    GET

    Generate a report of the purpose of every project that has the specified data source.

    GET

    Generate a report of the users that have accessed the data source during the specified date range.

    GET

    Generate a report of the purposes the data source has been accessed for during the specified date range.

    GET

    Generate a report of the users and groups that have been subscribed to the data source during the specified date range.

    GET

    Generate a report of data discovery scoring information for every column in the specified data source.

    GET

    Generate a report of all current members of the projects that use the purpose.

    GET

    Generate a report of all current data sources of the projects that use the specified purpose.

    GET

    Generate a report of all other purposes currently combined with the specified purpose.

    GET

    Generate a report of projects with the specified purpose currently assigned.

    GET

    Generate a report of data sources that have been accessed for the purpose during the specified date range.

    GET

    Generate a report of the users who have subscribed to data sources that were tagged with any tag since the specified start date.

    GET

    Generate a report of the projects with data sources currently tagged with any tag.

    GET

    Generate a report of every data source currently tagged with any tag.

    GET

    Generate a report of the data sources currently tagged with the specified tag.

    GET

    Generate a report of users who have accessed data sources tagged with the specified tag during the specified date range.

    GET

    Generate a report of the purposes that have been used to access data with the specified tag during the specified date range.

    GET

    Generate a report of the projects that have data sources currently tagged with this tag.

    GET

    Generate a report of the data sources this data policy type is currently applied to.

    GET

    Generate a report of all disabled global policies.

    GET

    Generate a report of all policies currently in conflict.

    GET

    Generate a report of all data sources the specified policy has not been certified on.

    GET

    Generate a report of all data sources the specified policy has been certified on.

    GET

    Generate a report of all data sources the specified global policy is applied to.

    GET

    Generate a report of all columns with Discovered tags currently applied.

    GET

    Generate a report of all columns with legacy Discovered tags currently applied.

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    export boolean

    If true, the response will be provided in a downloadable csv file.

    Optional

    GET

    /governance/reports/user/allUserDataSources

    Generate a report of all the data sources that all users are currently subscribed to.

    GET

    /governance/reports/user/allUserStatus

    Generate a report of all current users and details about them.

    GET

    /governance/reports/user/{userId}/dataSource

    Generate a report of the data sources the specified user is currently subscribed to.

    GET

    /governance/reports/user/{userId}/group

    Generate a report of the groups the specified user is currently a member of.

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    userId number

    The unique identifier of the user.

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    userId number

    The unique identifier of the user.

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    userId number

    The unique identifier of the user.

    Required

    startDate string

    The beginning date of the date range. Must be within 90 days of the current date. Ex: 2024-10-07

    Required

    endDate string

    The ending date of the date range. Must be within 90 days of the current date. Ex: 2024-10-07

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    userId number

    The unique identifier of the user.

    Required

    startDate string

    The beginning date of the date range. Must be within 90 days of the current date. Ex: 2024-10-07

    Required

    endDate string

    The ending date of the date range. Must be within 90 days of the current date. Ex: 2024-10-07

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    userId number

    The unique identifier of the user.

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    groupId number

    The unique identifier of the group.

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    groupId number

    The unique identifier of the group.

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    groupId number

    The unique identifier of the group.

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    groupId number

    The unique identifier of the group.

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    projectId number

    The unique identifier of the project.

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    projectId number

    The unique identifier of the project.

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    projectId number

    The unique identifier of the project.

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    dataSourceId number

    The unique identifier of the data source.

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    dataSourceId number

    The unique identifier of the data source.

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    dataSourceId number

    The unique identifier of the data source.

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    dataSourceId number

    The unique identifier of the data source.

    Required

    startDate string

    The beginning date of the date range. Must be within 90 days of the current date. Ex: 2024-10-07

    Required

    endDate string

    The ending date of the date range. Must be within 90 days of the current date. Ex: 2024-10-07

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    dataSourceId number

    The unique identifier of the data source.

    Required

    startDate string

    The beginning date of the date range. Must be within 90 days of the current date. Ex: 2024-10-07

    Required

    endDate string

    The ending date of the date range. Must be within 90 days of the current date. Ex: 2024-10-07

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    dataSourceId number

    The unique identifier of the data source.

    Required

    startDate string

    The beginning date of the date range. Must be within 90 days of the current date. Ex: 2024-10-07

    Required

    endDate string

    The ending date of the date range. Must be within 90 days of the current date. Ex: 2024-10-07

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    dataSourceId number

    The unique identifier of the data source.

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    purposeId string

    The unique identifier of the purpose.

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    purposeId string

    The unique identifier of the purpose.

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    purposeId string

    The unique identifier of the purpose.

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    purposeId string

    The unique identifier of the purpose.

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    purposeId number

    The unique identifier of the purpose.

    Required

    startDate string

    The beginning date of the date range. Must be within 90 days of the current date. Ex: 2024-10-07

    Required

    endDate string

    The ending date of the date range. Must be within 90 days of the current date. Ex: 2024-10-07

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    startDate string

    The date to start the report at. Must be within 90 days of the current date. Ex: 2024-10-07

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    tagName string

    The tag name.

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    tagName string

    The tag name.

    Required

    startDate string

    The beginning date of the date range. Must be within 90 days of the current date. Ex: 2024-10-07

    Required

    endDate string

    The ending date of the date range. Must be within 90 days of the current date. Ex: 2024-10-07

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    tagName string

    The tag name.

    Required

    startDate string

    The beginning date of the date range. Must be within 90 days of the current date. Ex: 2024-10-07

    Required

    endDate string

    The ending date of the date range. Must be within 90 days of the current date. Ex: 2024-10-07

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    tagName string

    The tag name.

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    policyType string

    The type of policy to generate a report on. Options include: exemption, visibility, masking, time, minimization, external, prerequisite, customWhere, and showRowsNever

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    policyId number

    The unique identifier of the policy.

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    policyId number

    The unique identifier of the policy.

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    policyId number

    The unique identifier of the policy.

    Required

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    size number

    The number of results to return per page.

    Optional

    offset number

    The number of items from the beginning of the response to exclude. You can combine the offset and size parameters to return a specific set of report results.

    Optional

    sortField string

    Used to sort results by field.

    Optional

    sortOrder string

    Sorts results by order, which must be asc or desc. The default is asc.

    submit a support ticket

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    Optional

    curl -X 'GET' \
      'https://www.organization.immuta.com/governance/reports/user/allUserDataSources' \
      -H 'accept: application/json' \
      -H 'Authorization: Bearer c3e78316bd2a4f329156a9c8fcd7dd8f'
    {
      "hits": [
        {
          "User": "Taylor Smith",
          "Data Source ID": 996,
          "Data Source": "Public Patientinfo",
          "Owners": "Taylor Smith",
          "Role": "Owner",
          "Subscription Type": "Individual User",
          "Last Subscription Date": "2024-09-10 15:17 UTC",
          "Approvers": "Taylor Smith",
          "Subscription Expiration": null,
          "User Groups": null,
          "Attributes": null
        },
        {
          "User": "Taylor Smith",
          "Data Source ID": 999,
          "Data Source": "Public Fftest",
          "Owners": "Taylor Smith",
          "Role": "Owner",
          "Subscription Type": "Individual User",
          "Last Subscription Date": "2024-09-10 15:17 UTC",
          "Approvers": "Taylor Smith",
          "Subscription Expiration": null,
          "User Groups": null,
          "Attributes": null
        },
        {
          "User": "Taylor Smith",
          "Data Source ID": 1000,
          "Data Source": "Public Patientbilling",
          "Owners": "Taylor Smith",
          "Role": "Owner",
          "Subscription Type": "Individual User",
          "Last Subscription Date": "2024-09-10 15:17 UTC",
          "Approvers": "Taylor Smith",
          "Subscription Expiration": null,
          "User Groups": null,
          "Attributes": null
        },
        {
          "User": "John Doe",
          "Data Source ID": 417,
          "Data Source": "Builtin Classifier Test2",
          "Owners": "John Doe",
          "Role": "Owner",
          "Subscription Type": "Group: Discover Team",
          "Last Subscription Date": "2024-05-30 19:42 UTC",
          "Approvers": "John Doe",
          "Subscription Expiration": null,
          "User Groups": "Discover Team",
          "Attributes": null
        },
        {
          "User": "John Doe",
          "Data Source ID": 775,
          "Data Source": "Classify Test Case",
          "Owners": "John Doe",
          "Role": "Owner",
          "Subscription Type": "Individual User",
          "Last Subscription Date": "2024-06-12 22:30 UTC",
          "Approvers": "John Doe",
          "Subscription Expiration": null,
          "User Groups": "Discover Team",
          "Attributes": null
        }
      ]
    }
    /governance/reports/user/{userId}/project
    /governance/reports/user/{userId}/dataSourcePurposeAccess
    /governance/reports/user/{userId}/dataSourceUserAccess
    /governance/reports/user/{userId}/attribute
    /governance/reports/group/allGroupDataSourceAccess
    /governance/reports/group/{groupId}/user
    /governance/reports/group/{groupId}/dataSource
    /governance/reports/group/{groupId}/project
    /governance/reports/group/{groupId}/attribute
    /governance/reports/project/{projectId}/user
    /governance/reports/project/{projectId}/dataSource
    /governance/reports/project/{projectId}/purpose
    /governance/reports/dataSource/allDataSourceUsers
    /governance/reports/dataSource/{dataSourceId}/user
    /governance/reports/dataSource/{dataSourceId}/project
    /governance/reports/dataSource/{dataSourceId}/purpose
    /governance/reports/dataSource/{dataSourceId}/dataSourceUserAccess
    /governance/reports/dataSource/{dataSourceId}/dataSourcePurposeAccess
    /governance/reports/dataSource/{dataSourceId}/subscriptionHistory
    /governance/reports/dataSource/{dataSourceId}/dataSourceSddScoring
    /governance/reports/purpose/{purposeId}/user
    /governance/reports/purpose/{purposeId}/dataSource
    /governance/reports/purpose/{purposeId}/purpose
    /governance/reports/purpose/{purposeId}/project
    /governance/reports/purpose/{purposeId}/dataSourcePurposeAccess
    /governance/reports/tag/allDataSourceUserAccess
    /governance/reports/tag/allProjects
    /governance/reports/tag/allUserDataSources
    /governance/reports/tag/{tagName}/dataSource
    /governance/reports/tag/{tagName}/dataSourceUserAccess
    /governance/reports/tag/{tagName}/dataSourcePurposeAccess
    /governance/reports/tag/{tagName}/project
    /governance/reports/policy/{policyType}/dataSource
    /governance/reports/globalPolicy/globalPolicyDisabled
    /governance/reports/globalPolicy/globalPolicyInConflict
    /governance/reports/globalPolicy/{policyId}/globalPolicyNotCertified
    /governance/reports/globalPolicy/{policyId}/globalPolicyCertified
    /governance/reports/globalPolicy/{policyId}/dataSource
    /governance/reports/sdd/sddTagsOverview
    /governance/reports/sdd/legacySddTags

    Manage IAMs

    BIM API reference guide

    This page details the bim API, which allows users to programmatically access information about users, their group memberships, and authentications. Most of the actions described here require ADMIN permissions.

    Additional fields may be included in some responses you receive; however, these attributes are for internal purposes and are therefore undocumented.

    BIM workflow

    Because the BIM endpoint encompasses groups, users, and authentications, there are three workflows.

    Users workflow

    1. .

    2. .

    3. .

    4. .

    Groups workflow

    1. .

    2. .

    3. .

    4. .

    Authenticate with the API workflow

    1. .

    2. .

    3. .

    4. .

    Create a new user

    POST /bim/iam/bim/user

    Create a new BIM user.

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request with the payload below will create a new BIM user with the username [email protected].

    Payload example

    Response example

    Manage users

    Method
    Path
    Purpose

    Authenticate a user from an outside IAM

    GET /bim/iam/{iamid}/user/authenticate

    Authenticate a user from a 3rd-party identity provider.

    Request parameters

    Attribute
    Description
    Required

    Request example

    This example request

    Authenticate user with username and password

    POST /bim/iam/{iamid}/user/authenticate

    Authenticate a user using their username and password and proxying it to the specified IAM service.

    Request parameters

    Attribute
    Description
    Required

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request with the payload below will authenticate the user using the bim IAM.

    Payload example

    Response example

    Update a user profile

    PUT /bim/iam/{iamid}/user/{userid}/profile

    Update a specified user's profile.

    Request parameters

    Attribute
    Description
    Required

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request will change the location to Boston, MA for the user with the username [email protected].

    Payload example

    Response example

    Remove a user's permissions

    DELETE /bim/iam/{iamid}/user/{userid}/permissions/{permission}

    Remove the specified user's permission.

    Request parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request will delete the permission CREATE_DATA_SOURCE_IN_PROJECT from the user with the username [email protected].

    Response example

    Update a user's permissions

    PUT /bim/iam/{iamid}/user/{userid}/permissions

    Update the specified user's permission.

    Request parameters

    Attribute
    Description
    Required

    Request parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request with the payload below will change to permissions of the user with the username [email protected] to CREATE_DATA_SOURCE_IN_PROJECT, CREATE_PROJECT, and CREATE_DATA_SOURCE.

    Payload example

    Response example

    Update a user's password

    PUT /bim/iam/{iamid}/user/{userid}/password

    Update the specified user's password.

    Request parameters

    Attribute
    Description
    Required

    Request parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request with the payload below will change the password of the user with the ID [email protected].

    Payload example

    Response example

    Disable or enable a user

    PUT /bim/iam/{iamid}/user/{userid}/disable/{disable}

    Disable / enable the specified BIM user.

    Request parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request will disabled the user with the username [email protected].

    Response example

    Sync users from an external IAM

    POST /bim/syncUsers

    Sync users from an external IAM.

    Payload parameters

    Attribute
    Description
    Required

    Request example

    This example request will sync the users from the specified external IAM with Immuta.

    Payload example

    Sync LDAP users with Immuta

    POST /iam/{iamId}/sync

    Sync LDAP users with Immuta.

    Request parameters

    Attribute
    Description
    Required

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request will sync the users from Jump Cloud with Immuta.

    Payload example

    Response example

    Update a user's or group's attributes

    PUT /bim/iam/{iamid}/{modelType}/{modelId}/authorizations/{attributeName}/{attributeValue}

    Update the specified user's attributes.

    Request parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request will add the attribute Finance.Red Team to the user with the username [email protected].

    Response example

    Remove a user or group's attribute

    DELETE /bim/iam/{iamid}/{modelType}/{modelId}/authorizations/{key}/{value}

    Remove an attribute from the specified group or user.

    Request parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request will remove the attribute Country.JP from the user with the user ID [email protected].

    Response example

    Clone user

    Configure SMTP: SMTP must be configured to use this endpoint. Additionally, after the users are created, they will not be active until they sign in to the Immuta UI.

    POST /bim/iam/bim/user/{userid}/clone

    Clones the provided user (including their permissions, groups, and attributes) to create multiple additional user accounts.

    Request parameters

    Attribute
    Description
    Required

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request will clone the user with the username [email protected].

    Payload example

    Response example

    Review user information

    Method
    Path
    Purpose

    Search all IAMs

    GET /bim/iam

    Get a listing of configured IAM services.

    Response parameters

    Attribute
    Description

    Request example

    The request below will list all of the IAMs in use.

    Response example

    Search all users

    GET /bim/user

    Administrative search over the aggregated view of all users.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    The request below will search all of the users in Immuta.

    Response example

    View current user's information

    GET /bim/rpc/user/current

    Get the currently logged in user's information.

    Response parameters

    Attribute
    Description

    Request example

    This request will return information on the user that is logged in.

    Response example

    View a user's information

    GET /bim/iam/{iamid}/user/{id}

    Gets the specified user's aggregated view.

    Request parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request will return information about the user with the ID 2.

    Response example

    View a user profile

    GET /bim/iam/{iamid}/user/{userid}/profile

    Gets the specified user's profile.

    Request parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request will return the profile of the user with the ID 2.

    Response example

    View a user's groups

    GET /bim/iam/{iamid}/user/{userid}/groups

    Get the specified user's list of groups.

    Request parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request will return information on the groups of the user with the username [email protected].

    Response example

    Delete a user

    DELETE /bim/iam/bim/user/{userid}

    Delete the specified user in Immuta.

    Request parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request will delete the user with the username [email protected].

    Response example

    Create a new group

    POST /bim/group

    Create a new group.

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This request with the payload below will create a group through the bim IAM with the name API Group.

    Payload example

    Response example

    Manage groups

    Method
    Path
    Purpose

    Update a group

    PUT /bim/group/{groupId}

    Update the specified group.

    Request parameters

    Attribute
    Description
    Required

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This request with the payload below will update the group with the ID 2 with the name API Group #2 and with a new description.

    Payload example

    Response example

    Remove a user from a group

    DELETE /bim/group/{groupId}/user/{groupuserid}

    Remove a user from a group.

    Request parameters

    Attribute
    Description
    Required

    Request example

    Add a user to a group

    POST /bim/group/{groupId}/user

    Add a new user to a group.

    Request parameters

    Attribute
    Description
    Required

    Payload parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This request with the payload below adds the user with the ID [email protected] to the group with the ID 2.

    Payload example

    Response example

    Update a group's attributes

    PUT /bim/iam/{iamid}/group/{groupid}/authorizations/{attributeName}/{attributeValue}

    Update the specified group's attributes.

    Request parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request will add the attribute Finance.Red Team to the group with the ID 2.

    Response example

    Search groups

    Method
    Path
    Purpose

    Search all groups from all IAMs

    GET /bim/group

    Get the list of groups from all configured IAMs.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This request will return all of the groups in Immuta.

    Response example

    Search a specific group

    GET /bim/group/{groupid}

    Get the specified group.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This request will search for the group with the ID 2.

    Response example

    Search a group's users

    GET /bim/group/{groupid}/user

    Get group users.

    Query parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This request will return information on the users in the group with the ID 2.

    Response example

    Delete a group

    DELETE /bim/group/{groupId}

    Delete the specified group.

    Query parameters

    Attribute
    Description
    Required

    Request example

    This request will delete the group with the ID 3.

    Authenticate a user and create a project API key

    POST /bim/apikey

    Authenticate the user and create a project API key.

    Payload parameters

    Attribute
    Description
    Required

    The payload must have one or both of the two attributes above.

    Response parameters

    Attribute
    Description

    Request example

    This example request with the payload below will authenticate the user Jane Doe in the project with the ID 1 and create a new API key for her.

    Payload example

    Response example

    Authenticate with an API key

    Method
    Path
    Purpose

    Authenticate a user with an API key

    POST /bim/apikey/authenticate

    Authenticate with the Immuta API using an API key.

    Payload parameters

    Attribute
    Description

    Response parameters

    Attribute
    Description

    Request example

    This example request will authenticate the user with the Immuta API.

    Payload example

    Response example

    Impersonate a user with an API key

    POST /bim/apikey/impersonate

    Impersonate another user using an API key.

    Payload parameters

    Attribute
    Description

    Response parameters

    Attribute
    Description

    Request example

    This example request will allow the requesting user to impersonate the user specified in example-payload.json.

    Payload example

    Response example

    View tokens and API keys

    Method
    Path
    Purpose

    View token information

    POST /bim/token

    Get information for a given token, should it exist.

    Payload parameters

    Attribute
    Description

    Response parameters

    Attribute
    Description

    Request example

    This example request will return information on the access token in the payload.

    Payload example

    Response example

    View a user's API keys

    GET /bim/iam/{iamid}/user/{userid}/apikeys

    Get metadata for all of the user's API keys.

    Request parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request will return information on the API keys of the user with the username [email protected].

    Response example

    Delete an API key

    DELETE /bim/apikey/{keyid}

    Delete an API key, all auth tokens issued using that API key, and generate a new API key.

    Request parameters

    Attribute
    Description
    Required

    Response parameters

    Attribute
    Description

    Request example

    This example request will delete the API key with the ID 323, revoke all the auth tokens issued using that API key, and generate a new API key.

    Response example

    permissions

    array Information on the new user's permissions. See for a list of Immuta permissions.

    No

    permissions

    array The user's permissions.

    profile

    array Details on the user, including name, email, phone, about, location, organization, position, preferences, externalUserIds, scim, systemGenerated, id, createdAt

    lastLogin

    timestamp The date the user most recently logged into Immuta.

    disabled

    boolean If true, the user is disabled.

    createdAt

    timestamp The date the user was created.

    updatedAt

    timestamp The date the user was last updated.

    newUserLink

    string A link for the new user to log in and create a password.

    emailFailed

    boolean If true, the login email was unable to be sent to the user's provided email address.

    emailSent

    boolean If true, a login email was sent to the new user.

    PUT

    /bim/iam/{iamid}/user/{userid}/permissions

    .

    PUT

    /bim/iam/{iamid}/user/{userid}/password

    .

    PUT

    /bim/iam/{iamid}/user/{userid}/disable/{disable}

    .

    POST

    /bim/syncUsers

    .

    POST

    /iam/{iamId}/sync

    .

    PUT

    /bim/iam/{iamid}/{modelType}/{modelId}/authorizations/{attributeName}/{attributeValue}

    .

    DELETE

    /bim/iam/{iamid}/{modelType}/{modelId}/authorizations/{key}/{value}

    .

    POST

    /bim/iam/bim/user/{userid}/clone

    .

    sqlUser

    string The user's SQL username.

    No

    about

    string Details about the user to be displayed on their profile.

    No

    location

    string The user's location.

    No

    organization

    string The user's organization.

    No

    position

    string The user's position.

    No

    externalUserIds

    array A list of the user's external usernames for hdfsUser, databricksUser, snowflakeUser, prestoUser, asaUser, and redshiftUser.

    No

    preferences

    array

    No

    scim

    array

    No

    disabled

    boolean If true, the user is disabled.

    lastLogin

    timestamp The date the user last logged in.

    bimAuthorizations

    array The attributes and groups given to the user's BIM profile.

    iamAuthorizations

    array The attributes and groups given to the user's external IAM profile.

    hasLogin

    boolean If true, the user has logged into Immuta.

    permissions

    array[string] A list of the user's permissions.

    profile

    integer The user's profile ID.

    lastLogin

    timestamp The date the user last logged into Immuta.

    disabled

    boolean If true, the user is disabled.

    createdAt

    timestamp The date the user was created.

    updatedAt

    timestamp The date the user was last updated.

    permissions

    array A list of the user's permissions.

    profile

    integer The user's profile ID.

    lastLogin

    timestamp The date the user last logged into Immuta.

    disabled

    boolean If true, the user is disabled.

    createdAt

    timestamp The date the user was created.

    updatedAt

    timestamp The date the user was last updated.

    supportedActions

    string

    No

    type

    string The type of IAM, ldap.

    No

    count

    integer The number of users successfully updated from the IAM.

    attributeValue

    string The attribute value.

    Yes

    authorizations

    array Details on the user's or group's and attributes.

    permissions

    array A list of the user's permissions.

    profile

    integer The user's profile ID.

    lastLogin

    timestamp The date the user last logged into Immuta.

    disabled

    boolean If true, the user is disabled.

    createdAt

    timestamp The date the user was created.

    updatedAt

    timestamp The date the user was last updated.

    value

    string The attribute value to remove.

    No

    createdAt

    timestamp The date the user or group was created.

    updatedAt

    timestamp The date the user or group was last updated.

    GET

    /bim/iam/{iamid}/user/{userid}/profile

    .

    GET

    /bim/iam/{iamid}/user/{userid}/groups

    .

    iamid

    string[] Optionally provide the IAM to filter the users.

    No

    profileIds

    string[] Filters results to return users with the specified profile IDs.

    No

    excludeSystemGenerated

    boolean If true, the results will exclude accounts automatically created for handlers that periodically crawl and ingest.

    No

    excludeAdminAndGovernor

    boolean If true, Admin and Governor accounts will be excluded.

    No

    excludeDeletediams

    boolean If true, the results will exclude users for any IAMs that are no longer configured.

    No

    excludebim

    boolean If true, users from the Immuta internal identity manager will be excluded.

    No

    includeDisabled

    boolean If true, the results will include disabled users.

    No

    offset

    integer Offset to start returning values.

    No

    sortField

    string The field to sort results on. The default is user name. Possible values: name, createdAt, iamid, email.

    No

    sortOrder

    string The order that the results will be sorted in. The default is asc. Possible values: asc, desc.

    No

    permission

    string A permission to filter the users by.

    No

    iamAuthorizations

    array The attributes and groups given to the user's external IAM profile. This attribute is excluded from the response if the requesting user does not have the USER_ADMIN Immuta permission.

    authorizations

    metadata Details on the user's attributes. This attribute is excluded from the response if the requesting user does not have the USER_ADMIN Immuta permission.

    projectId

    integer The project ID for the user's current project.

    permissions

    string A list of the user's permissions.

    profile

    metadata Details on the user, including name, email, phone, about, location, organization, position, preferences, externalUserIds, scim, systemGenerated, id, createdAt

    lastLogin

    timestamp The date of the user's last Immuta login.

    disabled

    boolean If true, the user has been disabled.

    hasLogin

    boolean If true, the user has logged into Immuta.

    groups

    metadata Information on the user's groups.

    createdAt

    timestamp The date the user was created.

    updatedAt

    timestamp The date of the last time the user's information was updated.

    projectId

    integer The project ID for the user's current project.

    permissions

    string A list of the user's permissions.

    profile

    metadata Details on the user, including name, email, phone, about, location, organization, position, preferences, externalUserIds, scim, systemGenerated, id, createdAt

    lastLogin

    timestamp The date of the user's last Immuta login.

    disabled

    boolean If true, the user has been disabled.

    hasLogin

    boolean If true, the user has logged into Immuta.

    groups

    metadata Information on the user's groups.

    createdAt

    timestamp The date the user was created.

    updatedAt

    timestamp The date of the last time the user's information was updated.

    updatedAt

    timestamp The date the user was last updated.

    systemGenerated

    boolean

    disabled

    boolean If true, the user is disabled.

    lastLogin

    timestamp The date the user last logged in.

    lastExternalRefresh

    timestamp

    bimAuthorizations

    array The attributes and groups given to the user's BIM profile.

    iamAuthorizations

    array The attributes and groups given to the user's external IAM profile.

    hasLogin

    boolean If true, the user has logged into Immuta.

    position

    string The user's position.

    externalUserIds

    array A list of user IDs for technologies outside of Immuta, if specified as different from the Immuta user ID.

    createdAt

    timestamp The date the user was created.

    updatedAt

    timestamp The date the profile was last updated.

    preferences

    array Information on the user's preferences including values for sortProjectState and currentProject.

    createdAt

    timestamp The date the group was created.

    updatedAt

    timestamp The date the group was last updated.

    createdAt

    timestamp The date the group was created.

    updatedAt

    timestamp The date the group was last updated.

    createdAt

    timestamp The date the group was created.

    updatedAt

    timestamp The date the group was last updated.

    size

    integer The maximum number of records to return. The default is 25.

    No

    offset

    integer Offset to start returning values.

    No

    sortField

    string The field to sort results on. Possible values: name, createdAt, iamid. Default is name.

    No

    sortOrder

    string The order that the results will be sorted in. Possible values: asc, desc. The default is asc.

    No

    nameOnly

    boolean If true, results will only return distinct group names.

    No

    authorizations

    metadata Details on the group's attributes.

    descriptions

    string Details attached to the group.

    createdAt

    timestamp The date the group was created.

    updatedAt

    timestamp The date the group was last updated.

    createdAt

    timestamp The date the group was created.

    updatedAt

    timestamp The date the group was last updated.

    disabled

    boolean If true, the user has been disabled.

    group

    integer The group ID.

    createdAt

    timestamp The date the user was created.

    updatedAt

    timestamp The date of the last time the user's information was updated.

    created

    timestamp The date the token was created.

    lastUsed

    timestamp The date the token was last used.

    expiration

    timestamp The date the token will expire.

    name

    string The token name.

    createdAt

    timestamp The date the token was created.

    updatedAt

    timestamp The date the token was last updated.

    scopes

    string The scope of the token, such as impersonation.

    impersonationuserid

    string The user ID of the impersonating user.

    impersonationiamid

    string The IAM ID of the impersonating user.

    iamid

    string The IAM ID.

    Yes

    userid

    string The new user's username.

    Yes

    password

    string The new user's password.

    No

    profile

    array Information on the new user's name and email.

    id

    integer The user ID.

    iamid

    string The IAM ID.

    userid

    string The user's username.

    bimAuthorizations

    array The attributes and groups given to the user's BIM profile.

    iamAuthorizations

    array The attributes and groups given to the user's external IAM profile.

    authorizations

    array The user's groups and attributes.

    GET

    /bim/iam/{iamid}/user/authenticate

    Authenticate a user from a 3rd party identity provider.

    POST

    /bim/iam/{iamid}/user/authenticate

    Authenticate a user using their username and password and proxying it to the specified IAM service.

    PUT

    /bim/iam/{iamid}/user/{userid}/profile

    Update a specified user's profile.

    DELETE

    /bim/iam/{iamid}/user/{userid}/permissions/{permission}

    Remove the specified user's permission.

    iamid

    string The IAM ID.

    Yes

    iamid

    string The IAM ID.

    Yes

    username

    string The user's username for the IAM dictated in the request.

    Yes

    password

    string The user's password for the IAM dictated in the request.

    Yes

    authenticated

    boolean If true, the user has been successfully authenticated.

    token

    string The user's access token.

    tokenExpiration

    timestamp The date the token will expire.

    profileId

    integer The user ID.

    iamid

    string The IAM ID.

    Yes

    userId

    string The user's username.

    Yes

    iamid

    string The IAM ID.

    No

    userid

    string The user's username.

    No

    email

    string The user email.

    No

    phone

    string The user phone number.

    profile

    array Details information about the user, including name, email, phone, about, location, organization, position, preferences, externalUserIds, scim, id, and the date of creation.

    permissions

    array A list of the user's permissions.

    iamid

    string The IAM ID.

    userid

    string The user's username.

    authorizations

    array The user's attributes and groups.

    updatedAt

    timestamp The date the user was last updated.

    iamid

    string The IAM ID.

    Yes

    userid

    string The user's username.

    Yes

    permission

    string The permission to remove. See Immuta permissions and personas for a list of Immuta permissions.

    Yes

    id

    integer The user's ID.

    iamid

    string The IAM ID.

    userid

    string The user's username.

    bimAuthorizations

    array The attributes and groups given to the user's BIM profile.

    iamAuthorizations

    array The attributes and groups given to the user's external IAM profile.

    authorizations

    array Details on the user's groups and attributes.

    iamid

    string The IAM ID.

    Yes

    userid

    string The user's username.

    Yes

    permissions

    array[string] A list of the user's permissions. This list is going to be a comprehensive list of all of the user's permissions. See Immuta permissions and personas for a list of Immuta permissions.

    Yes

    id

    integer The user's ID.

    iamid

    string The IAM ID.

    userid

    string The user's username.

    bimAuthorizations

    array The attributes and groups given to the user's BIM profile.

    iamAuthorizations

    array The attributes and groups given to the user's external IAM profile.

    authorizations

    array Details on the user's groups and attributes.

    iamid

    string The IAM ID.

    Yes

    userid

    string The user's username.

    Yes

    originalPassword

    string The user's old password.

    Yes

    password

    string The user's new password.

    Yes

    success

    boolean If true, the user's password has been successfully changed to the new password.

    iamid

    string The IAM ID.

    Yes

    userid

    string The user's username.

    Yes

    disable

    boolean If true, the user will be disabled.

    Yes

    userid

    string The user's username.

    disabled

    boolean If true, the user is disabled.

    iamid

    string The external IAM ID.

    Yes

    iamId

    string The external IAM ID.

    Yes

    dryRun

    boolean If true, no updates will actually be made.

    Yes

    iamConfig

    array Details about the IAM configuration, including authenticationOnly, credentials, defaultPermissions, displayName, id, ldapSync, and options.

    No

    plugin

    string The type of plugin the IAM uses, ldap.

    No

    schema

    array Details about the IAM schema, including group, profile, authorizations, and externalUserIds.

    totalCount

    integer The total number of users in the external IAM that could be synced over into Immuta.

    importedUsers

    array Details about the users who were successfully imported from the sync, including userId and dn.

    refreshedUsers

    array Details about the users who were successfully refreshed from the sync, including userId and dn.

    disabledUsers

    array Details about the users who were successfully disabled from the sync, including userId and dn.

    enabledUsers

    array Details about the users who were successfully enabled from the sync, including userId and dn.

    runningInBackground

    boolean If true, the sync created a job to run in the background.

    iamid

    string The IAM ID.

    Yes

    modelType

    string The type of model the attribute is added to. Options include group or user.

    Yes

    modelID

    string The user or group ID.

    Yes

    attributeName

    string The attribute name.

    id

    integer The user or group ID.

    iamid

    string The IAM ID.

    userid

    string The user's username.

    name

    string The group name.

    bimAuthorizations

    array The attributes and groups given to the user's BIM profile.

    iamAuthorizations

    array The attributes and groups given to the user's external IAM profile.

    iamid

    string The ID for the IAM the user or group is under.

    Yes

    modelId

    string The user or group ID.

    Yes

    modelType

    string The type of model the attribute is being removed from. Options include group or user.

    Yes

    key

    string The attribute to remove.

    id

    integer The user or group ID.

    iamid

    string The IAM ID.

    authorizations

    array The user or group attributes after the request has been made.

    permissions

    array The user or group permissions.

    profile

    integer The profile ID, if the model is a user.

    systemGenerated

    boolean If true, the user was created by Immuta.

    userId

    string The user's username.

    Yes

    email

    array The list of new users' emails.

    Yes

    failedEmails

    array A list of any emails that failed to become users.

    GET

    /bim/iam

    Get a listing of configured IAM services.

    GET

    /bim/user

    Administrative search over the aggregated view of all users.

    GET

    /bim/rpc/user/current

    Get the currently logged in user's information.

    GET

    /bim/iam/{iamid}/user/{id}

    Get the specified user's aggregated view.

    id

    string The IAM ID.

    displayName

    string The name displayed in Immuta and entered at the time of configuration.

    type

    string The identity provider type.

    oauth

    boolean When true, the IAM service uses OAuth framework for authorization.

    size

    integer The maximum number of records to return. The default is 25.

    No

    name

    string A partial name to match against user names.

    No

    userid

    string A partial ID to match against user IDs.

    No

    email

    string A partial email address to match against user email addresses.

    count

    integer Total number of results. May be greater than the length of hits if additional results exist. Use size and offset to page additional results.

    hits

    metadata Details for each result, including id, iamid, userid, bimAuthorizations, iamAuthorizations, authorizations, projectId, permissions, groupPermissions, profile, authentication, systemGenerated, lastLogin, lastExternalRefresh, disabled, hasLogin, groups, createdAt, updatedAt, and schema values. The following details are excluded from the response if the requesting user does not have the USER_ADMIN Immuta permission: bimAuthorizations, iamAuthorizations, and authorizations.

    id

    integer The user ID.

    iamid

    string The ID of the IAM the user is connected to.

    userid

    string The user's username.

    bimAuthorizations

    array The attributes and groups given to the user's BIM profile. This attribute is excluded from the response if the requesting user does not have the USER_ADMIN Immuta permission.

    id

    integer The user ID.

    iamid

    string The ID of the IAM the user is connected to.

    userid

    string The user's username.

    bimAuthorizations

    array The attributes and groups given to the user's BIM profile.

    iamAuthorizations

    array The attributes and groups given to the user's external IAM profile.

    authorizations

    metadata Details on the user's attributes.

    iamid

    string The IAM ID.

    Yes

    id

    integer The user ID.

    Yes

    params

    query

    No

    profile

    array Details about the user, including name, email, phone, about, location, organization, position, preferences, externalUserIds, scim, id, and the date of creation.

    preferences

    array Information about the user's tabDataSourceState, tabProjectState, sortDataSourceState, and currentProject.

    permissions

    array A list of the user's permissions.

    iamid

    string The IAM ID.

    userid

    string The user's username.

    authorizations

    array The user's attributes and groups.

    iamid

    string The IAM ID.

    Yes

    id

    integer The user ID.

    Yes

    name

    string The user's name.

    email

    string The user's email.

    phone

    string The user's phone number.

    about

    string Details about the user.

    location

    string The user's location.

    organization

    string The user's organization.

    iamid

    string The IAM ID.

    Yes

    userid

    string The user's username.

    Yes

    id

    integer The group ID.

    name

    string The group name.

    iamid

    string The IAM ID.

    groupUser

    integer The user's ID within the group.

    userid

    string The user's username.

    Yes

    userid

    string The user's username.

    iamid

    string The IAM ID.

    iamid

    string The IAM ID.

    Yes

    name

    string The new group name.

    Yes

    email

    string The new group's email.

    No

    description

    string The new group's description.

    id

    integer The group ID.

    iamid

    string The IAM ID.

    name

    string The group name.

    email

    string The group email.

    authorizations

    array The group's attributes.

    description

    The group description.

    PUT

    /bim/group/{groupId}

    Update the specified group.

    DELETE

    /bim/group/{groupId}/user/{groupuserid}

    Remove a user from a group.

    POST

    /bim/group/{groupId}/user

    Add a new user to a group.

    PUT

    /bim/iam/{iamid}/group/{groupid}/authorizations

    Update the specified group's authorizations.

    groupId

    integer The group ID.

    Yes

    name

    string The group's new name.

    No

    email

    string The group's new email.

    No

    description

    string The group's new description.

    No

    id

    integer The group ID.

    iamid

    string The IAM ID.

    name

    string The group name.

    email

    string The group email.

    authorizations

    string The group attributes.

    description

    string The group description.

    groupId

    integer The group ID.

    Yes

    groupuserid

    integer The user's group ID.

    Yes

    groupId

    integer The group ID.

    Yes

    userid

    string The new user's ID.

    Yes

    iamid

    string The new user's IAM.

    Yes

    id

    integer The user's group ID.

    group

    integer The group ID.

    profile

    integer The user ID.

    createdAt

    timestamp The date the user was added to the group.

    updatedAt

    timestamp The date the user was last updated within the group.

    iamid

    string The IAM ID.

    Yes

    groupId

    integer The group ID.

    Yes

    attributeName

    string The attribute name.

    Yes

    attributeValue

    string The attribute value.

    id

    integer The group ID.

    iamid

    string The IAM ID.

    name

    string The group name.

    email

    string The group email.

    authorizations

    string The group attributes.

    description

    string The group description.

    GET

    /bim/group

    Get the list of groups from all configured IAMs.

    GET

    /bim/group/{groupId}

    Get the specified group.

    GET

    /bim/group/{groupId}/user

    Get group users.

    name

    string A partial name to match against group names.

    No

    ids

    string[] Filters results to return groups with specified IDs.

    No

    userid

    integer The user ID. This will return the groups that the user is a member of.

    No

    iamid

    array[string] Optionally provide IAMs to filter the groups returned.

    count

    integer Total number of results. May be greater than the length of hits if additional results exist. Use size and offset to page additional results.

    hits

    metadata Details on each result, including id, iamid, name, gid, email, authorizations, description, scim, scimid, createdAt, and updatedAt values.

    id

    integer The group ID.

    iamid

    string The IAM ID.

    name

    string The name of the group.

    email

    string The group email.

    groupId

    integer The ID of the group.

    Yes

    id

    integer The group's ID.

    iamid

    string The IAM ID.

    name

    string The group's name.

    email

    string The group's email.

    authorizations

    metadata Details on the group's attributes.

    descriptions

    string The group's description.

    groupId

    integer The ID of the group.

    Yes

    offset

    integer Offset to start returning values.

    No

    size

    integer The maximum number of records to return. The default is 25.

    No

    sortOrder

    string The order that the results will be sorted in. Possible values: asc, desc. The default is asc.

    count

    integer Total number of results. May be greater than the length of hits if additional results exist. Use size and offset to page additional results.

    hits

    metadata Details for each result, including id, group, profile, uid, iamid, userid, disabled, scim, scimid, createdAt, and updatedAt values.

    id

    integer The group ID.

    iamid

    string The ID of the IAM the user is connected to.

    userid

    string The user's username.

    profile

    metadata Details on the user, including iamid, userid, name, email, phone, about, location, organization, position, preferences, externalUserIds, scim, systemGenerated, id, createdAt, and updatedAt values.

    groupId

    integer The group ID.

    Yes

    projectId

    integer The project ID.

    No

    name

    string The name to associate with the API key.

    No

    apikey

    string The new API key.

    keyid

    integer The new API key's ID.

    project

    integer The project ID.

    name

    string The name of the API key.

    POST

    /bim/apikey/authenticate

    Authenticate with the Immuta API using an API key.

    POST

    /bim/apikey/impersonate

    Impersonate another user using an API key.

    apikey

    string The API key.

    authenticated

    boolean If true, the user has been successfully authenticated.

    token

    string The user's access token.

    apikey

    string The API key of the account with the user impersonation permission.

    userid

    string The username of the impersonated user.

    iamid

    string The IAM ID of the impersonated user.

    projectId

    integer The project ID of the impersonated user.

    authenticated

    boolean If true, the user has been successfully authenticated.

    token

    string The user's access token.

    POST

    /bim/token

    Get information for a given token, should it exist.

    GET

    /bim/iam/{iamid}/user/{userid}/apikeys

    Get metadata for all of the user's API Keys.

    token

    string The access token.

    id

    integer The access token ID.

    type

    string The token type: bearer.

    iamid

    string The IAM ID.

    userid

    string The user's username.

    project

    integer If the token was generated using a project API key, this is the project ID.

    token

    string The access token.

    iamid

    string The IAM ID.

    Yes

    userid

    string The user's username.

    Yes

    keyid

    integer The API key ID.

    created

    timestamp The date the API key was created.

    project

    array Information on the project attached to the API key, including values for name, status, description, documentation, deleted, allowMaskedJoins, subscriptionType, subscriptionPolicy, equalization, snowflake, salt, type, schema, id, createdAt, updatedAt, workspace, createdBy, updatedBy, and schemaEvolutionId.

    lastUsed

    timestamp The date the API key was last used.

    name

    string The API key name.

    keyid

    integer The API key ID.

    Yes

    revokedTokens

    integer The number of tokens revoked.

    Create a new user
    Manage your users
    Review your users' information
    Delete a user
    Create a new group
    Manage groups
    Search groups
    Delete a group
    Create an API Key
    Authenticate with an API key
    View tokens and API key information
    Remove an API key

    No

    No

    No

    Yes

    Yes

    No

    No

    Yes

    No

    No

    curl \
      --request POST \
      --header "Content-Type: application/json" \
      --header "Authorization: Bearer dea464c07bd07300095caa8" \
      --data @example-payload.json \
      https://demo.immuta.com/bim/iam/bim/user
    {
      "iamid": "bim",
      "userid": "[email protected]",
      "profile": {
        "name": "Charlie Doe",
        "email": "[email protected]"
      },
      "permissions": []
    }
    {
      "newUser": {
        "id": 18,
        "iamid": "bim",
        "userid": "[email protected]",
        "bimAuthorizations": null,
        "iamAuthorizations": null,
        "authorizations": {},
        "permissions": ["CREATE_DATA_SOURCE_IN_PROJECT", "CREATE_PROJECT"],
        "profile": {
          "name": "Charlie Doe",
          "email": "[email protected]",
          "phone": null,
          "about": null,
          "location": null,
          "organization": null,
          "position": null,
          "preferences": null,
          "externalUserIds": {},
          "scim": null,
          "systemGenerated": false,
          "id": 18,
          "createdAt": "2021-10-07T01:35:13.382Z",
          "updatedAt": "2021-10-07T01:35:13.382Z"
        },
        "authentication": null,
        "systemGenerated": false,
        "lastLogin": null,
        "lastExternalRefresh": "2021-10-07T01:35:13.000Z",
        "disabled": false,
        "createdAt": "2021-10-07T01:35:13.389Z",
        "updatedAt": "2021-10-07T01:35:13.389Z"
      },
      "newUserLink": "https://demo.immuta.com/login?token=******&userid=charlie.doe%40immuta.com&name=Charlie%20Doe",
      "emailFailed": false,
      "emailSent": false
    }
    curl \
      --request POST \
      --header "Content-Type: application/json" \
      https://demo.immuta.com/LDAPIAM/user/authenticate
    curl \
      --request POST \
      --header "Content-Type: application/json" \
      --data @example-payload.json \
      https://demo.immuta.com/bim/iam/bim/user/authenticate
    {
      "username": "[email protected]",
      "password": "********"
    }
    {
      "authenticated": true,
      "token": "6913229***********0d3da",
      "tokenExpiration": "2021-09-29T19:12:51.467Z"
    }
    curl \
      --request PUT \
      --header "Content-Type: application/json" \
      --header "Authorization: Bearer dea464c07bd07300095caa8" \
      https://demo.immuta.com/bim/iam/bim/user/[email protected]/profile
    {
      "email": "[email protected]",
      "phone": null,
      "about": null,
      "location": "Boston, MA",
      "organization": null,
      "position": "",
      "preferences": {
        "sortDataSourceState": {
          "column": "name",
          "order": "asc",
          "size": 12
        },
        "sortProjectDataSourceState": {
          "column": "dataSourceName",
          "order": "asc",
          "size": 12
        },
        "sortProjectState": {
          "column": "name",
          "order": "asc",
          "size": 12
        },
        "notifications": {
          "email": false
        },
        "tabDataSourceState": 0,
        "tabProjectState": 0,
        "dataSourceOverrides": {},
        "showPolicySearchDetailLabels": true
      },
      "externalUserIds": {},
      "scim": null,
      "systemGenerated": false,
      "iamid": "bim",
      "userid": "[email protected]"
    }
    {
      "name": "Jane Doe",
      "email": "[email protected]",
      "phone": null,
      "about": null,
      "location": "Boston, MA",
      "organization": null,
      "position": null,
      "externalUserIds": {},
      "systemGenerated": false,
      "id": 2,
      "createdAt": "2021-08-16T20:30:43.698Z",
      "updatedAt": "2021-10-18T20:49:06.237Z",
      "preferences": {
        "sortProjectState": {
          "column": "name",
          "order": "asc",
          "size": 12
        },
        "currentProject": null,
        "sortDataSourceState": {
          "column": "name",
          "order": "asc",
          "size": 12
        },
        "sortProjectDataSourceState": {
          "column": "dataSourceName",
          "order": "asc",
          "size": 12
        },
        "notifications": {
          "email": false
        },
        "tabDataSourceState": 0,
        "tabProjectState": 0,
        "dataSourceOverrides": {},
        "showPolicySearchDetailLabels": true
      },
      "scim": null
    }
    curl \
      --request DELETE \
      --header "Content-Type: application/json" \
      --header "Authorization: Bearer dea464c07bd07300095caa8" \
      https://demo.immuta.com/bim/iam/bim/user/john.doe%40immuta.com/permissions/CREATE_DATA_SOURCE_IN_PROJECT
    {
      "id": 3,
      "iamid": "bim",
      "userid": "[email protected]",
      "bimAuthorizations": null,
      "iamAuthorizations": null,
      "authorizations": {},
      "permissions": [
        "CREATE_PROJECT",
        "CREATE_DATA_SOURCE"
      ],
      "profile": 3,
      "authentication": 3,
      "systemGenerated": false,
      "lastLogin": "2021-09-27T15:29:00.154Z",
      "lastExternalRefresh": "2021-09-27T15:29:00.154Z",
      "disabled": false,
      "createdAt": "2021-08-19T19:33:38.582Z",
      "updatedAt": "2021-10-06T22:03:48.611Z"
    }
    curl \
      --request PUT \
      --header "Content-Type: application/json" \
      --header "Authorization: Bearer dea464c07bd07300095caa8" \
      https://demo.immuta.com/bim/iam/bim/user/charlie.doe%40immuta.com/permissions
    [
      "CREATE_DATA_SOURCE_IN_PROJECT", "CREATE_PROJECT", "CREATE_DATA_SOURCE"
    ]
    {
      "id": 18,
      "iamid": "bim",
      "userid": "[email protected]",
      "bimAuthorizations": null,
      "iamAuthorizations": null,
      "authorizations": {},
      "permissions": [
        "CREATE_DATA_SOURCE_IN_PROJECT",
        "CREATE_PROJECT",
        "CREATE_DATA_SOURCE"
      ],
      "profile": 18,
      "authentication": null,
      "systemGenerated": false,
      "lastLogin": null,
      "lastExternalRefresh": "2021-10-07T01:35:13.000Z",
      "disabled": false,
      "createdAt": "2021-10-07T01:35:13.389Z",
      "updatedAt": "2021-10-07T16:10:40.214Z"
    }
    curl \
      --request PUT \
      --header "Content-Type: application/json" \
      --header "Authorization: Bearer dea464c07bd07300095caa8" \
      https://demo.immuta.com/bim/iam/bim/user/jane.doe%40immuta.com/password
    {
      "originalPassword": "old********",
      "password": "new********"
    }
    {
      "success": true
    }
    curl \
      --request PUT \
      --header "Content-Type: application/json" \
      --header "Authorization: Bearer dea464c07bd07300095caa8" \
      https://demo.immuta.com/bim/iam/bim/user/jane.doe%40immuta.com/disable/true
    {
      "userid": "[email protected]",
      "disabled": true
    }
    curl \
      --request POST \
      --header "Content-Type: application/json" \
      --header "Authorization: Bearer dea464c07bd07300095caa8" \
      --data @example-payload.json \
      https://demo.immuta.com/bim/syncUsers
    {
      "iamid": "ldap"
    }
    curl -X 'POST' \
      'https://demo.immuta.com/iam/JumpCloud/sync' \
      -H 'accept: application/json' \
      -H 'Content-Type: application/json' \
      -H 'Authorization: Bearer 496ac257b8db4a96a16715fb4ed048dc' \
    {
      "dryRun": true,
      "iamConfig": {
        "authenticationOnly": false,
        "credentials": {
          "bind_dn": "uid=bind-user,ou=Users,o=redacted,dc=jumpcloud,dc=com"
        },
        "defaultPermissions": ["CREATE_DATA_SOURCE", "CREATE_PROJECT"],
        "displayName": "Jump Cloud LDAP",
        "id": "jumpcloudLDAPIAM",
        "ldapSync": {},
        "options": {
          "groupSearchFilter": "(&(objectClass=groupOfNames)(cn=%s*))",
          "host": "ldap.jumpcloud.com",
          "port": 636,
          "useSSL": true,
          "userGroupSearchFilter": "(member=<dn>)",
          "userSearchBase": "o=redacted,dc=jumpcloud,dc=com",
          "userSearchFilter": "mail=%s",
          "allowIdPInitiatedSSO": false
        },
        "plugin": "ldap",
        "schema": {
          "group": {
            "name": "cn"
          },
          "profile": {
            "email": "mail",
            "name": "cn",
            "phone": "phone"
          },
          "authorizations": {},
          "externalUserIds": {}
        },
        "supportedActions": ["syncGroups"],
        "type": "ldap"
      }
    }
    {
      "totalCount": 10,
      "importedUsers": [{
        "userId": "[email protected]",
        "dn": "uid=user-1,ou=Users,o=redacted,dc=jumpcloud,dc=com"
      }, {
        "userId": "[email protected]",
        "dn": "uid=user-2,ou=Users,o=redacted,dc=jumpcloud,dc=com"
      }, {
        "userId": "[email protected]",
        "dn": "uid=user-3,ou=Users,o=redacted,dc=jumpcloud,dc=com"
      }, {
        "userId": "[email protected]",
        "dn": "uid=user-4,ou=Users,o=redacted,dc=jumpcloud,dc=com"
      }, {
        "userId": "[email protected]",
        "dn": "uid=user-5,ou=Users,o=redacted,dc=jumpcloud,dc=com"
      }],
      "refreshedUsers": [],
      "disabledUsers": [],
      "enabledUsers": [],
      "count": 5
    }
    curl \
      --request PUT \
      --header "Content-Type: application/json" \
      --header "Authorization: Bearer dea464c07bd07300095caa8" \
      https://demo.immuta.com/bim/iam/bim/user/[email protected]/authorizations/Finance/Red%20Team
    {
      "id": 16,
      "iamid": "bim",
      "userid": "[email protected]",
      "bimAuthorizations": {
        "Finance": ["CFA", "Red Team"]
      },
      "iamAuthorizations": null,
      "authorizations": {
        "Finance": ["CFA", "Red Team"]
      },
      "permissions": ["CREATE_DATA_SOURCE_IN_PROJECT", "CREATE_PROJECT"],
      "profile": 16,
      "authentication": 5,
      "systemGenerated": false,
      "lastLogin": "2021-10-07T02:58:31.708Z",
      "lastExternalRefresh": "2021-10-07T02:58:31.708Z",
      "disabled": false,
      "createdAt": "2021-10-06T22:17:46.500Z",
      "updatedAt": "2021-10-18T17:09:53.711Z"
    }
    curl \
      --request DELETE \
      --header "Content-Type: application/json" \
      --header "Authorization: Bearer dea464c07bd07300095caa8" \
      --data @example-payload.json \
      https://demo.immuta.com/bim/iam/bim/user/[email protected]/authorizations/Country/JP
    {
      "id": 4,
      "iamid": "bim",
      "userid": "[email protected]",
      "bimAuthorizations": {
        "Country": ["US"],
        "Environment": ["Dev"],
        "OfficeLocation": ["Japan"]
      },
      "iamAuthorizations": null,
      "authorizations": {
        "Country": ["US"],
        "Environment": ["Dev"],
        "OfficeLocation": ["Japan"]
      },
      "permissions": ["CREATE_DATA_SOURCE_IN_PROJECT", "CREATE_PROJECT", "USER_ADMIN", "GOVERNANCE"],
      "profile": 4,
      "authentication": 3,
      "systemGenerated": false,
      "lastLogin": "2022-08-11T01:36:01.947Z",
      "lastExternalRefresh": "2022-08-11T01:36:01.947Z",
      "disabled": false,
      "createdAt": "2022-06-02T17:37:24.515Z",
      "updatedAt": "2022-08-11T18:40:51.366Z"
    }
    curl \
      --request POST \
      --header "Content-Type: application/json" \
      --header "Authorization: Bearer dea464c07bd07300095caa8" \
      https://demo.immuta.com/bim/iam/bim/user/jane.doe%40demo.com/clone
    [
      "[email protected]"
    ]
    {
      "failedEmails": []
    }
    curl \
        --request GET \
          --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/bim/iam
    [
      {
        "id": "bim",
        "displayName": "Immuta",
        "type": "built-in",
        "oauth": false
      },
      {
        "id": "oktaSamlIAM",
        "displayName": "Okta SAML",
        "type": "saml",
        "oauth": false
      },
      {
        "id": "ldap",
        "displayName": "LDAP",
        "type": "ldap"
      }
    ]
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/bim/user?size=25&name=bar&sortOrder=asc
    {
      "count": "2",
      "hits": [
        {
          "id": 18,
          "iamid": "bim",
          "userid": "[email protected]",
          "permissions": [
            "CREATE_DATA_SOURCE",
            "CREATE_PROJECT"
          ],
          "profile": {
            "name": "Barrett Springer",
            "email": "[email protected]",
            "id": 18,
            "createdAt": "2018-07-05T07:37:06.569Z",
            "updatedAt": "2018-07-05T07:37:06.569Z"
          },
          "authentication": 18,
          "systemGenerated": false,
          "lastLogin": "2018-07-05T07:39:56.365Z",
          "disabled": false,
          "createdAt": "2018-07-05T07:37:05.987Z",
          "updatedAt": "2018-07-05T07:37:05.987Z"
        },
        {
          "id": 5,
          "iamid": "bim",
          "userid": "[email protected]",
          "authorizations": {
            "auth": [
              "SOMETHING_ELSE"
            ]
          },
          "permissions": [
            "CREATE_DATA_SOURCE",
            "CREATE_PROJECT",
            "AUDIT"
          ],
          "profile": {
            "name": "Barry Howard",
            "email": "[email protected]",
            "preferences": {
              "sortDataSourceState": {
                "column": "name",
                "order": "asc",
                "size": 12
              },
              "sortProjectState": {
                "column": "name",
                "order": "asc",
                "size": 12
              }
            },
            "id": 5,
            "createdAt": "2018-07-05T07:37:06.392Z",
            "updatedAt": "2018-07-05T22:32:43.864Z"
          },
          "authentication": 5,
          "systemGenerated": false,
          "lastLogin": "2018-07-05T22:32:44.167Z",
          "disabled": false,
          "createdAt": "2018-07-05T07:37:05.818Z",
          "updatedAt": "2018-07-05T07:37:05.818Z"
        }
      ]
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/bim/rpc/user/current
    {
      "profile": {
        "name": "Barrett Springer",
        "email": "[email protected]",
        "phone": null,
        "about": null,
        "location": null,
        "organization": null,
        "position": null,
        "preferences": null,
        "hdfsUser": null,
        "id": 18,
        "createdAt": "2018-07-05T07:37:06.569Z",
        "updatedAt": "2018-07-05T07:37:06.569Z"
      },
      "permissions": [
        "CREATE_DATA_SOURCE",
        "CREATE_PROJECT"
      ],
      "authorizations": {
        "Roles": [
          "Analyst"
        ],
        "Location": [
          "Columbus"
        ]
      },
      "iamid": "bim",
      "userid": "[email protected]",
      "authorizations": null,
      "updatedAt": "2018-07-05T07:37:05.987Z",
      "systemGenerated": false,
      "disabled": false,
      "hasLogin": true,
      "lastLogin": "2018-07-05T07:39:56.365Z"
    }
    curl \
      --request GET \
      --header "Content-Type: application/json" \
      --header "Authorization: Bearer dea464c07bd07300095caa8" \
      https://demo.immuta.com/bim/iam/bim/user/2
    {
      "profile": {
        "name": "John Doe",
        "email": "[email protected]",
        "phone": null,
        "about": null,
        "location": null,
        "organization": null,
        "position": null,
        "preferences": {
          "sortProjectState": {
            "column": "name",
            "order": "asc",
            "size": 12
          },
          "currentProject": null
        },
        "externalUserIds": {},
        "scim": null,
        "systemGenerated": false,
        "id": 2,
        "createdAt": "2021-08-16T20:30:43.698Z",
        "updatedAt": "2021-09-14T01:17:02.786Z"
      },
      "permissions": [
        "CREATE_DATA_SOURCE_IN_PROJECT",
        "CREATE_PROJECT",
        "CREATE_DATA_SOURCE",
        "USER_ADMIN",
        "APPLICATION_ADMIN",
        "AUDIT",
        "GOVERNANCE",
        "IMPERSONATE_HDFS_USER",
        "CREATE_S3_DATASOURCE_WITH_INSTANCE_ROLE",
        "FETCH_POLICY_INFO",
        "CREATE_FILTER",
        "IMPERSONATE_USER",
        "PROJECT_MANAGEMENT"
      ],
      "iamid": "bim",
      "userid": "[email protected]",
      "authorizations": {},
      "updatedAt": "2021-09-29T17:57:09.059Z",
      "systemGenerated": false,
      "disabled": false,
      "lastLogin": "2021-09-30T19:20:03.327Z",
      "lastExternalRefresh": "2021-09-30T19:20:03.327Z",
      "bimAuthorizations": null,
      "iamAuthorizations": null,
      "hasLogin": true
    }
    curl \
      --request GET \
      --header "Content-Type: application/json" \
      --header "Authorization: Bearer dea464c07bd07300095caa8" \
      https://demo.immuta.com/bim/iam/bim/user/2/profile
    {
      "name": "John Doe",
      "email": "[email protected]",
      "phone": null,
      "about": null,
      "location": null,
      "organization": null,
      "position": null,
      "preferences": {
        "sortProjectState": {
          "column": "name",
          "order": "asc",
          "size": 12
        },
        "currentProject": null
      },
      "externalUserIds": {},
      "scim": null,
      "systemGenerated": false,
      "id": 2,
      "createdAt": "2021-08-16T20:30:43.698Z",
      "updatedAt": "2021-09-14T01:17:02.786Z"
    }
    curl \
      --request GET \
      --header "Content-Type: application/json" \
      --header "Authorization: Bearer dea464c07bd07300095caa8" \
      https://demo.immuta.com/bim/iam/bim/user/john.doe%40immuta.com/groups
    [
      {
        "id": 2,
        "name": "API Group #2",
        "iamid": "bim",
        "groupUser": 6
      }
    ]
    curl \
      --request DELETE \
      --header "Content-Type: application/json" \
      --header "Authorization: Bearer dea464c07bd07300095caa8" \
      https://demo.immuta.com/bim/iam/bim/user/charlie.doe%40immuta.com
    {
      "userid": "[email protected]",
      "iamid": "bim"
    }
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/bim/group
    {
      "iamid": "bim",
      "name": "API Group"
    }
    {
      "id": 3,
      "iamid": "bim",
      "name": "API Group",
      "gid": null,
      "email": null,
      "authorizations": null,
      "description": null,
      "scim": null,
      "scimid": null,
      "createdAt": "2021-09-29T15:15:26.615Z",
      "updatedAt": "2021-09-29T15:15:26.615Z"
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/bim/group/2
    {
      "name": "API Group #2",
      "description": "This group was edited through the API"
    }
    {
      "id": 2,
      "iamid": "bim",
      "name": "API Group #2",
      "gid": null,
      "email": "[email protected]",
      "authorizations": {
        "Finance": [
          "CFA"
        ]
      },
      "description": "This group was edited through the API",
      "scim": null,
      "scimid": null,
      "createdAt": "2021-09-16T17:24:55.066Z",
      "updatedAt": "2021-09-29T17:32:07.725Z"
    }
    curl \
        --request DELETE \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/bim/group/1/user/2
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://demo.immuta.com/bim/group/2/user
    {
      "userid": "[email protected]",
      "iamid": "bim"
    }
    {
      "id": 6,
      "group": 2,
      "profile": 2,
      "createdAt": "2021-09-29T17:57:09.054Z",
      "updatedAt": "2021-09-29T17:57:09.054Z"
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/bim/iam/bim/group/2/authorizations/Finance/Red%20Team
    {
      "id": 2,
      "iamid": "bim",
      "name": "API Group #2",
      "gid": null,
      "email": "[email protected]",
      "authorizations": {
        "Finance": ["CFA", "Red Team"]
      },
      "description": "This group was edited through the API",
      "scim": null,
      "scimid": null,
      "createdAt": "2021-09-16T17:24:55.066Z",
      "updatedAt": "2021-10-08T13:41:06.211Z"
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/bim/group?size=25&sortOrder=asc
    {
      "count": "3",
      "hits": [
        {
          "id": 2,
          "iamid": "bim",
          "name": "engineers",
          "gid": null,
          "email": "[email protected]",
          "authorizations": null,
          "description": null,
          "createdAt": "2018-07-05T07:37:07.209Z",
          "updatedAt": "2018-07-05T07:37:07.209Z"
        },
        {
          "id": 1,
          "iamid": "bim",
          "name": "founders",
          "gid": null,
          "email": null,
          "authorizations": null,
          "description": null,
          "createdAt": "2018-07-05T07:37:07.177Z",
          "updatedAt": "2018-07-05T07:37:07.177Z"
        },
        {
          "id": 20,
          "iamid": "bim",
          "name": "system administrators",
          "gid": null,
          "email": null,
          "authorizations": null,
          "description": null,
          "createdAt": "2018-07-05T07:37:07.595Z",
          "updatedAt": "2018-07-05T07:37:07.595Z"
        }
      ]
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/bim/group/2
    {
      "id": 2,
      "iamid": "bim",
      "name": "engineers",
      "gid": null,
      "email": "[email protected]",
      "authorizations": {
        "Location": [
          "College Park"
        ]
      },
      "description": null,
      "createdAt": "2018-07-05T07:37:07.209Z",
      "updatedAt": "2018-07-06T01:42:55.518Z"
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/bim/group/2/user
    {
      "count": 2,
      "hits": [
        {
          "id": 1,
          "group": 2,
          "profile": {
            "name": "Willie Gomez",
            "email": "[email protected]",
            "phone": null,
            "about": null,
            "location": null,
            "organization": null,
            "position": null,
            "preferences": {
              "tabDataSourceState": 1,
              "tabProjectState": 1
            },
            "hdfsUser": "wgomez",
            "id": 3,
            "createdAt": "2018-07-05T07:37:06.373Z",
            "updatedAt": "2018-07-05T07:37:06.373Z"
          },
          "createdAt": "2015-08-23T00:00:00.000Z",
          "updatedAt": "2018-07-05T07:37:07.283Z",
          "userid": "[email protected]",
          "iamid": "bim"
        },
        {
          "id": 2,
          "group": 2,
          "profile": {
            "name": "Helen James",
            "email": "[email protected]",
            "phone": null,
            "about": null,
            "location": null,
            "organization": null,
            "position": null,
            "preferences": null,
            "hdfsUser": null,
            "id": 13,
            "createdAt": "2018-07-05T07:37:06.470Z",
            "updatedAt": "2018-07-05T07:37:06.470Z"
          },
          "createdAt": "2018-07-05T07:37:07.291Z",
          "updatedAt": "2018-07-05T07:37:07.291Z",
          "userid": "[email protected]",
          "iamid": "bim"
        }
      ]
    }
    curl \
        --request DELETE \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://demo.immuta.com/bim/group/3
    curl \
      --request POST \
      --header "Content-Type: application/json" \
      --header "Authorization: Bearer dea464c07bd07300095caa8" \
      --data @example-payload.json \
      https://demo.immuta.com/bim/apikey
    {
      "projectId": 1,
      "name": "My Project API Key"
    }
    {
      "apikey": "******",
      "keyid": 334,
      "project": 1,
      "name": "My Project API Key",
      "context": null
    }
    curl \
      --request POST \
      --header "Content-Type: application/json" \
      --header "Authorization: Bearer dea464c07bd07300095caa8" \
      --data @example-payload.json \
      https://demo.immuta.com/bim/apikey/authenticate
    {
      "apikey": "100874dyour-api-key-79aa38bbfe0e8c787"
    }
    {
      "authenticated": true,
      "token": "be420************2745ea0307"
    }
    curl \
      --request POST \
      --header "Content-Type: application/json" \
      --header "Authorization: Bearer dea464c07bd07300095caa8" \
      --data @example-payload.json \
      https://demo.immuta.com/bim/apikey/impersonate
    {
      "apikey": "requesting-users-api-key",
      "userid": "[email protected]",
      "iamid": "bim"
    }
    {
      "authenticated": true,
      "token": "0753*************c61d2"
    }
    curl \
      --request POST \
      --header "Content-Type: application/json" \
      --header "Authorization: Bearer dea464c07bd07300095caa8" \
      --data @example-payload.json \
      https://demo.immuta.com/bim/token
    {
      "token": "48983da*********85220837d"
    }
    {
      "id": 384,
      "type": "bearer",
      "iamid": "bim",
      "userid": "[email protected]",
      "project": null,
      "context": null,
      "token": "4898*********220837d",
      "created": "2021-10-15T03:59:03.000Z",
      "lastUsed": "2021-10-15T03:59:57.185Z",
      "expiration": "2021-10-15T04:59:57.185Z",
      "name": null,
      "application": null,
      "derivedFrom": null,
      "createdAt": "2021-10-15T03:59:03.562Z",
      "updatedAt": "2021-10-15T03:59:57.186Z",
      "scopes": null,
      "impersonationuserid": null,
      "impersonationiamid": null
    }
    curl \
      --request GET \
      --header "Content-Type: application/json" \
      --header "Authorization: Bearer dea464c07bd07300095caa8" \
      https://demo.immuta.com/bim/iam/bim/user/john.doe%40immuta.com/apikeys
    [
      {
        "keyid": 323,
        "created": "2021-10-06T18:28:13.000Z",
        "project": {
          "projectKey": "Credit Payments",
          "name": "Credit Payments",
          "status": "open",
          "description": "This project contains all data sources under the schema, credit_payments, from [email protected]:3306/credit_payments.",
          "documentation": "This is an automatically generated project that collects data sources under the schema, credit_payments, from [email protected]:3306/credit_payments. When data sources in this schema are added to the system, they will automatically be added to this project.",
          "deleted": false,
          "allowMaskedJoins": false,
          "subscriptionType": "manual",
          "subscriptionPolicy": null,
          "equalization": null,
          "snowflake": null,
          "salt": "e0c4a8c5-2a5b-4488-9c43-cb3d816172f4",
          "type": "Schema",
          "schema": "credit_payments",
          "id": 3,
          "createdAt": "2021-09-09T17:06:39.839Z",
          "updatedAt": "2021-09-09T17:06:39.839Z",
          "workspace": null,
          "createdBy": 2,
          "updatedBy": 2,
          "schemaEvolutionId": 2
        },
        "lastUsed": "2021-10-06T18:28:13.341Z",
        "name": "Credit Payments",
        "context": null
      }
    ]
    curl \
      --request DELETE \
      --header "Content-Type: application/json" \
      --header "Authorization: Bearer dea464c07bd07300095caa8" \
      https://demo.immuta.com/bim/apikey/323
    {
      "revokedTokens": 1
    }
    , and
    updatedAt
    values.
    , and
    updatedAt
    values.
    , and
    updatedAt
    values.
    Immuta permissions and personas
    Update the specified user's permissions
    Update the specified user's password
    Disable / enable the specified BIM user
    Sync Users for external IAM
    Sync LDAP users with Immuta
    Update the specified user's attributes
    Remove an attribute from the specified group or user
    Clones the provided user to create multiple additional user accounts
    Get the specified user's profile
    Get the specified user's list of groups

    Subscribe to and Manage Data Sources

    Data Source API reference guide

    This page describes the dataSource endpoint, through which users can subscribe to data sources and manage data source tasks. To create data sources, see the specific handler endpoints.

    Additional fields may be included in some responses you receive; however, these attributes are for internal purposes and are therefore undocumented.

    Data source workflow

    1. .

    2. .

    3. .

    4. .

    Search data sources and data source details

    Method
    Path
    Purpose

    Search for data sources

    GET /dataSource

    Search for data sources that you own or are authorized to see.

    Query parameters

    Attribute
    Description
    Required

    Response schema

    The response will return data sources you own or are authorized to see.

    Attribute
    Description

    Request example

    The following request returns 2 data sources.

    Response example

    Get a data source by ID

    GET /dataSource/{dataSourceId}

    Get a data source based on the ID.

    Query parameters

    Attribute
    Description
    Required

    Response Schema

    Attribute
    Description

    Request example

    The following request gets a data source based on the ID 22.

    Response example

    Get data source by name

    GET /dataSource/name/{dataSourceName}

    Get a data source based on the name.

    Query parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request gets a data source based on the name Public Barfoo.

    Response example

    Get a data source by the short name

    GET /dataSource/sqlTableName/{shortName}

    Get a data source based on the SQL table name.

    Query parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request gets a data source based on the SQL table name customer_data.

    Response example

    Get data source relationships

    GET /dataSource/{dataSourceId}/lineage/{type}

    Get parent and child relationship records for derived data sources using a specified data source ID.

    Query parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request gets the parent relationship records for the derived data source with the data source ID 4.

    Response example

    Retrieve a Blob

    GET /dataSource/{dataSourceId}/blob/{blobid*}

    Retrieve a blob.

    Query parameters

    Attribute
    Description
    Required

    Response schema

    The response will download the blobs in a file you specify.

    Request example

    The following request retrieves a blob.

    Response example

    Get users by access level

    GET /dataSource/{dataSourceId}/access

    Get all users with the provided access level for this data source.

    Query parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request gets all users with the provided access level for this data source.

    Response example

    Get user access info for a data source

    GET /dataSource/{dataSourceId}/users/{profileId}/policyInfo

    Retrieves the visibilities, masking information, and filters that the passed in user has access to in the specified data source.

    Query parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request gets the visibility information for the user with the profile ID 2 on the data source with the data source ID 16.

    Response example

    Get user visibility info for a data source

    GET /dataSource/{dataSourceId}/users/{profileId}/visibilityReport

    Retrieves a summary of total records, total visibilities (the unique values contained in a column protected by a row-level security policy that allow Immuta to determine whether or not a user can see a given row if they possess an attribute that matches the visibility of that row), and visibilities a given user has access to.

    Query parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request gets all of the visibility information for the user with the profile ID 2 on the data source with the data source ID 16.

    Response example

    Get current user visibility info

    GET /dataSource/{dataSourceId}/visibilityReport

    Retrieves a summary of total records, total visibilities (the unique values contained in a column protected by a row-level security policy that allow Immuta to determine whether or not a user can see a given row if they possess an attribute that matches the visibility of that row), and visibilities the current user has access to for a specified data source.

    Query parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request gets all of the visibility information for the current user on the data source with the data source ID 16.

    Response example

    Access data sources and make data source requests

    Method
    Path
    Purpose

    Subscribe to a data source

    POST /dataSource/subscribe

    Subscribe to a data source.

    Query parameters

    Attribute
    Description
    Required

    Payload parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request subscribes to the data source with ID 22.

    Payload example

    Response example

    Request to unmask values

    Deprecation notice

    Support for unmask requests has been deprecated.

    POST /dataSource/{dataSourceId}/reverseMask

    Makes a request for values to be unmasked.

    Query parameters

    Attribute
    Description
    Required

    Payload parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following requests for values to be unmasked.

    Request payload example

    Response example

    Add a user to a data source

    POST /dataSource/{dataSourceId}/access

    Add a user to a specific data source. Requestors cannot add themselves to a data source. To request access to a data source, .

    Query parameters

    Attribute
    Description
    Required

    Payload parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request adds a user (saved in example-payload.json) to this data source.

    Request payload example

    Response example

    Manage data source requests

    Method
    Path
    Purpose

    Get pending tasks by user

    GET /dataSource/tasks/pending

    Get all pending tasks for this user and pending tasks this user has created.

    Query parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request gets all pending tasks for a user and pending tasks the user has created.

    Response example

    Mark tasks as complete

    GET /dataSource/tasks/{taskId}

    Handles the given task and marks it as complete.

    Query parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request handles the given task and marks it as complete.

    Response example

    Return tasks for a data source

    GET /dataSource/{dataSourceId}/tasks

    Returns all tasks the user has made, can approve or deny, or validate for this data source.

    Query parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request returns all tasks the user has made, can approve or deny, or validate for this data source.

    Response example

    Change user status

    PUT /dataSource/{dataSourceId}/access/{subscriptionId}

    Change user status for a specific data source. Requestors cannot update their own status for a data source.

    Query parameters

    Attribute
    Description
    Required

    Payload parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request changes the user status to subscribed for the specified data source.

    Payload example

    Response example

    Update data sources

    Method
    Path
    Purpose

    Update a data source

    PUT /dataSource/{dataSourceId}

    Update a data source.

    Query parameters

    Attribute
    Description
    Required

    Payload parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request updates the data source's documentation (saved in example-payload.json).

    Request payload example

    Response example

    Update multiple data sources

    PUT /dataSource/bulk/{type}

    Update data sources.

    Query parameters

    Attribute
    Description
    Required

    Payload parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request adds the Address.email tag to two data sources.

    Payload example

    Response example

    Refresh views

    POST /dataSource/bulkRefreshViews

    Refresh views.

    Payload parameters

    Attribute
    Description
    Required

    Request example

    The following request with the payload below refreshes the view for the data source with the ID 202.

    Payload example

    Save blob metadata to Immuta

    POST /dataSource/{dataSourceId}/blobs

    Save blob metadata to Immuta.

    Query parameters

    Attribute
    Description
    Required

    Payload parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request saves blob metadata to Immuta.

    Payload example

    Response example

    Store blob metadata locally

    POST /dataSource/{dataSourceId}/persistBlob

    Save blob metadata to Immuta and store raw content in local blob store.

    Query parameters

    Attribute
    Description
    Required

    Payload parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request saves blob metadata to Immuta and stores raw content in local blob stores.

    Payload example

    Response example

    Trigger schema monitoring jobs

    PUT /dataSource/detectRemoteChanges

    Trigger the schema monitoring job for the specified detection group, or all groups if no payload parameters are given.

    Payload parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Responses may include bulkId, schemaDetection, or columnDetection objects, depending on the payload.

    Request example

    The following request triggers the schema monitoring job for the specified detection group.

    Payload example

    The tabs below illustrate payloads for triggering schema monitoring on a host, database, or table. The request will run schema monitoring for all databases registered under the hostname provided in the payload.

    The request will run schema monitoring for all databases registered under the hostname provided in the payload.

    The request will run schema monitoring on the database provided in the payload. If data sources were initially registered via the V2 API, this request will locate new schemas that contain tables Immuta has the ability to access, and Immuta will create a new schema project associated with these newly discovered schemas and create data sources for each table located. If data sources were initially registered via the V1 API, this request will only update the columns and tables of registered schema and tables of the specified database; it will not register any new schemas.

    The request will run column detection and update the columns on the table specified in the payload.

    Response examples

    The tabs below illustrate the example response for each example payload provided above.

    View and Review Data Sources

    Method
    Path
    Purpose

    Refresh external catalog tags on a data source

    GET /dataSource/{dataSourceId}/test

    Refreshes tags from an external catalog on a data source. The external catalog must be linked to the data source.

    Query parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request refreshes external catalog tags on the data source.

    Response example

    Retrieve blob handlers

    GET /dataSource/blobHandlerTypes

    Retrieve all blob handlers the current user is allowed to create.

    Response schema

    Attribute
    Description

    Request example

    The following request retrieves all blob handlers the current user is allowed to create.

    Response example

    Get data sources by purpose

    GET /dataSource/byPurposes

    Get data sources that match a set of purposes.

    Query parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request gets data sources that match a set of purposes.

    Response example

    Retrieve data sources by user

    GET /dataSource/rpc/mine

    Retrieves all the data sources the current user has access to.

    Response schema

    Attribute
    Description

    Request example

    The following request retrieves all the data sources the current user has access to.

    Response example

    Get recent policy activities for a data source

    GET /dataSource/{dataSourceId}/activities

    Get all of the recent policy activities for a given data source.

    Query parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request gets all of the recent policy activities for a given data source.

    Response example

    Get profiles for data source owners and experts

    GET /dataSource/{dataSourceId}/contacts

    Gets the profiles for the data source owners and experts.

    Query parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request gets all the profiles for the data source owners and experts.

    Response example

    Get tags by data source

    GET /dataSource/{dataSourceId}/tags

    Get the tags for a data source.

    Query parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request gets the tags for data source 4.

    Response example

    Get users who can unmask columns

    GET /dataSource/{dataSourceId}/{columnName}/unmaskUsers

    Return the users who can unmask the given column.

    Query parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request returns the users who can unmask the given column.

    Response example

    Delete Data Sources and More

    Method
    Path
    Purpose

    Delete a data source

    DELETE /dataSource/{dataSourceId}

    Delete a data source. This will perform a soft delete on the first call and a hard delete the second time.

    Query parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request deletes the data source 23.

    Response example

    Delete a task

    DELETE /dataSource/tasks/{taskId}

    Delete the specified task.

    Query parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request deletes a specified task.

    Response example

    Delete a blob

    DELETE /dataSource/{dataSourceId}/blob/{blobId*}

    Delete a blob.

    Query parameters

    Attribute
    Description
    Required

    Response schema

    When the blob is successfully deleted, there will be no response.

    Request example

    The following request deletes a blob.

    Unsubscribe from a data source

    DELETE /dataSource/{dataSourceId}/unsubscribe

    Unsubscribe from a data source.

    Query parameters

    Attribute
    Description
    Required

    Response schema

    Attribute
    Description

    Request example

    The following request unsubscribes the user from data source 23.

    Response example

    Delete a data source.

    GET

    Get parent and child relationship records for derived data sources using a specified data source ID.

    GET

    Retrieve a blob.

    GET

    Get all users with the provided access level for this data source.

    GET

    Retrieves the visibilities, masking information, and filters that the passed in user has access to in the specified data source.

    GET

    Retrieves a summary of total records, total visibilities, and visibilities a given user has access to.

    GET

    Retrieves a summary of total records, total visibilities, and visibilities the current user has access to for a specified data source.

    searchText

    string Searches for data source names using the provided string.

    No

    column

    array[string] Searches for data source column names.

    No

    connectionString

    array[string] Searches by connection string.

    No

    schema

    string Searches for data source schema.

    No

    nameOnly

    boolean When true, searchText will only search data source names. Default is false.

    No

    idOnly

    boolean When true, only returns the ID Of the data source and the user's subscription status.

    No

    dataSourceIds

    array[integer] Searches for the provided data source IDs.

    No

    selectFields

    array[string] This field accepts the values id, name, and columnEvolutionEnabled. When id or name are provided, the request will return only the ID or name of the data source and the subscription status. If columnEvolutionEnabled is provided, the response will also include information about the policies, policy conflicts, and workspaces associated with the data sources.

    No

    offset

    integer Used in combination with size to fetch pages. Default is 0.

    No

    size

    integer The number of results to return per page. Default is 10.

    No

    sortField

    string Used to sort results by field, which must be createdAt, name, blobHandlerType, subscriptionStatus, recordCount, status, policy, or editable.

    No

    sortOrder

    string Sorts results by order, which must be asc or desc.

    No

    excludedProjects

    array[integer] Filter out any data sources that belong to the specified projects.

    No

    ephemeral

    boolean When true, returns ephemeral data sources.

    No

    clusterName

    string The name of the remote cluster the data source is connected to.

    No

    mode

    integer Specifies the query mode, which must be 0 (FULL), 1 (COUNT), 4 (TAG), 5 (MIN_MAX), or 6 (STATUS).

    No

    globalPolicy

    string Filter by data sources that have this Global Policy applied.

    No

    hostname

    string Searches data sources by hostname.

    No

    determinePolicyContflicts

    boolean When true, filters results to return the data sources with policy conflicts.

    No

    collectionId

    string Filter by data sources in the domain with this ID.

    No

    collectionExclude

    string When true, filters results to return the data sources in the domain of the provided ID.

    No

    sddTemplateName

    string Filter by data sources that have the specified SDD identification framework applied.

    No

    excludeSddTemplateName

    string Filter by data sources that do not have the specified SDD identification framework applied.

    No

    schemaEvolutionId

    integer The schema evolution ID.

    recordCount

    integer The record count.

    status

    array[string] Accepted statuses are passed or failed.

    subscriptionStatus

    array[string] Accepted statuses are subscribed or unsubscribed.

    blobHandlerType

    array[string] Describes the type of underlying blob handler of this data source (e.g., Custom, MS SQL).

    subscriptionType

    string The type of subscription policy on the project. The type can be automatic (which allows anyone to subscribe), approval (which requires the subscriber to be manually approved), policy (which only allows users with specific groups or attributes to subscribe), or manual (which requires users to be manually added).

    connectionString

    string The connection string information.

    sqlSchemaName

    string The schema name.

    policy

    string When this value is none, there are no data policies applied to the data source. Otherwise, this field indicates whether or not there are policy conflicts among the data policies applied to the data source.

    policyHandlerType

    string The policy handler type, such as None or Builder.

    blobHandler

    array[object] A list of full URLs providing the locations of all blob store handlers to use with this data source.

    blobHandlerType

    string Describes the type of underlying blob handler that will be used with this data source (e.g., MS SQL).

    createdBy

    integer The ID of the profile creating the data source.

    deleted

    boolean If true, the data source was deleted.

    type

    string The data source type, such as queryable or ingested.

    rowCount

    integer The number of rows.

    documentation

    string Documentation associated with the data source.

    id

    integer The data source ID.

    policyHandlerType

    string The type of policy handler applied to the data source: Builder.

    subscriptionType

    string The type of subscription policy on the data source. The type can be automatic (which allows anyone to subscribe), approval (which requires the subscriber to be manually approved), policy (which only allows users with specific groups or attributes to subscribe), or manual (which requires users to be manually added).

    subscriptionPolicy

    array Details about the Subscription Policy applied to the data source.

    globalPolicies

    string Details about the Global Policies applied to the data source.

    status

    string The data source health status.

    blobHandler

    array[object] A list of full URLs providing the locations of all blob store handlers to use with this data source.

    blobHandlerType

    string Describes the type of underlying blob handler that will be used with this data source (e.g., MS SQL).

    createdBy

    integer The ID of the profile creating the data source.

    deleted

    boolean If true, the data source was deleted.

    type

    string The data source type, such as queryable or ingested.

    rowCount

    integer The number of rows.

    documentation

    string Documentation associated with the data source.

    id

    integer The data source ID.

    policyHandlerType

    string The type of policy handler applied to the data source: Builder.

    subscriptionType

    string The type of subscription policy on the data source. The type can be automatic (which allows anyone to subscribe), approval (which requires the subscriber to be manually approved), policy (which only allows users with specific groups or attributes to subscribe), or manual (which requires users to be manually added).

    subscriptionPolicy

    array Details about the Subscription Policy applied to the data source.

    globalPolicies

    string Details about the Global Policies applied to the data source.

    status

    string The data source health status.

    blobHandler

    array[object] A list of full URLs providing the locations of all blob store handlers to use with this data source.

    blobHandlerType

    string Describes the type of underlying blob handler that will be used with this data source (e.g., MS SQL).

    createdBy

    integer The ID of the profile creating the data source.

    deleted

    boolean If true, the data source was deleted.

    type

    string The data source type, such as queryable or ingested.

    rowCount

    integer The number of rows.

    documentation

    string Documentation associated with the data source.

    id

    integer The data source ID.

    policyHandlerType

    string The type of policy handler applied to the data source: Builder.

    subscriptionType

    string The type of subscription policy on the data source. The type can be automatic (which allows anyone to subscribe), approval (which requires the subscriber to be manually approved), policy (which only allows users with specific groups or attributes to subscribe), or manual (which requires users to be manually added).

    subscriptionPolicy

    array Details about the Subscription Policy applied to the data source.

    globalPolicies

    string Details about the Global Policies applied to the data source.

    status

    string The data source health status.

    size

    integer The number of results to return.

    No

    offset

    integer The number of results to skip (for paging).

    No

    sortField

    string The field on which to sort the result set.

    No

    sortOrder

    string The order in which to sort the results.

    No

    expandGroups

    boolean If true will return individual members of any group subscribed.

    No

    ignoreSystemGenerated

    boolean If true, will not return system generated accounts.

    No

    filterBySchemaEvolution

    boolean If true, will only return users who have the specified level of access across ALL data sources within the same schema evolution group as this one.

    No

    additionalFilters

    array Policy information for the data source, including customWhere, differentialPrivacy, eventTimeColumn, minimization, time, filterSeconds, and isOlderOrNewer.

    allowMaskedJoins

    boolean If true the data source allows masked joins.

    policySet

    array Details about the policies on the data source.

    dataSourceName

    string The data source name.

    additionalFilters

    array Policy information for the data source, including customWhere, differentialPrivacy, eventTimeColumn, minimization, time, filterSeconds, and isOlderOrNewer.

    allowMaskedJoins

    boolean If true the data source allows masked joins.

    policySet

    array Details about the policies on the data source.

    dataSourceId

    integer The data source ID.

    No

    state

    string The state of the task, such as pending.

    createdAt

    timestamp The date and time the task was created.

    updatedAt

    timestamp The date and time the task was updated.

    expiration

    date The date the user's data source subscription ends.

    No

    group

    integer If a group was added, the group ID.

    expiration

    date The date the user's subscription to the data source will expire.

    acknowledgeRequired

    boolean If the data source is associated with a project, this value will be true if the user needs to confirm they have read the project acknowledgment.

    createdAt

    timestamp The date and time of creation.

    updatedAt

    timestamp The date and time of update.

    approved

    boolean When true, the user's request has been approved.

    schemaEvolutionConnectionString

    string The schema evolution connection string to filter by.

    No

    countBySchemaEvolution

    boolean Iftrue, will only return the number of tasks, grouped by schema evolution.

    No

    countByDataSource

    boolean Iftrue, will only return the number of tasks, grouped by data source.

    No

    countOnly

    boolean When true, will only return a count of the pending tasks.

    No

    groupByDataSource

    boolean If true, will return the results as an array of { dataSourceId: , rows: }.

    No

    types

    Array[string] Filters the results by the type of task: unmask, dataSourceCreated, columnAdded, columnDeleted, or columnTypeChanged. The dataSourceCreated, columnAdded, columnDeleted, and columnTypeChanged tasks are only created if a policy that contains the New tag is active and identifies a change in the remote platform.

    No

    profileId

    integer Returns tasks where either the target or requesting user has this profile ID.

    No

    searchText

    string A string used to filter returned users. The query is executed with a wildcard prefix and suffix.

    No

    searchModel

    string A string used to determine how results should be filtered using searchText.

    No

    types

    Array[string] The type of task: unmask, dataSourceCreated, columnAdded, columnDeleted, or columnTypeChanged. The dataSourceCreated, columnAdded, columnDeleted, and columnTypeChanged tasks are only created if a policy that contains the New tag is active and identifies a change in the remote platform.

    No

    size

    integer The number of results to return.

    No

    offset

    integer The number of results to skip (for paging).

    No

    sortField

    string The field by which to sort the result set.

    No

    sortOrder

    string The order in which to sort the results. The default is desc.

    No

    countOnly

    boolean If true, will only return the number of tasks.

    No

    expiration

    timestamp The date the user will no longer have access to the data source.

    acknowledgeRequired

    boolean This attribute is specific to projects. When true the user needs to confirm they have read the project acknowledgement statement.

    createdAt

    timestamp The date and time created.

    updatedAt

    timestamp The date and time updated.

    originalState

    array The user's previous status for the data source.

    approved

    boolean If true, the status is approved.

    POST

    Save blob metadata to Immuta and store raw content in local blob store.

    PUT

    Trigger the schema monitoring job for the specified detection group, or all groups if no ID is given.

    name

    string The name of the data source. It must be unique within the Immuta tenant.

    No

    sqlTableName

    string A string that represents this data source's table in Immuta.

    No

    organization

    string The organization that owns the data source.

    No

    category

    string The category of the data source.

    No

    description

    string The description of the data source.

    No

    hasExamples

    boolean When true, the data source contains examples.

    No

    sqlTableName

    string A string that represents this data source's table in Immuta.

    organization

    string The organization that owns the data source.

    description

    string The description of the data source.

    policyHandler

    array The ID of the policy handler and details about the data policies enforced on the data source.

    subscriptionPolicy

    array Details about the subscription policy enforced on the data source, including the type of policy and exceptions.

    date

    data A date that corresponds to a date within the record itself.

    No

    filesize

    integer The size of the file in bytes.

    No

    date

    data A date that corresponds to a date within the record itself.

    No

    filesize

    integer The size of the file in bytes.

    No

    table

    string The table name. This will run column detection to just update the columns in this table. This parameter cannot be included in the payload if dataSourceIds or schemaEvolutionId is included.

    No

    schemaEvolutionId

    integer The ID of the schema to run the schema monitoring job on. This will run on all tables associated with the specified ID. The schema ID can be found in the response body of . This parameter cannot be included in the payload if dataSourceIds or any combination of hostname, database, port, or table is included.

    No

    skipColumnDetection

    boolean When true, Immuta will only pull new tables from the source server. This parameter can only be paired with schemaEvolutionId.

    No

    overrides.httpPath

    string If Databricks are configured, provide the alternative HTTP path to trigger schema monitoring on that ephemeral cluster.

    No

    GET

    Get all of the recent policy activities for a given data source.

    GET

    Get the profiles for the data source owners and experts.

    GET

    Get the tags for a data source.

    GET

    Return the users who can unmask the given column.

    highCardinality

    object Indicates whether or not the job run to calculate the data source's high cardinality column passed and when it was last run.

    schemaEvolution

    object Indicates whether or not the job run to check if a new table had been added in the remote database passed and when it was last run. If a new table was added, Immuta automatically creates a new data source. Correspondingly, if a remote table is removed, that data source will be disabled in the console.

    sdd

    object Indicates whether or not sensitive data discovery was successfully run on the data source.

    sql

    object Indicates whether or not the SQL query run to check the data source's health passed and when it was last run.

    stats

    object Indicates whether or not the job run to calculate the number of rows in the data source passed and when it was last run.

    sparkUseJDBC

    boolean When true, uses a JDBC driver.

    dataSource

    metadata details regarding the data source.

    metadata

    array Details about the deleted task.

    GET

    /dataSource

    Search for data sources.

    GET

    /dataSource/{dataSourceId}

    Get a data source based on the ID.

    GET

    /dataSource/name/{dataSourceName}

    Get data source based on the name.

    GET

    /dataSource/sqlTableName/{shortName}

    Get data source based on the short name.

    blobHandlerType

    array[string] Describes the type of underlying blob handler that will be used with this data source (e.g., Custom, MS SQL).

    No

    subscription

    array[string] The requesting user's subscription status: pending, owner, subscribed, not_subscribed, expert, or ingest.

    No

    status

    array[string] The data source status: passed or failed.

    No

    tag

    array[string] Filters data sources by tags associated with the data sources.

    name

    string Data source name.

    id

    integer Data source ID.

    deleted

    boolean If true the data source is a deleted data source.

    description

    string The data source description.

    createdAt

    timestamp The date and time the data source was created.

    subscriptionPolicy

    array Details the type of Subscription Policy applied to the data source.

    dataSourceId

    integer The data source ID .

    Yes

    name

    string The data source name.

    recordFormat

    string The data format of blobs in the data source, such as json, xml, html, or jpeg.

    description

    string The description of the data source.

    policyHandler

    array The ID of the policy handler and details about the data policies enforced on the data source.

    sqlSchemaName

    string A string that represents this data source's schema name in Immuta.

    sqlTableName

    string The SQL table name in Immuta.

    dataSourceName

    string The data source name.

    Yes

    name

    string The data source name.

    recordFormat

    string The data format of blobs in the data source, such as json, xml, html, or jpeg.

    description

    string The description of the data source.

    policyHandler

    array The ID of the policy handler and details about the data policies enforced on the data source.

    sqlSchemaName

    string A string that represents this data source's schema name in Immuta.

    sqlTableName

    string The SQL table name in Immuta.

    shortName

    string The data source SQL table name.

    Yes

    name

    string The data source name.

    recordFormat

    string The data format of blobs in the data source, such as json, xml, html, or jpeg.

    description

    string The description of the data source.

    policyHandler

    array The ID of the policy handler and details about the data policies enforced on the data source.

    sqlSchemaName

    string A string that represents this data source's schema name in Immuta.

    sqlTableName

    string The SQL table name in Immuta.

    type

    string The type of lineage records to return. Options include: parents, children, and all.

    Yes

    dataSourceId

    integer The target data source ID.

    Yes

    children

    array Details of the child data source, including dataSourceId, dataSourceName, projectId, policyHandlerDiff, deleted, createdBy, and createdAt.

    parents

    array Details of the parent data source, including dataSourceId, dataSourceName, projectId, policyHandlerDiff, deleted, createdBy, and createdAt.

    dataSourceId

    integer The data source ID.

    Yes

    blobId

    string The blob ID.

    Yes

    dataSourceId

    integer The data source ID.

    Yes

    states

    Array[string] The status levels to include when querying for user access.

    No

    approved

    boolean Denotes whether the returned access objects should be approved.

    No

    searchText

    string A string used to filter returned users. The query is executed with a wildcard prefix and suffix.

    count

    integer The number of users with access to the data source.

    users

    string The metadata regarding the users with access to the data source.

    dataSourceId

    integer The data source ID.

    Yes

    profileId

    integer The profile ID of the user.

    Yes

    projectId

    integer The project ID. If provided, this project will be used when evaluating the user's visibilities.

    No

    visibilities

    array Details of the user's visibilities, including anyKey.

    visibilityRuleApplies

    boolean If true, a visibility rule exists and the user is not excepted from it.

    masked

    array Masking information for the data source, including metadata, name, type, and actionType.

    additionalFilters

    array Policy information for the data source, including customWhere, differentialPrivacy, eventTimeColumn, minimization, time, filterSeconds, and isOlderOrNewer.

    dataSourceId

    integer The data source ID.

    Yes

    profileId

    integer The profile ID of the user.

    Yes

    informationOnly

    boolean If true, the query will just return information for the UI and will skip running some queries for ephemeral data sources.

    No

    includeNestedColumns

    boolean If true, the query will return just information for the dictionary page, including the masking policies for nested columns.

    noVisibilities

    boolean If true, the data source has no row-level security or purpose-based restriction policies applied to it.

    dataSourceVisibilitiesCount

    integer The total number of possible visibilities the given data source has.

    userVisibilitiesCount

    integer The number of visibilities the current user can see for the given data source.

    masked

    array Masking information for the data source, including metadata, name, type, and actionType.

    dataSource

    integer The data source ID.

    dataSourceName

    string The data source name.

    dataSourceId

    integer The data source ID.

    Yes

    noVisibilities

    boolean If true, the data source has no row-level security or purpose-based restriction policies applied to it.

    dataSourceVisibilitiesCount

    integer The total number of possible visibilities the given data source has.

    userVisibilitiesCount

    integer The number of visibilities the current user can see for the given data source.

    denialReason

    string Reason the user was denied visibility.

    masked

    array Masking information for the data source, including metadata, name, type, and actionType.

    dataSource

    integer The data source ID.

    POST

    /dataSource/subscribe

    Subscribe to a data source.

    POST

    /dataSource/{dataSourceId}/reverseMask

    Make a request for values to be unmasked.

    POST

    /dataSource/{dataSourceId}/access

    Add a user to a specific data source.

    dataSourceId

    integer Data source ID number.

    Yes

    dataSourceIds

    array The ID of the data source the user is subscribing to.

    No

    approvals

    array Includes details about the Subscription policy on the data source: requiredPermissions, specificApproverRequired, specificApprover, and ownerModelId.

    No

    body

    array Contains details about the data source, including the data source ID, subscription status of the user, the profile ID of the user, and the dates the data source was created and updated.

    dataSourceId

    integer The data source ID.

    Yes

    column

    string The column to unmask.

    Yes

    unmaskingReason

    string The reason the values need to be unmasked.

    Yes

    unmaskingUsers

    array[integer] The profile ID of the users who can unmask the values for the requestor.

    Yes

    projectId

    integer The ID of the associated project.

    id

    integer The ID of the request.

    requestingUserProfile

    integer The requesting user profile ID.

    dataSourceId

    integer The data source ID.

    reason

    string The reason for the unmasking request.

    metadata

    string Metadata regarding the masking, such as the column, values, and maskingConfig.

    type

    string The type of request.

    dataSourceId

    integer The data source ID.

    Yes

    state

    string The status of the user: subscribed, owner, expert, or ingest.

    Yes

    profileId

    integer The profile ID of the user being added to the data source.

    Yes

    groupId

    integer The ID of the group being added to the data source.

    No

    approvals

    array Details about the user approving access: requiredPermission, specificApproverRequired, and specificApprover.

    id

    integer The user's subscription ID.

    modelId

    integer The model ID.

    modelType

    string The Immuta component to add the user to: datasource or project.

    state

    string The user's data source role, such as subscribed.

    denialReasoning

    string If the user was denied access, the reason for denial.

    profile

    integer The user's profile ID.

    GET

    /dataSource/tasks/pending

    Get all pending tasks for this user and pending tasks this user has created.

    GET

    /dataSource/tasks/{taskId}

    Handles the given task and marks it as complete.

    GET

    /dataSource/{dataSourceId}/tasks

    Returns all tasks the user has made, can approve or deny, or validate for this data source.

    PUT

    /dataSource/{dataSourceId}/access/{id}

    Change user status for a specific data source.

    searchText

    string If specified, will filter results using the specified string.

    No

    searchModel

    string Will filter the results by model type: dataSource or schemaEvolution.

    No

    offset

    integer The number of results to skip (for paging).

    No

    size

    integer The number of results to return per page.

    outgoing

    array Includes details of the tasks or requests created by the user, such as the count, type, and targetEmails.

    incoming

    array Includes details about the tasks received by the user, such as the count, type, and targetEmails.

    taskId

    integer The task ID.

    Yes

    result

    array Includes details about the task.

    dataSourceId

    integer The data source ID.

    Yes

    states

    Array[string] The state of the tasks: pending or completed.

    No

    targetProfileId

    integer Only returns tasks where the target user has this profile ID.

    No

    requestingUserProfileId

    integer Only returns tasks where the requesting user has this profile ID.

    hits

    array Includes details about each task, such as the id, state, type, and requestor.

    count

    integer The total number of tasks.

    dataSourceId

    Integer The data source ID.

    Yes

    subscriptionId

    Integer The data source member's subscription ID.

    Yes

    state

    string The new status for the user: subscribed, owner, expert or ingest.

    Yes

    id

    integer The data source member's subscription ID.

    modelId

    integer The model ID.

    modelType

    array The Immuta component the user's subscription was updated for: datasource or project.

    state

    array The current state of the user's role: subscribed, owner, expert, or ingest.

    profile

    integer The profile ID.

    group

    integer If a group's status is being updated, this is the group ID.

    PUT

    /dataSource/{dataSourceId}

    Update a data source.

    PUT

    /dataSource/bulk/{type}

    Update multiple data sources.

    POST

    /dataSource/bulkRefreshViews

    Refresh views.

    POST

    /dataSource/{dataSourceId}/blobs

    Save blob metadata to Immuta.

    dataSourceId

    integer The data source ID.

    Yes

    blobHandler

    array[object] A list of full URLs providing the locations of all blob store handlers to use with this data source.

    No

    blobHandlerType

    string Describes the type of underlying blob handler that will be used with this data source (e.g., MS SQL).

    No

    recordFormat

    string The data format of blobs in the data source, such as json, xml, html, or jpeg.

    No

    type

    string The type of data source: ingested (metadata will exist in Immuta) or queryable (metadata is dynamically queried).

    private

    boolean When false, the data source will be publicly available in the Immuta UI.

    blobHandler

    array[object] A list of full URLs providing the locations of all blob store handlers to use with this data source.

    blobHandlerType

    string Describes the type of underlying blob handler that will be used with this data source (e.g., MS SQL).

    recordFormat

    string The data format of blobs in the data source, such as json, xml, html, or jpeg.

    type

    string The type of data source: ingested (metadata will exist in Immuta) or queryable (metadata is dynamically queried).

    name

    string The name of the data source. It must be unique within the Immuta tenant.

    type

    string The action to perform on the data sources: add-users, disable, restore, delete, or tags.

    Yes

    ids

    array[integer] The IDs of the data sources to update.

    Yes

    update

    array[object] Only required for add-users (includes metadata about the users' profiles: id and state) and tags (includes metadata about the tags: name and source) types.

    No

    bulkId

    string The ID of the bulk data source update.

    jobsCreated

    integer The number of jobs created.

    dataSourceIds

    array[integer] The IDs of the data sources of the views to update.

    Yes

    dataSourceId

    integer The data source ID.

    Yes

    blobId

    string The unique ID used to identify this blob within its data source.

    Yes

    file

    string The binary file to add to the data source.

    Yes

    filename

    string The name that will display in the filesystem.

    No

    tags

    array[string] Tags to apply to the blob.

    blobsWithoutIds

    integer The number of blobs added without IDs.

    blobsInError

    array The blobs that were not added because of an error.

    blobsInserted

    array The blobs added to the data source.

    tags

    array[string] Tags applied to the blobs.

    dataSourceId

    integer The data source ID.

    Yes

    blobId

    string The unique ID used to identify this blob within its data source.

    Yes

    file

    string The binary file to add to the data source.

    Yes

    filename

    string The name that will display in the filesystem.

    No

    tags

    array[string] Tags to apply to the blob.

    blobsWithoutIds

    integer The number of blobs added without IDs.

    blobsInError

    array The blobs that were not added because of an error.

    blobsInserted

    array The blobs added to the data source.

    tags

    array[string] Tags applied to the blobs.

    dataSourceIds

    array[integer] The data source IDs to run the column detection job on. Leave empty to run this job globally on all data sources. This parameter cannot be included in the payload if schemaEvolutionId or any combination of hostname, database, port, or table is included.

    No

    hostname

    string The hostname of the data sources. This parameter cannot be included in the payload if dataSourceIds or schemaEvolutionId is included.

    No

    port

    integer The port used to connect the data sources to Immuta. This parameter cannot be included in the payload if dataSourceIds or schemaEvolutionId is included.

    No

    database

    string The database name. This runs schema monitoring on the database provided. If data sources were initially registered via the V2 API, including this parameter will locate new schemas that contain tables Immuta has the ability to access, and Immuta will create a new schema project associated with these newly discovered schemas and create data sources for each table located. If data sources were initially registered via the V1 API, including this parameter will only update the columns and tables of registered schema and tables of the specified database; it will not register any new schemas. This parameter cannot be included in the payload if dataSourceIds or schemaEvolutionId is included.

    schemaDetection

    object Includes details about the resulting schema detection jobs.

    columnDetection

    object Includes details about the resulting column detection jobs.

    bulkId

    string The unique identifier of the jobs running schema monitoring and column detection.

    GET

    /dataSource/{dataSourceId}/test

    Refresh tags from an external catalog on a data source. The external catalog must be linked to the data source.

    GET

    /dataSource/blobHandlerTypes

    Retrieve all blob handlers the current user is allowed to create.

    GET

    /dataSource/byPurposes

    Get data sources that match a set of purposes.

    GET

    /dataSource/rpc/mine

    Retrieve all the data sources the current user has access to.

    dataSourceId

    integer The data source ID.

    Yes

    blob

    object Indicates whether or not the blob was successfully crawled.

    columnEvolution

    object Indicates whether or not the job run to check for columns added or removed from the data source passed and when it was last run.

    externalCatalog

    object Indicates whether or not the external catalog was successfully linked to the data source.

    fingerprint

    object Indicates whether or not the fingerprint job was successful (passed) and when it was last run. The fingerprint captures summary statistics of the data source.

    framework

    object Indicates whether or not the classification was successfully run on the data source to determine its sensitivity.

    globalPolicy

    object Indicates whether or not global policies were successfully applied to the data source.

    name

    string The name of the blob handler.

    baseUrl

    string The base URL for the data source.

    config

    array Includes information about the connection configuration.

    port

    integer The port number.

    driver

    string The name of the driver.

    purposes

    array[string] The purposes to filter the data sources by.

    Yes

    excludedProjects

    array[integer] Excludes data sources associated with specified project IDs.

    No

    id

    integer The data source ID.

    name

    array The name of the data source.

    policyId

    integer The policy ID.

    restrictions

    array Details regarding the operator (and or or) and purposes.

    id

    integer The data source ID.

    name

    string The data source name.

    type

    string The type of data source, such as ingested.

    sqlTableName

    string The name of the table in Immuta.

    sqlSchemaName

    string The name of the schema in Immuta.

    blobHandlerType

    string The type of handler, such as Snowflake.

    dataSourceId

    integer The data source ID.

    Yes

    offset

    integer The number of results to skip (for paging).

    No

    size

    integer The number of results to return per page.

    No

    count

    integer The number of results.

    activities

    array Includes details about the policy and the data source, including the policy and data source type, when the activity notification was triggered, and whether or not the policy change was triggered by a Global policy.

    actionBy

    array Details about who triggered the action.

    targetUser

    array Information about the user who received the notification.

    dataSourceId

    integer The data source ID.

    Yes

    id

    integer The data source ID.

    state

    string The user's data source role, such as owner or subscribed.

    name

    string The user's name.

    email

    string The user's email.

    profile

    integer The user's profile ID.

    dataSourceId

    integer The data source ID.

    Yes

    blobId

    string Returns the tags for the specified blob.

    No

    blobTagsOnly

    boolean When true, will only display blob tags associated with a data source.

    No

    tags

    array Includes details about the tags, such as the name, source, and the profile ID of the user who added the tag.

    dataSourceId

    integer The data source ID.

    Yes

    columnName

    string The name of the column to unmask.

    Yes

    name

    array The name of the user who can unmask the value.

    profileId

    integer The profile ID of the user who can unmask the value.

    iamid

    string The IAM ID of the user who can unmask the value.

    DELETE

    /dataSource/{dataSourceId}

    Delete a data source. This will perform a soft delete on the first call and a hard delete the second time.

    DELETE

    /dataSource/tasks/{taskId}

    Delete the specified task.

    DELETE

    /dataSource/{dataSourceId}/blob/{blobId*}

    Delete a blob.

    DELETE

    /dataSource/{dataSourceId}/unsubscribe

    Unsubscribe from a data source.

    dataSourceId

    integer The data source ID.

    Yes

    success

    boolean If true, the request to disable or delete the data source was successful.

    id

    integer The data source ID.

    schemaEvolutionId

    integer The schema evolution ID.

    name

    string The data source name.

    disabled

    boolean If true, the data source is disabled.

    handlerDeleteErrorMessage

    string The delete error message.

    taskId

    integer Target task ID.

    Yes

    id

    integer The deleted task ID.

    state

    array The state of the deleted task, such as pending.

    type

    array The type of deleted task, such as columnAdded.

    targetNames

    string The name of the user who received the request.

    targetEmails

    string The email of the user who received the request.

    requester

    metadata Details regarding the requesting profile.

    dataSourceId

    integer The data source ID.

    Yes

    blobId

    string The blob ID.

    Yes

    dataSourceId

    integer The data source ID.

    Yes

    status

    boolean If true, the requesting user is unsubscribed from the data source.

    Search data sources and data source details
    Access data sources and make data source requests
    Manage data source requests
    Update data sources
    use the /dataSource/subscribe endpoint

    No

    No

    No

    No

    No

    No

    No

    No

    No

    No

    No

    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/dataSource?size=2
    {
      "name": "Public Barfoo",
      "id": 22,
      "recordFormat": "Not Provided",
      "deleted": false,
      "description": null,
      "createdAt": "2021-07-22T14:11:55.539Z",
      "subscriptionPolicy": {
          "type": "subscription",
          "automaticSubscription": true
      },
      "schemaEvolutionId": 1,
      "recordCount": 0,
      "status": "passed",
      "subscriptionStatus": "subscribed",
      "blobHandlerType": "Snowflake",
      "subscriptionType": "automatic",
      "connectionString": "[email protected]:###/test",
      "sqlSchemaName": "public",
      "policy": "None",
      "policyHandlerType": "None",
      "native": null,
      "workspace": null
    },
    {
      "name": "Public Aaa Tpc",
      "id": 39,
      "recordFormat": "Not Provided",
      "deleted": false,
      "description": null,
      "createdAt": "2023-08-21T10:39:00.250Z",
      "subscriptionPolicy": {
          "type": "subscription",
          "exceptions": {
              "operator": "and",
              "conditions": [
                  {
                      "type": "groups",
                      "group": {
                          "name": "alpha"
                      }
                  }
              ]
          },
          "allowDiscovery": true,
          "automaticSubscription": true
      },
      "schemaEvolutionId": 1,
      "recordCount": 0,
      "blobHandlerType": "Snowflake",
      "subscriptionType": "policy",
      "sqlSchemaName": "public",
      "status": "passed",
      "subscriptionStatus": "owner",
      "connectionString": "[email protected]:###/test",
      "remoteTable": "tpc",
      "remoteSchema": "public",
      "domainId": null,
      "domainName": null,
      "policy": "None",
      "policyHandlerType": "None",
      "native": null,
      "workspace": null
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/dataSource/22
    {
      "name": "Public Barfoo",
      "recordFormat": "Not Provided",
      "description": null,
      "policyHandler": null,
      "sqlSchemaName": "public",
      "sqlTableName": "barfoo",
      "blobHandler": {
          "url": "https://your-url/snowflake/handler/22",
          "ca": {
              "name": "Certificate Authority Bundle"
      },
          "manualDictionary": false
      },
      "createdBy": 2,
      "deleted": false,
      "type": "queryable",
      "recordCount": 0,
      "rowCount": 6,
      "documentation": "# Public Barfoo",
      "statsExpiration": "2021-08-27T16:34:47.846Z",
      "id": 22,
      "blobHandlerType": "Snowflake",
      "policyHandlerType": "None",
      "subscriptionType": "automatic",
      "subscriptionPolicy": {
      "type": "subscription",
          "automaticSubscription": true
      },
      "globalPolicies": null,
      "status": "passed",
      "statusInfo": {
      "sql": {
          "status": "passed",
          "message": "Passed"
       }
      }
    }
    curl \
       --request GET \
       --header "Content-Type: application/json" \
       --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/dataSource/name/Public%20Barfoo
    {
      "name": "Public Barfoo",
      "recordFormat": "Not Provided",
      "description": null,
      "policyHandler": null,
      "sqlSchemaName": "public",
      "sqlTableName": "barfoo",
      "blobHandler": {
          "url": "https://your-url/snowflake/handler/22",
          "ca": {
              "name": "Certificate Authority Bundle"
      },
          "manualDictionary": false
          },
      "createdBy": 2,
      "deleted": false,
      "type": "queryable",
      "recordCount": 0,
      "rowCount": 6,
      "documentation": "# Public Barfoo",
      "statsExpiration": "2021-08-27T16:34:47.846Z",
      "id": 22,
      "blobHandlerType": "Snowflake",
      "policyHandlerType": "None",
      "subscriptionType": "automatic",
      "subscriptionPolicy": {
          "type": "subscription",
          "automaticSubscription": true
      },
      "globalPolicies": null,
      "status": "passed",
      "statusInfo": {
          "sql": {
          "status": "passed",
          "message": "Passed"
          }
      }
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/dataSource/sqlTableName/customer_data
        {
      "name": "Dbo Customer Data",
      "recordFormat": "Not Provided",
      "description": null,
      "policyHandler": {
        "visibilitySchema": {
          "fields": [],
          "version": "2021-10-06T19:39:39.145Z"
        },
        "handlerId": 55,
        "dataSourceId": 26
      },
      "sqlSchemaName": "dbo",
      "sqlTableName": "customer_data",
      "blobHandler": {
        "url": "https://1.1.1.1.1/snowflake/testhandler/26",
        "ca": {
          "name": "Certificate Authority Bundle"
        },
        "manualDictionary": false
      },
      "createdBy": 2,
      "deleted": false,
      "type": "queryable",
      "recordCount": 0,
      "rowCount": 1000,
      "documentation": "# Dbo Customer Data",
      "statsExpiration": "2021-11-05T19:37:43.270Z",
      "id": 26,
      "blobHandlerType": "Snowflake",
      "policyHandlerType": "Builder",
      "subscriptionType": "automatic",
      "subscriptionPolicy": {
        "type": "subscription",
        "automaticSubscription": false
      },
      "globalPolicies": null,
      "status": "passed",
      "statusInfo": {
        "sql": {
          "status": "passed",
          "message": "Passed"
        },
        "stats": {
          "status": "passed",
          "lastAttempted": "2021-10-06T19:37:43.337Z"
        },
        "lastAttempt": {
          "date": "2021-10-06T19:39:39.821Z"
        },
        "highCardinality": {
          "status": "passed",
          "lastAttempted": "2021-10-06T19:37:43.337Z"
          }
      },
      "expiration": null,
      "catalogMetadata": null,
      "workspace": null,
      "seeded": false,
      "schemaEvolutionId": 4,
      "columnEvolutionEnabled": true,
      "createdAt": "2021-10-01T14:23:27.225Z",
      "updatedAt": "2021-10-06T19:39:39.145Z",
      "subscribedAsUser": true,
      "subscriptionId": 45,
      "acknowledgeRequired": false,
      "subscriptionStatus": "owner",
      "requestedState": "owner",
      "approved": true,
      "subscriptionExpiration": null,
      "filterId": null
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/dataSource/4/lineage/parents
    {
      "parents": [{
        "dataSourceId": 3,
        "dataSourceName": "Public Healthcare Data",
        "deleted": false,
        "createdAt": "2022-08-17T13:41:38.381Z",
        "projectId": 2,
        "projectName": "Derived Data Source",
        "createdBy": "Your Username",
        "policyHandlerDiff": {
          "dsType": "queryable",
          "currentHandlerId": null,
          "previousHandlerId": null
        }
      }]
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --output ./the-blobs-will-be-saved-here
        https://your-immuta-url.com/dataSource/22/blob/22
    % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100  215k  100  215k    0     0   541k      0 --:--:-- --:--:-- --:--:--  541k
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/dataSource/22/access?sortOrder=desc
    {
      "count": 2,
      "users": [
        {
          "profile": 2,
          "name": "First Last",
          "iamid": "bim",
          "userid": "[email protected]",
          "email": "[email protected]",
          "type": "user",
          "admin": "First Last",
          "approved": true,
          "state": "owner",
          "systemGenerated": false,
          "lastExternalRefresh": "2021-10-06T14:58:46.983Z",
          "subscriptionId": 586,
          "createdAt": "2021-10-05T14:33:01.518Z",
          "updatedAt": "2021-10-05T14:33:01.518Z",
          "approvals": [
            {
              "requiredPermission": "OWNER",
              "state": "approved",
              "approverId": null,
              "ownerModelId": null,
              "approver": "First Last",
              "ownerModelName": null
            }
          ],
          "currentUserCanApprove": false
        },
        {
          "profile": 3,
          "name": "Tommy Test",
          "iamid": "bim",
          "userid": "[email protected]",
          "email": "[email protected]",
          "type": "user",
          "admin": "First Last",
          "approved": true,
          "state": "subscribed",
          "systemGenerated": false,
          "lastExternalRefresh": "2021-09-07T16:16:29.957Z",
          "subscriptionId": 649,
          "createdAt": "2021-10-06T14:58:31.366Z",
          "updatedAt": "2021-10-06T14:58:31.366Z",
          "approvals": [
            {
              "requiredPermission": "OWNER",
              "state": "approved",
              "approverId": null,
              "ownerModelId": null,
              "approver": "First Last",
              "ownerModelName": null
            }
          ],
          "currentUserCanApprove": false
        }
      ]
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/dataSource/16/users/2/policyInfo
    {
      "visibilities": [],
      "visibilityRuleApplies": false,
      "masked": [
        {
          "type": "Consistent Value",
          "metadata": {
            "constant": null
          },
          "name": "WS_SOLD_DATE_SK",
          "actionType": "Nullify"
        },
        {
          "type": "Consistent Value",
          "metadata": {
            "constant": null
          },
          "name": "WS_BILL_CUSTOMER_SK",
          "actionType": "Nullify"
        }
      ],
      "additionalFilters": {}
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/dataSource/16/users/2/visibilityReport
    [
      {
        "noVisibilities": true,
        "dataSourceVisibilitiesCount": 0,
        "userVisibilitiesCount": 0,
        "masked": [
          {
            "type": "Consistent Value",
            "metadata": {
              "constant": null
            },
            "name": "WS_SOLD_DATE_SK"
          },
          {
            "type": "Consistent Value",
            "metadata": {
              "constant": null
            },
            "name": "WS_BILL_CUSTOMER_SK"
          }
        ],
        "dataSource": 16,
        "dataSourceName": "Web Sales",
        "additionalFilters": {},
        "allowMaskedJoins": false,
        "policySet": "[{\"type\":\"masking\",\"rules\":[{\"type\":\"masking\",\"config\":{\"fields\":[\"WS_BILL_CUSTOMER_SK\"],\"maskingConfig\":{\"type\":\"Consistent Value\",\"metadata\":{\"constant\":null}}},\"exceptions\":null,\"ruleAppliedForUser\":true}],\"global\":{\"id\":9,\"tag\":\"Confidential\",\"live\":true,\"name\":\"Data Policy\",\"reason\":null,\"staged\":false,\"deleted\":false,\"conflict\":null,\"disabled\":false,\"metadata\":null,\"template\":false,\"createdAt\":\"2022-08-09T17:23:02.634Z\",\"createdBy\":\"jane\",\"policyKey\":\"Data Policy\",\"updatedAt\":\"2022-08-09T17:23:02.634Z\",\"clonedFrom\":null,\"certification\":null,\"createdByName\":\"jane\",\"changedOnApply\":[\"dataTypeMismatch\"],\"parentPolicyId\":null,\"systemGenerated\":false,\"originalPolicyId\":\"masking(^_^)data policy(^_^)ws_bill_customer_sk(^_^)consistent value(^_^)(^_^)(^_^)\",\"ownerRestrictions\":null},\"description\":null,\"policyHash\":\"3a2faac13e332cca1829ed773afa298a5455ac5bb54e68c53ae00991575d2a4b\"},{\"type\":\"masking\",\"rules\":[{\"type\":\"masking\",\"config\":{\"fields\":[\"WS_SOLD_DATE_SK\"],\"maskingConfig\":{\"type\":\"Consistent Value\",\"metadata\":{\"constant\":null}}},\"exceptions\":null,\"ruleAppliedForUser\":true}],\"global\":{\"id\":9,\"tag\":\"Confidential\",\"live\":true,\"name\":\"Data Policy\",\"reason\":null,\"staged\":false,\"deleted\":false,\"conflict\":null,\"disabled\":false,\"metadata\":null,\"template\":false,\"createdAt\":\"2022-08-09T17:23:02.634Z\",\"createdBy\":\"jane\",\"policyKey\":\"Data Policy\",\"updatedAt\":\"2022-08-09T17:23:02.634Z\",\"clonedFrom\":null,\"certification\":null,\"createdByName\":\"jane\",\"changedOnApply\":[\"dataTypeMismatch\"],\"parentPolicyId\":null,\"systemGenerated\":false,\"originalPolicyId\":\"masking(^_^)data policy(^_^)ws_sold_date_sk(^_^)consistent value(^_^)(^_^)(^_^)\",\"ownerRestrictions\":null},\"description\":null,\"policyHash\":\"2877a1ace4cfa6427370fd39b254ce0ea75dc22cb024a2f857e033c82a987f9a\"}]"
      }
    ]
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/dataSource/16/visibilityReport
    {
      "noVisibilities": true,
      "dataSourceVisibilitiesCount": 0,
      "userVisibilitiesCount": 0,
      "masked": [
        {
          "type": "Consistent Value",
          "metadata": {
            "constant": null
          },
          "name": "WS_SOLD_DATE_SK"
        },
        {
          "type": "Consistent Value",
          "metadata": {
            "constant": null
          },
          "name": "WS_BILL_CUSTOMER_SK"
        }
      ],
      "dataSource": 16,
      "dataSourceName": "Web Sales",
      "additionalFilters": {},
      "allowMaskedJoins": false,
      "policySet": "[{\"type\":\"masking\",\"rules\":[{\"type\":\"masking\",\"config\":{\"fields\":[\"WS_BILL_CUSTOMER_SK\"],\"maskingConfig\":{\"type\":\"Consistent Value\",\"metadata\":{\"constant\":null}}},\"exceptions\":null,\"ruleAppliedForUser\":true}],\"global\":{\"id\":9,\"tag\":\"Confidential\",\"live\":true,\"name\":\"Data Policy\",\"reason\":null,\"staged\":false,\"deleted\":false,\"conflict\":null,\"disabled\":false,\"metadata\":null,\"template\":false,\"createdAt\":\"2022-08-09T17:23:02.634Z\",\"createdBy\":\"jane\",\"policyKey\":\"Data Policy\",\"updatedAt\":\"2022-08-09T17:23:02.634Z\",\"clonedFrom\":null,\"certification\":null,\"createdByName\":\"jane\",\"changedOnApply\":[\"dataTypeMismatch\"],\"parentPolicyId\":null,\"systemGenerated\":false,\"originalPolicyId\":\"masking(^_^)data policy(^_^)ws_bill_customer_sk(^_^)consistent value(^_^)(^_^)(^_^)\",\"ownerRestrictions\":null},\"description\":null,\"policyHash\":\"3a2faac13e332cca1829ed773afa298a5455ac5bb54e68c53ae00991575d2a4b\"},{\"type\":\"masking\",\"rules\":[{\"type\":\"masking\",\"config\":{\"fields\":[\"WS_SOLD_DATE_SK\"],\"maskingConfig\":{\"type\":\"Consistent Value\",\"metadata\":{\"constant\":null}}},\"exceptions\":null,\"ruleAppliedForUser\":true}],\"global\":{\"id\":9,\"tag\":\"Confidential\",\"live\":true,\"name\":\"Data Policy\",\"reason\":null,\"staged\":false,\"deleted\":false,\"conflict\":null,\"disabled\":false,\"metadata\":null,\"template\":false,\"createdAt\":\"2022-08-09T17:23:02.634Z\",\"createdBy\":\"jane\",\"policyKey\":\"Data Policy\",\"updatedAt\":\"2022-08-09T17:23:02.634Z\",\"clonedFrom\":null,\"certification\":null,\"createdByName\":\"jane\",\"changedOnApply\":[\"dataTypeMismatch\"],\"parentPolicyId\":null,\"systemGenerated\":false,\"originalPolicyId\":\"masking(^_^)data policy(^_^)ws_sold_date_sk(^_^)consistent value(^_^)(^_^)(^_^)\",\"ownerRestrictions\":null},\"description\":null,\"policyHash\":\"2877a1ace4cfa6427370fd39b254ce0ea75dc22cb024a2f857e033c82a987f9a\"}]"
    }
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://your-immuta-url.com/dataSource/subscribe?dataSourceId=22
    {
      "dataSourceIds": [
        22
      ],
      "metadata": {},
      "approvals": [
        {
          "requiredPermission": "Owner",
          "specificApproverRequired": false,
          "specificApprover": 2,
          "ownerModelId": 23
        }
      ],
      "groupId": 12
    }
    {
      "inError": [],
      "success": [{
        "id": 64,
        "modelId": "22",
        "modelType": "datasource",
        "state": "subscribed",
        "metadata": {},
        "admin": null,
        "denialReasoning": null,
        "profile": 2,
        "group": null,
        "expiration": null,
        "acknowledgeRequired": false,
        "createdAt": "2021-08-26T16:36:09.587Z",
        "updatedAt": "2021-08-26T16:36:09.587Z",
        "approved": true
      }]
    }
    curl \
       --request POST \
       --header "Content-Type: application/json" \
       --header "Authorization: Bearer dea464c07bd07300095caa8" \
       --data @example-payload.json \
        https://your-immuta-url.com/dataSource/23/reverseMask
    {
      "column": "cc_county",
      "values": ["WlRObU9ERTVNVE0yTVdabU9XVXdPQT09OktYN2lkNEZqZjlaWUluck8xTnVHOGlSN25wWmdudVZjbnZES1ArUkxhMGc9"],
      "unmaskReasoning": "Marketing project",
      "unmaskingUsers": [1]
    }
    {
      "id": 1,
      "requestingUserProfile": 13,
      "dataSourceId": 12,
      "reason": "Marketing Campaign",
      "metadata": {
        "salt": "**********87",
        "column": "cc_county",
        "values": ["WlRObU9ERTVNVE0yTVdabU9XVXdPQT09OktYN2lkNEZqZjlaWUluck8xTnVHOGlSN25wWmdudVZjbnZES1ArUkxhMGc9"],
        "maskingConfig": {
          "type": "Reversible",
          "metadata": {}
        }
      },
      "type": "unmask",
      "state": "pending",
      "createdAt": "2021-10-27T20:35:48.253Z",
      "updatedAt": "2021-10-27T20:35:48.253Z"
    }
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://your-immuta-url.com/dataSource/22/access
    {
      "profileId": 3,
      "state": "subscribed"
    }
    {
      "id": 19,
      "modelId": "1",
      "modelType": "datasource",
      "state": "subscribed",
      "metadata": null,
      "admin": 2,
      "denialReasoning": null,
      "profile": 3,
      "group": null,
      "expiration": null,
      "acknowledgeRequired": false,
      "createdAt": "2021-09-21T14:24:12.528Z",
      "updatedAt": "2021-09-21T14:24:12.528Z",
      "approved": true
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/dataSource/tasks/pending
    {
      "outgoing": [],
      "incoming": [{
        "fullCount": 1,
        "dataSource": {
          "id": 11,
          "name": "Public Customer"
        },
        "isOutgoing": false,
        "rows": [{
          "id": 1,
          "state": "pending",
          "type": "columnAdded",
          "reason": "Immuta has detected a new column \"org\" in the remote table and has added it to \"Public Customer\"",
          "targetNames": [
            "Katie"
          ],
          "targetEmails": [
            "[email protected]"
          ],
          "requester": {
            "name": "Immuta System Account",
            "id": 1,
            "email": null
          },
          "dataSource": {
            "id": 11,
            "name": "Public Customer"
          },
          "createdAt": "2024-08-06T14:37:09.279+00:00",
          "metadata": {
            "colName": "org",
            "colType": "VARCHAR(16777216)"
          },
          "isOutgoing": false
        }]
      }]
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/dataSource/tasks/7
    {
      "result": {
        "unmaskPairs": [
          {
            "masked": "TnpjNFpXSXdOR1pqWkdNeE5EYzJPQT09OktaWjJEVldXZVluTmQ2SUVQdW1MajJtVTdqL2ZBT1JlaGFUUHJidmhkWmM9",
            "unmasked": "[email protected]"
          }
        ],
        "column": "email"
      }
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/dataSource/23/tasks?sortOrder=desc
    {
      "hits": [
        {
          "fullCount": 2,
          "id": 6,
          "state": "completed",
          "type": "columnAdded",
          "reason": "Immuta has detected a new column \"org\" in the remote table and has added it to \"Public Customer\"",
          "targetNames": [
            "John"
          ],
          "targetEmails": [
            "[email protected]"
          ],
          "requester": {
            "name": "Immuta System Account",
            "id": 1,
          },
          "dataSource": {
            "id": 11,
            "name": "Public Customer"
          },
          "createdAt": "2021-10-12T15:48:23.095Z"
        },
        {
          "fullCount": 2,
          "id": 7,
          "state": "completed",
          "type": "columnAdded",
          "reason": "Immuta has detected a new column \"org\" in the remote table and has added it to \"Public Fake Medical Claims 2017\"",
          "targetNames": [
            "John"
          ],
          "targetEmails": [
            "[email protected]"
          ],
          "requester": {
            "name": "Immuta System Account",
            "id": 1
          },
          "dataSource": {
            "id": 3,
            "name": "Public Fake Medical Claims 2017"
          },
          "createdAt": "2021-10-12T18:56:22.954Z"
        }
      ],
      "count": 2
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://your-immuta-url.com/dataSource/23/access/95
    {
      "state": "subscribed"
    }
    {
      "id": 95,
      "modelId": "3",
      "modelType": "datasource",
      "state": "subscribed",
      "metadata": {},
      "admin": 2,
      "profile": 3,
      "group": null,
      "expiration": null,
      "acknowledgeRequired": false,
      "createdAt": "2021-10-12T15:40:13.878Z",
      "updatedAt": "2021-10-12T16:10:46.801Z",
      "originalState": "expert",
      "approved": true
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://your-immuta-url.com/dataSource/22
    {
      "documentation": "# Public Credit Accounts\nThis request updates the data source documentation."
    }
    {
      "name": "Public Credit Accounts",
      "recordFormat": "Not Provided",
      "description": null,
      "policyHandler": {
        "handlerId": 21,
        "visibilitySchema": {
          "fields": [],
          "version": "2021-09-15T17:44:20.678Z"
        },
        "previousHandlerId": 20,
        "dataSourceId": 1
      },
      "sqlSchemaName": "public",
      "sqlTableName": "credit_accounts",
      "blobHandler": {
        "url": "https://1.1.1.1:1111/snowflake/handler/1",
        "ca": {
          "name": "Certificate Authority Bundle"
        },
        "manualDictionary": false
      },
      "createdBy": 2,
      "deleted": false,
      "type": "queryable",
      "recordCount": 0,
      "rowCount": "100000",
      "documentation": "# Public Credit Accounts\nThis request updates the data source documentation.",
      "statsExpiration": "2021-09-22T13:51:46.646Z",
      "id": 1,
      "blobHandlerType": "Snowflake",
      "policyHandlerType": "Builder",
      "subscriptionType": "approval",
      "subscriptionPolicy": {
        "type": "subscription",
        "approvals": [{
          "requiredPermission": "OWNER",
          "specificApproverRequired": false
        }]
      },
      "globalPolicies": null,
      "status": "failed",
      "statusInfo": {
        "sql": {
          "status": "passed",
          "message": "Passed"
        },
        "stats": {
          "status": "passed",
          "lastAttempted": "2021-09-21T13:51:46.674Z"
        },
        "fingerprint": {
          "status": "passed",
          "lastAttempted": "2021-09-09T14:12:25.177Z"
        },
        "lastAttempt": {
          "date": "2021-09-20T19:35:21.929Z"
        },
        "globalPolicy": {
          "status": "passed",
          "lastAttempted": "2021-09-17T19:07:38.092Z"
        },
        "highCardinality": {
          "status": "failed",
          "message": "Error could not connect to remote database",
          "lastAttempted": "2021-09-20T16:43:19.426Z"
        }
      },
      "expiration": null,
      "catalogMetadata": null,
      "workspace": null,
      "seeded": false,
      "schemaEvolutionId": 1,
      "columnEvolutionEnabled": true,
      "createdAt": "2021-09-09T14:12:09.511Z",
      "updatedAt": "2021-09-21T13:52:42.908Z"
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://your-immuta-url.com/dataSource/bulk/tags
    {
      "ids": [49, 50],
      "update": {
        "tags": [{
          "name": "Address.email",
          "source": "curated"
        }]
      }
    }
    {
      "bulkId": "bulk_ds_update_4896d300e04c4a8f89493ebf125c5c6b",
      "jobsCreated": 2
    }
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer <TOKEN>" \
        --data @example-payload.json \
        https://your-immuta-url.com/dataSource/bulkRefreshViews
    {
      "dataSourceIds": [202]
    }
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/dataSource/23/blobs
    [
      {
        "blobId": "testblob",
        "filename": "testfile",
        "tags": [
          "update"
        ],
        "visibility": {},
        "metadata": {},
        "date": "2021-10-21",
        "filesize": 2
      }
    ]
    {
      "blobsWithoutIds": 0,
      "blobsInError": [],
      "blobsInserted": [
          "string"
      ],
      "tags": [
          "string"
      ]
    }
    curl \
        --request POST \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json
        https://your-immuta-url.com/dataSource/23/persistBlob
    {
      "blobId": "test/pov-queries-2.dbc",
      "filename": "pov-queries",
      "date": "2021-10-26",
      "file": "pov-queries.dbc"
    }
    {
      "blobsWithoutIds": 0,
      "blobsInError": [],
      "blobsInserted": ["test/pov-queries.dbc"],
      "tags": []
    }
    curl \
        --request PUT \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        --data @example-payload.json \
        https://your-immuta-url.com/dataSource/detectRemoteChanges
    {
      "hostname": "organization.us-east-1.snowflakecomputing.com"
    }
    {
      "database": "public"
    }
    {
      "database": "public",
      "table": "healthcare"
    }
    {
      "bulkId": "31ab4312-b90a-49a6-baf8-70f87cd92a89"
    }
    {
      "bulkId": "5d129011-6254-413d-a365-6e394c06e277"
    }
    {
      "bulkId": "5d129011-6254-413d-a365-6e394c06e277",
      "schemaDetection": {
        "jobs": ["7d129033-6254-413d-a345-9o3242c06f242"]
      },
      "columnDetection" : {
        "jobs": ["8d129033-6254-413d-a345-9o3123c06f123"]
      }
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/dataSource/23/test
    {
      "sql": {
          "status": "passed",
          "message": "Passed"
      },
      "stats": {
          "status": "passed",
          "lastAttempted": "2021-09-09T13:43:43.948Z"
      },
      "fingerprint": {
          "status": "passed",
          "lastAttempted": "2021-07-22T14:12:01.525Z"
      },
      "lastAttempt": {
          "date": "2021-09-09T16:47:05.173Z"
      },
      "columnEvolution": {
          "status": "passed",
          "lastAttempted": "2021-09-08T16:36:05.557Z"
      },
      "highCardinality": {
          "status": "passed",
          "lastAttempted": "2021-07-22T14:11:58.439Z"
      },
      "schemaEvolution": {
          "status": "passed",
          "lastAttempted": "2021-09-08T16:35:57.867Z"
      },
      "status": "passed"
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/dataSource/blobHandlerTypes
    {
      "name": "Azure Synapse Analytics",
      "pluginType": "odbcHandler",
      "clientUrl": "/asa",
      "baseUrl": "https://0.0.0.0:8823/asa",
      "config": {
      "port": 1433,
      "allowSSLToggle": false
      },
      "displayOrder": 41,
      "requiresHashPhraseForDP": true,
      "driver": "Azure Synapse Analytics"
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/dataSource/byPurposes?purposes=Data+Analysis
    [{
      "id": 42,
      "name": "Army Army Records",
      "policyId": 56,
      "restrictions": [{
        "operator": "and",
        "purposes": ["Data Analysis"]
      }]
    }]
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/dataSource/rpc/mine
    {
      "id": 23,
      "name": "Public Record",
      "type": "queryable",
      "sqlTableName": "record",
      "sqlSchemaName": "public",
      "blobHandlerType": "Snowflake",
      "sparkUseJDBC": true
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/dataSource/23/activities
    {
      "count": 3,
      "activities": [{
        "modelType": "datasource",
        "modelId": "23",
        "createdAt": "2021-09-07T16:13:25.197Z",
        "notificationType": "policyUpdated",
        "metadata": {
          "dataSourceName": "Public Foobar",
          "triggeredByGlobal": false,
          "conflictCount": 0,
          "policyType": "data",
          "handlerId": 3,
          "previousHandlerId": 2,
          "dataSourceType": "queryable"
        },
        "read": false,
        "id": 256,
        "updatedAt": "2021-09-07T16:13:25.197Z",
        "actionBy": {
          "id": 2,
          "name": "first last",
          "email": "[email protected]"
        },
        "targetUser": {
          "id": 2,
          "name": "first last",
          "email": "[email protected]"
        }
      }]
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/dataSource/23/contacts
    {
      "type": "profile",
      "id": 23,
      "state": "owner",
      "name": "first last",
      "email": "[email protected]",
      "profile": 2
    },
    {
      "type": "profile",
      "id": 23,
      "state": "owner",
      "name": "Tommy Test",
      "email": "[email protected]",
      "profile": 3
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/dataSource/4/tags
    {
      "tags": [
        {
          "name": "Discovered.Entity.Medicare Number",
          "source": "curated",
          "modelType": "datasource",
          "modelId": "4",
          "addedBy": 1,
          "deleted": false
        }
      ]
    }
    curl \
        --request GET \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/dataSource/47/gender/unmaskUsers
    [
      {
        "name": "Katie",
        "profileId": 2,
        "iamid": "bim"
      }
    ]
    curl \
        --request DELETE \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/dataSource/23
    {
      "success": true,
      "id": 23,
      "schemaEvolutionId": 1,
      "name": "Public Foobar",
      "disabled": true,
      "handlerDeleteErrorMessage": null
    }
    curl \
        --request DELETE \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/dataSource/tasks/8
    {
      "fullCount": 1,
      "id": 8,
      "state": "pending",
      "type": "columnAdded",
      "reason": "Immuta has detected a new column \"org\" in the remote table and has added it to \"Public Customer\"",
      "targetNames": ["Katie"],
      "targetEmails": ["[email protected]"],
      "requester": {
        "name": "Immuta System Account",
        "id": 1
      },
      "dataSource": {
        "id": 11,
        "name": "Public Customer"
      },
      "createdAt": "2021-10-12T19:28:04.999Z"
    }
    curl \
        --request DELETE \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/dataSource/23/blob/1
    curl \
        --request DELETE \
        --header "Content-Type: application/json" \
        --header "Authorization: Bearer dea464c07bd07300095caa8" \
        https://your-immuta-url.com/dataSource/23/unsubscribe
    {
      "success": true
    }
    /dataSource/{dataSourceId}/lineage/{type}
    /dataSource/{dataSourceId}/blob/{blobId*}
    /dataSource/{dataSourceId}/access
    /dataSource/{dataSourceId}/users/{profileId}/policyInfo
    /dataSource/{dataSourceId}/users/{profileId}/visibilityReport
    /dataSource/{dataSourceId}/visibilityReport
    schema monitoring
    schema monitoring
    /dataSource/{dataSourceId}/persistBlob
    /dataSource/detectRemoteChanges
    /dataSource/{dataSourceId}
    ephemeral overrides
    /dataSource/{dataSourceId}/activities
    /dataSource/{dataSourceId}/contacts
    /dataSource/{dataSourceId}/tags
    /dataSource/{dataSourceId}/{columnName}/unmaskUsers