Skip to content

Operations

API calls for managing and updating custom data sources

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

Create Custom Provider

Creates a custom provider and returns the provider ID.

POST /api/v1/providers/custom

Example

js
const response = await fetch('/api/v1/providers/custom', {
    method: 'POST',
    headers: {
      "Content-Type": "application/json"
    },
    body: JSON.stringify({}),
});
const data = await response.json();
json
{
  "name": "string",
  "custom_template": "string",
  "provisioning": true,
  "push_type": 0,
  "internal_app_name": "string",
  "configuration_json": "string",
  "data_plane_id": "string",
  "custom_templates": [
    "string"
  ]
}
json
{
  "value": {
    "id": "text",
    "external_id": "text",
    "name": "text",
    "custom_template": "text",
    "custom_templates": [
      "text"
    ],
    "application_types": [
      "text"
    ],
    "idp_types": [
      "text"
    ],
    "file_system_types": [
      "text"
    ],
    "hris_types": [
      "text"
    ],
    "principal_types": [
      "text"
    ],
    "schema_definition_json": "text",
    "provisioning": false,
    "internal_app_name": "text",
    "configuration_json": "text",
    "data_plane_id": "text",
    "team_id": "text"
  }
}

List Custom Providers

Lists all configured custom providers.

GET /api/v1/providers/custom

Query Parameters

  • filter string
  • order_by string
  • page_size integer --The maximum number of results to be returned. Fewer results may be returned even when more pages exist.
  • page_token string --The token specifying the specific page of results to retrieve.

Example

js
const response = await fetch('/api/v1/providers/custom', {
    method: 'GET',
    headers: {},
});
const data = await response.json();
json
{
  "values": [
    {
      "id": "text",
      "external_id": "text",
      "name": "text",
      "custom_template": "text",
      "custom_templates": [
        "text"
      ],
      "application_types": [
        "text"
      ],
      "idp_types": [
        "text"
      ],
      "file_system_types": [
        "text"
      ],
      "hris_types": [
        "text"
      ],
      "principal_types": [
        "text"
      ],
      "schema_definition_json": "text",
      "provisioning": false,
      "internal_app_name": "text",
      "configuration_json": "text",
      "data_plane_id": "text",
      "team_id": "text"
    }
  ],
  "next_page_token": "text",
  "has_more": false
}

Get Custom Provider by ID

Returns details for an individual custom provider.

GET /api/v1/providers/custom/{id}

Path parameters

  • id string

Example

js
const response = await fetch('/api/v1/providers/custom/{id}', {
    method: 'GET',
    headers: {},
});
const data = await response.json();
json
{
  "value": {
    "id": "text",
    "external_id": "text",
    "name": "text",
    "custom_template": "text",
    "custom_templates": [
      "text"
    ],
    "application_types": [
      "text"
    ],
    "idp_types": [
      "text"
    ],
    "file_system_types": [
      "text"
    ],
    "hris_types": [
      "text"
    ],
    "principal_types": [
      "text"
    ],
    "schema_definition_json": "text",
    "provisioning": false,
    "internal_app_name": "text",
    "configuration_json": "text",
    "data_plane_id": "text",
    "team_id": "text"
  }
}

Delete Custom Provider

Delete a custom provider by ID.

DELETE /api/v1/providers/custom/{id}

Path parameters

  • id string

Example

js
const response = await fetch('/api/v1/providers/custom/{id}', {
    method: 'DELETE',
    headers: {},
});
const data = await response.json();
json
{}

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

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.

GET /api/v1/providers/custom/{id}/datasources

Path parameters

  • id string

Example

js
const response = await fetch('/api/v1/providers/custom/{id}/datasources', {
    method: 'GET',
    headers: {},
});
const data = await response.json();
json
{
  "values": [
    {}
  ],
  "next_page_token": "text",
  "has_more": false
}

Create Custom Provider Datasource

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

POST /api/v1/providers/custom/{id}/datasources

Path parameters

  • id string --id of custom provider

Example

js
const response = await fetch('/api/v1/providers/custom/{id}/datasources', {
    method: 'POST',
    headers: {
      "Content-Type": "application/json"
    },
    body: JSON.stringify({}),
});
const data = await response.json();
json
{
  "name": "string"
}
json
{
  "value": {
    "id": "text",
    "name": "text"
  }
}

Get Datasource by ID

