arrow-left

All pages
gitbookPowered by GitBook
1 of 2

Loading...

Loading...

OAA Operations

API calls for managing and updating custom data sources

Use these REST API calls to manage and update custom providers and data sources with Open Authorization API.

hashtag
Create Custom Provider

Creates a custom provider and returns the provider ID.

hashtag
List Custom Providers

Lists all configured custom providers.

hashtag
Get Custom Provider by ID

Returns details for an individual custom provider.

hashtag
Delete Custom Provider

Delete a custom provider by ID.

hashtag
List Custom Provider Datasources

Return all data sources for a Custom Provider ID.

You can constrain large responses by adding a filter to the request query string. Include the operator (eq), and value, for example:

CURL <VEZA_URL>/api/v1/providers/custom?filter=name eq "GitHub"&order_by=state

circle-info

Veza expects that spaces in URLS are encoded as "+" (for example?name+eq+"GitHub"&order_by=state). Note that some libraries and clients will encode spaces as "%2B" by default, which will cause errors unless you override this behavior.

hashtag
Create Custom Provider Datasource

Register a new datasource for a custom provider. There can be more than one datasource for a single provider.

hashtag
Get Datasource by ID

Returns details for a single datasource.

hashtag
Delete Custom Provider Datasource

Unbind a datasource from a custom provider, and delete it.

circle-info

You can also delete OAA datasources from the Veza web interface. On the Integrations page, find the OAA datasource in the list and click the action menu (⋮) to access the Delete option.

hashtag
Push Custom Provider Datasource

To push authorization metadata for a custom datasource, you can specify the source and provider IDs, and upload a payload with the entities and permissions in JSON format.

A warning is returned for any non-critical errors during payload processing. These can indicate incomplete or inaccurate data in the payload that do not prevent processing, but may warrant attention.

hashtag
Push Custom Provider Datasource CSV

For , this endpoint pushes CSV data to an existing datasource. Typically, you will first create the integration and define column mappings using the "Add Integration" flow in Veza.

CSV data must base64 encoded into the JSON body of the request.

hashtag
Compression

The populated template can be compressed and encoded, for significantly reduced payload size.

  • Specify the compression_type. Currently supported: GZIP.

  • If compression is selected, Veza will expect the payload json_data as a compressed, base64-encoded string.

To compress using shell commands:

Size is typically not an issue when updating custom datasources. However, you may want to compress large payloads. The maximum body size is 100MB (compressed or uncompressed).

hashtag
Escaping unsafe characters

Veza expects the populated template as a single JSON string, enclosed in the request body json_data field. Any "s and non-ASCII characters must be escaped.

To convert a template to JSON string using Python, the json.dumps() method could be used:

hashtag
Custom Provider Icons

You can optionally add an icon for your custom provider by uploading a PNG or SVG file (less than 64kb) as a base64-encoded string:

hashtag
Create Custom Provider Icon

Upload a custom icon to display for an OAA provider.

hashtag
Get Custom Provider Icon

Return the type and string-encoded icon for a custom provider.

hashtag
Delete Custom Provider Icon

Delete the icon associated with an OAA provider.

CSV Upload Integrations
{
    "csv_data": "abc123="
}
CSV_PAYLOAD=$(cat my_app_data.csv | base64)
curl --location https://example.vezacloud.com/api/v1/providers/custom/40bdd318-d320-4574-be90-ca556d59889a/datasources/9bc29dc6-8cd0-4926-992e-7d720305ae2f:push_csv \
--request POST \
--header "Content-Type: application/json" \
--header "Authorization: Bearer $VEZA_API_KEY" \
--data "{\"csv_data\": \"${CSV_PAYLOAD}\"}"
cat app_payload.json | gzip | base64 -o json_data.b64
payload = {"id": provider_id,
           "data_source_id": data_source_id,
           "json_data": json.dumps(template_contents)
           }
curl -X POST '{{VezaURL}}/api/v1/providers/custom/962d5eff-285c-4b08-a54e-400eead1e680:icon' \
-H "authorization: Bearer $API_KEY" \
-d '{"icon_base64": "PHN2ZyBmaWxsPSIjMDAwMDAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciICB2aWV3Qm94PSIwIDAgNjQgNjQiIHdpZHRoPSIzMnB4IiBoZWlnaHQ9IjMycHgiPjxwYXRoIGQ9Ik0zMiA2QzE3LjY0MSA2IDYgMTcuNjQxIDYgMzJjMCAxMi4yNzcgOC41MTIgMjIuNTYgMTkuOTU1IDI1LjI4Ni0uNTkyLS4xNDEtMS4xNzktLjI5OS0xLjc1NS0uNDc5VjUwLjg1YzAgMC0uOTc1LjMyNS0yLjI3NS4zMjUtMy42MzcgMC01LjE0OC0zLjI0NS01LjUyNS00Ljg3NS0uMjI5LS45OTMtLjgyNy0xLjkzNC0xLjQ2OS0yLjUwOS0uNzY3LS42ODQtMS4xMjYtLjY4Ni0xLjEzMS0uOTItLjAxLS40OTEuNjU4LS40NzEuOTc1LS40NzEgMS42MjUgMCAyLjg1NyAxLjcyOSAzLjQyOSAyLjYyMyAxLjQxNyAyLjIwNyAyLjkzOCAyLjU3NyAzLjcyMSAyLjU3Ny45NzUgMCAxLjgxNy0uMTQ2IDIuMzk3LS40MjYuMjY4LTEuODg4IDEuMTA4LTMuNTcgMi40NzgtNC43NzQtNi4wOTctMS4yMTktMTAuNC00LjcxNi0xMC40LTEwLjQgMC0yLjkyOCAxLjE3NS01LjYxOSAzLjEzMy03Ljc5MkMxOS4zMzMgMjMuNjQxIDE5IDIyLjQ5NCAxOSAyMC42MjVjMC0xLjIzNS4wODYtMi43NTEuNjUtNC4yMjUgMCAwIDMuNzA4LjAyNiA3LjIwNSAzLjMzOEMyOC40NjkgMTkuMjY4IDMwLjE5NiAxOSAzMiAxOXMzLjUzMS4yNjggNS4xNDUuNzM4YzMuNDk3LTMuMzEyIDcuMjA1LTMuMzM4IDcuMjA1LTMuMzM4LjU2NyAxLjQ3NC42NSAyLjk5LjY1IDQuMjI1IDAgMi4wMTUtLjI2OCAzLjE5LS40MzIgMy42OTdDNDYuNDY2IDI2LjQ3NSA0Ny42IDI5LjEyNCA0Ny42IDMyYzAgNS42ODQtNC4zMDMgOS4xODEtMTAuNCAxMC40IDEuNjI4IDEuNDMgMi42IDMuNTEzIDIuNiA1Ljg1djguNTU3Yy0uNTc2LjE4MS0xLjE2Mi4zMzgtMS43NTUuNDc5QzQ5LjQ4OCA1NC41NiA1OCA0NC4yNzcgNTggMzIgNTggMTcuNjQxIDQ2LjM1OSA2IDMyIDZ6TTMzLjgxMyA1Ny45M0MzMy4yMTQgNTcuOTcyIDMyLjYxIDU4IDMyIDU4IDMyLjYxIDU4IDMzLjIxMyA1Ny45NzEgMzMuODEzIDU3Ljkzek0zNy43ODYgNTcuMzQ2Yy0xLjE2NC4yNjUtMi4zNTcuNDUxLTMuNTc1LjU1NEMzNS40MjkgNTcuNzk3IDM2LjYyMiA1Ny42MSAzNy43ODYgNTcuMzQ2ek0zMiA1OGMtLjYxIDAtMS4yMTQtLjAyOC0xLjgxMy0uMDdDMzAuNzg3IDU3Ljk3MSAzMS4zOSA1OCAzMiA1OHpNMjkuNzg4IDU3LjljLTEuMjE3LS4xMDMtMi40MTEtLjI4OS0zLjU3NC0uNTU0QzI3LjM3OCA1Ny42MSAyOC41NzEgNTcuNzk3IDI5Ljc4OCA1Ny45eiIvPjwvc3ZnPg=="}'

OAA Push API

Methods for working with Custom Data Providers and Sources

This document provides a basic overview of the API requests for creating and updating an OAA data source. These steps and API calls can be adapted for your client or programming language of choice. You can also use the oaaclient Python module to handle Veza authentication, register the data source, and push the populated template.

hashtag
Overview

While registering sources and pushing authorization metadata with Open Authorization APIarrow-up-right is relatively straightforward, it is important to understand how Veza organizes custom providers and data sources as endpoints:

  • You will first register a new custom application provider with a (specifying the app name and template).

    • The determines the application type of the provider's custom data sources (identity_provider or application).