Returns details for a single datasource.

GET /api/v1/providers/custom/{id}/datasources/{data_source_id}

Path parameters

  • id string --id of the custom provider
  • data_source_id string --id of the datasource

Example

js
const response = await fetch('/api/v1/providers/custom/{id}/datasources/{data_source_id}', {
    method: 'GET',
    headers: {},
});
const data = await response.json();
json
{
  "value": {}
}

Delete Custom Provider Datasource

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

DELETE /api/v1/providers/custom/{id}/datasources/{data_source_id}

Path parameters

  • id string --id of the custom provider
  • data_source_id string --id of the datasource

Example

js
const response = await fetch('/api/v1/providers/custom/{id}/datasources/{data_source_id}', {
    method: 'DELETE',
    headers: {},
});
const data = await response.json();
json
{}

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.

You can also use the push_csv endpoint to upload CSV data prepared with the expected

csv import columns.

A warning is returned if a matching identity can't be found for an IdP principal.

Compression

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

  • Specify the compression_type (NONE or GZIP).
  • If compression is selected, Veza will expect the payload json_data as a compressed, base64-encoded string.

To compress using shell commands:

shell
cat payload.json | gzip | base64 -o json_data.b64

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

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:

python
payload = {"id": provider_id,
           "data_source_id": data_source_id,
           "json_data": json.dumps(template_contents)
           "compression_type": "none"
           }

POST /api/v1/providers/custom/{id}/datasources/{data_source_id}:push

Path parameters

  • id string --id of the custom provider
  • data_source_id string --id of the datasource

Example

js
const response = await fetch('/api/v1/providers/custom/{id}/datasources/{data_source_id}:push', {
    method: 'POST',
    headers: {
      "Content-Type": "application/json"
    },
    body: JSON.stringify({}),
});
const data = await response.json();
json
{
  "id": "string",
  "data_source_id": "string",
  "json_data": "string encoded json",
  "compression_type": 0,
  "priority_push" true
}
json
{
  "warnings": [
    {
      "message": "text"
    }
  ]
}

POST /api/v1/providers/custom/{id}/datasources/{data_source_id}:push_csv

Path parameters

  • id string --id of the custom provider
  • data_source_id string --id of the datasource

Example

js
const response = await fetch('/api/v1/providers/custom/{id}/datasources/{data_source_id}:push_csv', {
    method: 'POST',
    headers: {
      "Content-Type": "application/json"
    },
    body: JSON.stringify({}),
});
const data = await response.json();
json
{
  "id": "string",
  "data_source_id": "string",
  "csv_data": "string",
  "name": "string",
  "type": "string",
  "compression_type": 0,
  "priority_push": true
}
json
{
  "warnings": [
    {
      "message": "text"
    }
  ]
}

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:

bash
curl -X POST '{{VezaURL}}/api/v1/providers/custom/962d5eff-285c-4b08-a54e-400eead1e680:icon' \
-H "authorization: Bearer $API_KEY" \
-d '{"icon_base64": "PHN2ZyBmaWxsPSIjMDAwMDAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciICB2aWV3Qm94PSIwIDAgNjQgNjQiIHdpZHRoPSIzMnB4IiBoZWlnaHQ9IjMycHgiPjxwYXRoIGQ9Ik0zMiA2QzE3LjY0MSA2IDYgMTcuNjQxIDYgMzJjMCAxMi4yNzcgOC41MTIgMjIuNTYgMTkuOTU1IDI1LjI4Ni0uNTkyLS4xNDEtMS4xNzktLjI5OS0xLjc1NS0uNDc5VjUwLjg1YzAgMC0uOTc1LjMyNS0yLjI3NS4zMjUtMy42MzcgMC01LjE0OC0zLjI0NS01LjUyNS00Ljg3NS0uMjI5LS45OTMtLjgyNy0xLjkzNC0xLjQ2OS0yLjUwOS0uNzY3LS42ODQtMS4xMjYtLjY4Ni0xLjEzMS0uOTItLjAxLS40OTEuNjU4LS40NzEuOTc1LS40NzEgMS42MjUgMCAyLjg1NyAxLjcyOSAzLjQyOSAyLjYyMyAxLjQxNyAyLjIwNyAyLjkzOCAyLjU3NyAzLjcyMSAyLjU3Ny45NzUgMCAxLjgxNy0uMTQ2IDIuMzk3LS40MjYuMjY4LTEuODg4IDEuMTA4LTMuNTcgMi40NzgtNC43NzQtNi4wOTctMS4yMTktMTAuNC00LjcxNi0xMC40LTEwLjQgMC0yLjkyOCAxLjE3NS01LjYxOSAzLjEzMy03Ljc5MkMxOS4zMzMgMjMuNjQxIDE5IDIyLjQ5NCAxOSAyMC42MjVjMC0xLjIzNS4wODYtMi43NTEuNjUtNC4yMjUgMCAwIDMuNzA4LjAyNiA3LjIwNSAzLjMzOEMyOC40NjkgMTkuMjY4IDMwLjE5NiAxOSAzMiAxOXMzLjUzMS4yNjggNS4xNDUuNzM4YzMuNDk3LTMuMzEyIDcuMjA1LTMuMzM4IDcuMjA1LTMuMzM4LjU2NyAxLjQ3NC42NSAyLjk5LjY1IDQuMjI1IDAgMi4wMTUtLjI2OCAzLjE5LS40MzIgMy42OTdDNDYuNDY2IDI2LjQ3NSA0Ny42IDI5LjEyNCA0Ny42IDMyYzAgNS42ODQtNC4zMDMgOS4xODEtMTAuNCAxMC40IDEuNjI4IDEuNDMgMi42IDMuNTEzIDIuNiA1Ljg1djguNTU3Yy0uNTc2LjE4MS0xLjE2Mi4zMzgtMS43NTUuNDc5QzQ5LjQ4OCA1NC41NiA1OCA0NC4yNzcgNTggMzIgNTggMTcuNjQxIDQ2LjM1OSA2IDMyIDZ6TTMzLjgxMyA1Ny45M0MzMy4yMTQgNTcuOTcyIDMyLjYxIDU4IDMyIDU4IDMyLjYxIDU4IDMzLjIxMyA1Ny45NzEgMzMuODEzIDU3Ljkzek0zNy43ODYgNTcuMzQ2Yy0xLjE2NC4yNjUtMi4zNTcuNDUxLTMuNTc1LjU1NEMzNS40MjkgNTcuNzk3IDM2LjYyMiA1Ny42MSAzNy43ODYgNTcuMzQ2ek0zMiA1OGMtLjYxIDAtMS4yMTQtLjAyOC0xLjgxMy0uMDdDMzAuNzg3IDU3Ljk3MSAzMS4zOSA1OCAzMiA1OHpNMjkuNzg4IDU3LjljLTEuMjE3LS4xMDMtMi40MTEtLjI4OS0zLjU3NC0uNTU0QzI3LjM3OCA1Ny42MSAyOC41NzEgNTcuNzk3IDI5Ljc4OCA1Ny45eiIvPjwvc3ZnPg=="}'

Create Custom Provider Icon

Upload a custom icon to display for an OAA provider.

POST /api/v1/providers/custom/{id}:icon

Path parameters

  • id string --id of the custom provider

Example

js
const response = await fetch('/api/v1/providers/custom/{id}:icon', {
    method: 'POST',
    headers: {
      "Content-Type": "application/json"
    },
    body: JSON.stringify({}),
});
const data = await response.json();
json
{
  "id": "string",
  "icon_base64": "string"
}
json
{}

Get Custom Provider Icon

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

GET /api/v1/providers/custom/{id}:icon

Path parameters

  • id string --id of the custom provider

Example

js
const response = await fetch('/api/v1/providers/custom/{id}:icon', {
    method: 'GET',
    headers: {},
});
const data = await response.json();
json
{
  "mime_type": "text",
  "icon_base64": "text"
}

GET /api/v1/providers/custom:icon

Query parameters

  • app_or_idp_type string
  • custom_schema_type string
  • node_type string

Example

js
const response = await fetch('/api/v1/providers/custom:icon', {
    method: 'GET',
    headers: {},
});
const data = await response.json();
json
{
  "mime_type": "text",
  "icon_base64": "text"
}

Delete Custom Provider Icon

Delete the icon associated with an OAA provider.

DELETE /api/v1/providers/custom/{id}:icon

Path parameters

  • id string --id of the custom provider

Example

js
const response = await fetch('/api/v1/providers/custom/{id}:icon', {
    method: 'DELETE',
    headers: {},
});
const data = await response.json();
json
{}