You should typically name the provider based on the generic application provider (such as GitHub) and the data source after the top-level instance (such as GitHub - Organization). See the for more information about parsing and identifying entities using metadata from the source application.

hashtag
Authentication

Your requests will need to include a Veza API Key. For OAA APIs, using a is recommended. Provide it as the bearer auth token in the header of each request, for example:

Follow best practices for managing API keys: Do not save credentials in connector code. Consider using a secrets manager to securely store API keys and make them available at run time.

hashtag
First Run

To add a custom application, you will need to:

  • Create a new custom provider and data source.

  • push the entity and authorization data in a JSON payload.

hashtag
Create a provider using the "Custom Application" template

Use to register a new top-level custom provider:

The response will return the Provider's ID, which you will need to create and manage the data sources:

  • Name the provider generically after the application or SaaS provider. Use the same Provider for all data sources for that application.

  • If you are creating providers dynamically, your OAA integration should check if the provider and data source exists before creating a new one.

hashtag
Create a Data Source for the Provider

Each provider needs at least one data source. Create one with

The response will include the data source ID:

  • Datasources should be unique to the data collected by an OAA integration instance. For example, if an application has a "prod" and "dev" instance, creating a datasource for each will enable independent updates to each environment.

  • Name the data source uniquely based on the application instance to discover. Try to include the hostname or organization name in the data source. For example, don't use "GitHub" use "GitHub - Acme Inc" or "Portal - prod.corp.com"

  • Note that a provider id

hashtag
Push data source metadata

Once the data source and provider are active, publish the payload with . The request body must include the Provider ID and Data Source ID.

json_data must contain the populated OAA template as a single JSON string (escaping any unsafe characters such as ").

hashtag
Get Custom Providers

hashtag
Get Custom Data Sources

hashtag
Update Custom Data Source

Specifying the Provider ID and Data Source ID, perform the same used for the initial push.

To update an existing data source, use the operations and operations to get the provider and data source IDs.

Each custom provider can have one or more data sources (such as different instances or domains), generated using .

  • The populated template can describe additional resources and sub-resources, such as individual databases, repositories, or views.

  • You can for each custom data source.

  • All custom data sources are shown on the Configuration > Apps & Data Sources menu, and can be retrieved using .

  • is required in both the request path and body.
    POST request to /api/providers/custom
    templatearrow-up-right
    Core Conceptsarrow-up-right
    Team API key
    Create Custom Provider
    Create Custom Provider Datasource
    Push Custom Provider Datasource
    post operation
    List Provider
    List Datasources
    curl -X GET "https://$VEZA_URL/api/v1/providers/custom" \
    -H "authorization: Bearer $API_KEY"
    curl -X POST "https://$VEZA_URL/api/v1/providers/custom" \
    -d '{"name":"DemoApp","custom_template":"application"}'
    {
      "value": {
        "id": "a6ef8d8d-d17b-4491-a67a-635ad70f1ba9",
        "name": "DemoApp",
        "custom_template": "application",
        "state": "ENABLED",
        "application_types": [],
        "resource_types": [],
        "idp_types": [],
        "schema_definition_json": "e30="
      }
    }
    curl -X POST "https://${VEZA_URL}/api/v1/providers/custom/${PROVIDER_ID}/datasources" \
    -H 'accept: application/json' \
    -H 'authorization: Bearer '${API_KEY} \
    -d '{"id": "<PROVIDER ID>", "name":"DemoApp - Documentation Datasource"}'
    {
      "value": {
        "id": "1bd31da0-64ee-4dfe-82c9-cb9f0f2fc369",
        "name": "DemoApp - Documentation Datasource"
      }
    }
    body.json
    {
      "id": "532f6fe3-189f-4576-afdf-8913088961e4",
      "compression_type": "none",
      "data_source_id": "b6a32af6-b854-47e1-8325-e5984f78bb4d",
      "json_data": "{\"name\":\"CustomApp\",\"application_type\"...}"
    }
    curl -X POST "https://$VEZA_URL/api/v1/providers/custom/$PROVIDER_ID/datasources/$DATASOURCE_ID:push" \
    -H 'accept: application/json' \
    -H 'authorization: Bearer '$API_KEY \
    --compressed --data-binary @body.json
    curl -X GET "https://$VEZA_URL/api/v1/providers/custom" \
    -H 'accept: application/json' \
    -H 'authorization: Bearer '$API_KEY
    curl -X GET "https://$VEZA_URL/api/v1/providers/custom/$PROVIDER_ID" \
    -H 'accept: application/json' \
    -H 'authorization: Bearer '$API_KEY
    curl -X POST "https://$VEZA_URL/api/v1/providers/custom/$PROVIDER_ID/datasources/$DATASOURCE_ID:push" \
    -H 'accept: application/json' \
    -H 'authorization: Bearer '$API_KEY \
    --compressed --data-binary @payload.json
    Create Datasource
    push authorization metadata
    List Custom Provider Datasources
    post
    Authorizations
    AuthorizationstringRequired

    Veza API key for authentication. Generate keys in Administration > API Keys.

    Body
    namestringOptional
    custom_templatestringOptional
    provisioningbooleanOptional
    push_typeinteger · enumOptional
    internal_app_namestringOptional
    configuration_jsonstringOptional
    data_plane_idstringOptional
    custom_templatesstring[]Optional
    external_lifecycle_management_typeinteger · enumOptional

    For external OAA, how to manage lifecycle management requests

    Responses
    chevron-right
    200

    OK

    application/json
    chevron-right
    default

    Default error response

    application/json
    post
    /api/v1/providers/custom
    get
    Authorizations
    AuthorizationstringRequired

    Veza API key for authentication. Generate keys in Administration > API Keys.

    Query parameters
    filterstringOptional
    order_bystringOptional
    page_sizeinteger · int32Optional

    The maximum number of results to be returned. Fewer results may be returned even when more pages exist.

    page_tokenstringOptional

    The token specifying the specific page of results to retrieve.

    Responses
    chevron-right
    200

    OK

    application/json
    chevron-right
    default

    Default error response

    application/json
    get
    /api/v1/providers/custom
    get
    Authorizations
    AuthorizationstringRequired

    Veza API key for authentication. Generate keys in Administration > API Keys.

    Path parameters
    idstringRequired
    Responses
    chevron-right
    200

    OK

    application/json
    chevron-right
    default

    Default error response

    application/json
    get
    /api/v1/providers/custom/{id}
    delete
    Authorizations
    AuthorizationstringRequired

    Veza API key for authentication. Generate keys in Administration > API Keys.

    Path parameters
    idstringRequired
    Responses
    chevron-right
    200

    OK

    application/json
    Responseobject
    chevron-right
    default

    Default error response

    application/json
    delete
    /api/v1/providers/custom/{id}
    get
    Authorizations
    AuthorizationstringRequired

    Veza API key for authentication. Generate keys in Administration > API Keys.

    Path parameters
    idstringRequired
    Query parameters
    filterstringOptional
    order_bystringOptional
    page_sizeinteger · int32Optional

    The maximum number of results to be returned. Fewer results may be returned even when more pages exist.

    page_tokenstringOptional

    The token specifying the specific page of results to retrieve.

    Responses
    chevron-right
    200

    OK

    application/json
    chevron-right
    default

    Default error response

    application/json
    get
    /api/v1/providers/custom/{id}/datasources
    post
    Authorizations
    AuthorizationstringRequired

    Veza API key for authentication. Generate keys in Administration > API Keys.

    Path parameters
    idstringRequired
    Body
    idstringOptional
    namestringOptional
    custom_templatestringOptional
    Responses
    chevron-right
    200

    OK

    application/json
    chevron-right
    default

    Default error response

    application/json
    post
    /api/v1/providers/custom/{id}/datasources
    get
    Authorizations
    AuthorizationstringRequired

    Veza API key for authentication. Generate keys in Administration > API Keys.

    Path parameters
    idstringRequired
    data_source_idstringRequired
    Responses
    chevron-right
    200

    OK

    application/json
    chevron-right
    default

    Default error response

    application/json
    get
    /api/v1/providers/custom/{id}/datasources/{data_source_id}
    delete
    Authorizations
    AuthorizationstringRequired

    Veza API key for authentication. Generate keys in Administration > API Keys.

    Path parameters
    idstringRequired
    data_source_idstringRequired
    Responses
    chevron-right
    200

    OK

    application/json
    Responseobject
    chevron-right
    default

    Default error response

    application/json
    delete
    /api/v1/providers/custom/{id}/datasources/{data_source_id}
    post
    Authorizations
    AuthorizationstringRequired

    Veza API key for authentication. Generate keys in Administration > API Keys.

    Path parameters
    idstringRequired
    data_source_idstringRequired
    Body
    idstringOptional
    data_source_idstringOptional
    json_datastringOptional
    compression_typeinteger · enumOptional
    priority_pushbooleanOptional
    Responses
    chevron-right
    200

    OK

    application/json
    chevron-right
    default

    Default error response

    application/json
    post
    /api/v1/providers/custom/{id}/datasources/{data_source_id}:push
    post
    Authorizations
    AuthorizationstringRequired

    Veza API key for authentication. Generate keys in Administration > API Keys.

    Path parameters
    idstringRequired
    data_source_idstringRequired
    Body
    idstringOptional
    data_source_idstringOptional
    csv_datastringOptional
    namestringOptional
    typestringOptional
    compression_typeinteger · enumOptional
    priority_pushbooleanOptional
    Responses
    chevron-right
    200

    OK

    application/json
    chevron-right
    default

    Default error response

    application/json
    post
    /api/v1/providers/custom/{id}/datasources/{data_source_id}:push_csv
    post
    Authorizations
    AuthorizationstringRequired

    Veza API key for authentication. Generate keys in Administration > API Keys.

    Path parameters
    idstringRequired
    data_source_idstringRequired
    Body
    idstringOptional
    data_source_idstringOptional
    json_datastringOptional
    compression_typeinteger · enumOptional
    priority_pushbooleanOptional
    Responses
    chevron-right
    200

    OK

    application/json
    chevron-right
    default

    Default error response

    application/json
    post
    /api/v1/providers/custom/{id}/datasources/{data_source_id}:push
    post
    Authorizations
    AuthorizationstringRequired

    Veza API key for authentication. Generate keys in Administration > API Keys.

    Path parameters
    idstringRequired
    data_source_idstringRequired
    Body
    idstringOptional
    data_source_idstringOptional
    csv_datastringOptional
    namestringOptional
    typestringOptional
    compression_typeinteger · enumOptional
    priority_pushbooleanOptional
    Responses
    chevron-right
    200

    OK

    application/json
    chevron-right
    default

    Default error response

    application/json
    post
    /api/v1/providers/custom/{id}/datasources/{data_source_id}:push_csv
    post
    Authorizations
    AuthorizationstringRequired

    Veza API key for authentication. Generate keys in Administration > API Keys.

    Path parameters
    idstringRequired
    Body
    idstringOptional
    icon_base64stringOptional
    Responses
    chevron-right
    200

    OK

    application/json
    Responseobject
    chevron-right
    default

    Default error response

    application/json
    post
    /api/v1/providers/custom/{id}:icon
    get
    Authorizations
    AuthorizationstringRequired

    Veza API key for authentication. Generate keys in Administration > API Keys.

    Path parameters
    idstringRequired
    Responses
    chevron-right
    200

    OK

    application/json
    chevron-right
    default

    Default error response

    application/json
    get
    /api/v1/providers/custom/{id}:icon
    get
    Authorizations
    AuthorizationstringRequired

    Veza API key for authentication. Generate keys in Administration > API Keys.

    Query parameters
    app_or_idp_typestringOptionalDeprecated
    custom_schema_typestringOptional
    node_typestringOptional
    Responses
    chevron-right
    200

    OK

    application/json
    chevron-right
    default

    Default error response

    application/json
    get
    /api/v1/providers/custom:icon
    delete
    Authorizations
    AuthorizationstringRequired

    Veza API key for authentication. Generate keys in Administration > API Keys.

    Path parameters
    idstringRequired
    Responses
    chevron-right
    200

    OK

    application/json
    Responseobject
    chevron-right
    default

    Default error response

    application/json
    delete
    /api/v1/providers/custom/{id}:icon
    {
      "value": {
        "id": "text",
        "external_id": "text",
        "name": "text",
        "custom_template": "text",
        "custom_templates": [
          "text"
        ],
        "state": 1,
        "application_types": [
          "text"
        ],
        "idp_types": [
          "text"
        ],
        "file_system_types": [
          "text"
        ],
        "hris_types": [
          "text"
        ],
        "principal_types": [
          "text"
        ],
        "schema_definition_json": "text",
        "provisioning": true,
        "push_type": 1,
        "rbac_id": "text",
        "internal_app_name": "text",
        "configuration_json": "text",
        "data_plane_id": "text",
        "lifecycle_management_state": 1,
        "team_id": "text",
        "csv_mapping_configuration": {
          "template_type": "text",
          "column_mappings": [
            {
              "column_name": "text",
              "destination_type": "text",
              "destination_property": "text",
              "custom_property": {
                "name": "text",
                "type": 1,
                "lcm_unique_identifier": true
              },
              "as_list": true,
              "template": "text",
              "property_type": 1,
              "is_required": true
            }
          ],
          "application": {
            "application_name": "text",
            "application_type": "text",
            "identity": [
              "text"
            ],
            "resource_type": "text"
          },
          "advanced": {
            "list_delimiter": "text"
          },
          "idp": {
            "idp_type": "text",
            "domain": "text"
          },
          "hris": {
            "hris_name": "text",
            "hris_type": "text",
            "hris_url": "text",
            "hris_identity_mapping": {
              "mappings": [
                {
                  "destination_datasource_type": "text",
                  "destination_datasource_oaa_app_type": "text",
                  "type": 1,
                  "mode": 1,
                  "transformations": [
                    1
                  ],
                  "custom_value": "text",
                  "property_matchers": [
                    {
                      "source_property": 1,
                      "destination_property": 1,
                      "custom_source_property": "text",
                      "custom_destination_property": "text"
                    }
                  ],
                  "id_matchers": [
                    {
                      "source_id": "text",
                      "destination_id": "text"
                    }
                  ],
                  "destination_datasources": [
                    {
                      "type": "text",
                      "oaa_app_type": "text"
                    }
                  ]
                }
              ],
              "use_email": true
            },
            "hris_provisioning_source": true
          }
        },
        "secret_references": [
          {
            "id": "text",
            "secret_id": "text",
            "vault_id": "text",
            "vault": {
              "id": "text",
              "name": "text",
              "vault_provider": "text",
              "insight_point_id": "text",
              "deleted": true
            }
          }
        ],
        "external_lifecycle_management_type": 1
      }
    }
    {
      "values": [
        {}
      ],
      "next_page_token": "text",
      "has_more": true
    }
    {
      "value": {
        "id": "text",
        "name": "text"
      }
    }
    {
      "warnings": [
        {
          "message": "text"
        }
      ]
    }
    {
      "warnings": [
        {
          "message": "text"
        }
      ]
    }
    {
      "warnings": [
        {
          "message": "text"
        }
      ]
    }
    {
      "warnings": [
        {
          "message": "text"
        }
      ]
    }
    {}
    POST /api/v1/providers/custom HTTP/1.1
    Host: your-tenant.vezacloud.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    Content-Length: 1328
    
    {
      "name": "text",
      "custom_template": "text",
      "provisioning": true,
      "push_type": 1,
      "internal_app_name": "text",
      "configuration_json": "text",
      "data_plane_id": "text",
      "custom_templates": [
        "text"
      ],
      "csv_mapping_configuration": {
        "template_type": "text",
        "column_mappings": [
          {
            "column_name": "text",
            "destination_type": "text",
            "destination_property": "text",
            "custom_property": {
              "name": "text",
              "type": 1,
              "lcm_unique_identifier": true
            },
            "as_list": true,
            "template": "text",
            "property_type": 1,
            "is_required": true
          }
        ],
        "application": {
          "application_name": "text",
          "application_type": "text",
          "identity": [
            "text"
          ],
          "resource_type": "text"
        },
        "advanced": {
          "list_delimiter": "text"
        },
        "idp": {
          "idp_type": "text",
          "domain": "text"
        },
        "hris": {
          "hris_name": "text",
          "hris_type": "text",
          "hris_url": "text",
          "hris_identity_mapping": {
            "mappings": [
              {
                "destination_datasource_type": "text",
                "destination_datasource_oaa_app_type": "text",
                "type": 1,
                "mode": 1,
                "transformations": [
                  1
                ],
                "custom_value": "text",
                "property_matchers": [
                  {
                    "source_property": 1,
                    "destination_property": 1,
                    "custom_source_property": "text",
                    "custom_destination_property": "text"
                  }
                ],
                "id_matchers": [
                  {
                    "source_id": "text",
                    "destination_id": "text"
                  }
                ],
                "destination_datasources": [
                  {
                    "type": "text",
                    "oaa_app_type": "text"
                  }
                ]
              }
            ],
            "use_email": true
          },
          "hris_provisioning_source": true
        }
      },
      "secret_references": [
        {
          "secret_id": "text",
          "vault_id": "text"
        }
      ],
      "external_lifecycle_management_type": 1
    }
    GET /api/v1/providers/custom HTTP/1.1
    Host: your-tenant.vezacloud.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    {
      "values": [
        {
          "id": "text",
          "external_id": "text",
          "name": "text",
          "custom_template": "text",
          "custom_templates": [
            "text"
          ],
          "state": 1,
          "application_types": [
            "text"
          ],
          "idp_types": [
            "text"
          ],
          "file_system_types": [
            "text"
          ],
          "hris_types": [
            "text"
          ],
          "principal_types": [
            "text"
          ],
          "schema_definition_json": "text",
          "provisioning": true,
          "push_type": 1,
          "rbac_id": "text",
          "internal_app_name": "text",
          "configuration_json": "text",
          "data_plane_id": "text",
          "lifecycle_management_state": 1,
          "team_id": "text",
          "csv_mapping_configuration": {
            "template_type": "text",
            "column_mappings": [
              {
                "column_name": "text",
                "destination_type": "text",
                "destination_property": "text",
                "custom_property": {
                  "name": "text",
                  "type": 1,
                  "lcm_unique_identifier": true
                },
                "as_list": true,
                "template": "text",
                "property_type": 1,
                "is_required": true
              }
            ],
            "application": {
              "application_name": "text",
              "application_type": "text",
              "identity": [
                "text"
              ],
              "resource_type": "text"
            },
            "advanced": {
              "list_delimiter": "text"
            },
            "idp": {
              "idp_type": "text",
              "domain": "text"
            },
            "hris": {
              "hris_name": "text",
              "hris_type": "text",
              "hris_url": "text",
              "hris_identity_mapping": {
                "mappings": [
                  {
                    "destination_datasource_type": "text",
                    "destination_datasource_oaa_app_type": "text",
                    "type": 1,
                    "mode": 1,
                    "transformations": [
                      1
                    ],
                    "custom_value": "text",
                    "property_matchers": [
                      {
                        "source_property": 1,
                        "destination_property": 1,
                        "custom_source_property": "text",
                        "custom_destination_property": "text"
                      }
                    ],
                    "id_matchers": [
                      {
                        "source_id": "text",
                        "destination_id": "text"
                      }
                    ],
                    "destination_datasources": [
                      {
                        "type": "text",
                        "oaa_app_type": "text"
                      }
                    ]
                  }
                ],
                "use_email": true
              },
              "hris_provisioning_source": true
            }
          },
          "secret_references": [
            {
              "id": "text",
              "secret_id": "text",
              "vault_id": "text",
              "vault": {
                "id": "text",
                "name": "text",
                "vault_provider": "text",
                "insight_point_id": "text",
                "deleted": true
              }
            }
          ],
          "external_lifecycle_management_type": 1
        }
      ],
      "next_page_token": "text",
      "has_more": true
    }
    GET /api/v1/providers/custom/{id} HTTP/1.1
    Host: your-tenant.vezacloud.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    {
      "value": {
        "id": "text",
        "external_id": "text",
        "name": "text",
        "custom_template": "text",
        "custom_templates": [
          "text"
        ],
        "state": 1,
        "application_types": [
          "text"
        ],
        "idp_types": [
          "text"
        ],
        "file_system_types": [
          "text"
        ],
        "hris_types": [
          "text"
        ],
        "principal_types": [
          "text"
        ],
        "schema_definition_json": "text",
        "provisioning": true,
        "push_type": 1,
        "rbac_id": "text",
        "internal_app_name": "text",
        "configuration_json": "text",
        "data_plane_id": "text",
        "lifecycle_management_state": 1,
        "team_id": "text",
        "csv_mapping_configuration": {
          "template_type": "text",
          "column_mappings": [
            {
              "column_name": "text",
              "destination_type": "text",
              "destination_property": "text",
              "custom_property": {
                "name": "text",
                "type": 1,
                "lcm_unique_identifier": true
              },
              "as_list": true,
              "template": "text",
              "property_type": 1,
              "is_required": true
            }
          ],
          "application": {
            "application_name": "text",
            "application_type": "text",
            "identity": [
              "text"
            ],
            "resource_type": "text"
          },
          "advanced": {
            "list_delimiter": "text"
          },
          "idp": {
            "idp_type": "text",
            "domain": "text"
          },
          "hris": {
            "hris_name": "text",
            "hris_type": "text",
            "hris_url": "text",
            "hris_identity_mapping": {
              "mappings": [
                {
                  "destination_datasource_type": "text",
                  "destination_datasource_oaa_app_type": "text",
                  "type": 1,
                  "mode": 1,
                  "transformations": [
                    1
                  ],
                  "custom_value": "text",
                  "property_matchers": [
                    {
                      "source_property": 1,
                      "destination_property": 1,
                      "custom_source_property": "text",
                      "custom_destination_property": "text"
                    }
                  ],
                  "id_matchers": [
                    {
                      "source_id": "text",
                      "destination_id": "text"
                    }
                  ],
                  "destination_datasources": [
                    {
                      "type": "text",
                      "oaa_app_type": "text"
                    }
                  ]
                }
              ],
              "use_email": true
            },
            "hris_provisioning_source": true
          }
        },
        "secret_references": [
          {
            "id": "text",
            "secret_id": "text",
            "vault_id": "text",
            "vault": {
              "id": "text",
              "name": "text",
              "vault_provider": "text",
              "insight_point_id": "text",
              "deleted": true
            }
          }
        ],
        "external_lifecycle_management_type": 1
      }
    }
    DELETE /api/v1/providers/custom/{id} HTTP/1.1
    Host: your-tenant.vezacloud.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    {}
    GET /api/v1/providers/custom/{id}/datasources HTTP/1.1
    Host: your-tenant.vezacloud.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    POST /api/v1/providers/custom/{id}/datasources HTTP/1.1
    Host: your-tenant.vezacloud.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    Content-Length: 52
    
    {
      "id": "text",
      "name": "text",
      "custom_template": "text"
    }
    GET /api/v1/providers/custom/{id}/datasources/{data_source_id} HTTP/1.1
    Host: your-tenant.vezacloud.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    {
      "value": {}
    }
    DELETE /api/v1/providers/custom/{id}/datasources/{data_source_id} HTTP/1.1
    Host: your-tenant.vezacloud.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    {}
    POST /api/v1/providers/custom/{id}/datasources/{data_source_id}:push HTTP/1.1
    Host: your-tenant.vezacloud.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    Content-Length: 98
    
    {
      "id": "text",
      "data_source_id": "text",
      "json_data": "text",
      "compression_type": 1,
      "priority_push": true
    }
    POST /api/v1/providers/custom/{id}/datasources/{data_source_id}:push_csv HTTP/1.1
    Host: your-tenant.vezacloud.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    Content-Length: 125
    
    {
      "id": "text",
      "data_source_id": "text",
      "csv_data": "text",
      "name": "text",
      "type": "text",
      "compression_type": 1,
      "priority_push": true
    }
    POST /api/v1/providers/custom/{id}/datasources/{data_source_id}:push HTTP/1.1
    Host: your-tenant.vezacloud.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    Content-Length: 98
    
    {
      "id": "text",
      "data_source_id": "text",
      "json_data": "text",
      "compression_type": 1,
      "priority_push": true
    }
    POST /api/v1/providers/custom/{id}/datasources/{data_source_id}:push_csv HTTP/1.1
    Host: your-tenant.vezacloud.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    Content-Length: 125
    
    {
      "id": "text",
      "data_source_id": "text",
      "csv_data": "text",
      "name": "text",
      "type": "text",
      "compression_type": 1,
      "priority_push": true
    }
    POST /api/v1/providers/custom/{id}:icon HTTP/1.1
    Host: your-tenant.vezacloud.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Content-Type: application/json
    Accept: */*
    Content-Length: 34
    
    {
      "id": "text",
      "icon_base64": "text"
    }
    GET /api/v1/providers/custom/{id}:icon HTTP/1.1
    Host: your-tenant.vezacloud.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    {
      "mime_type": "text",
      "icon_base64": "text"
    }
    GET /api/v1/providers/custom:icon HTTP/1.1
    Host: your-tenant.vezacloud.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    {
      "mime_type": "text",
      "icon_base64": "text",
      "provider_id": "text"
    }
    DELETE /api/v1/providers/custom/{id}:icon HTTP/1.1
    Host: your-tenant.vezacloud.com
    Authorization: Bearer YOUR_SECRET_TOKEN
    Accept: */*
    
    {}