All pages
Powered 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.

Create Custom Provider

Creates a custom provider and returns the provider ID.

List Custom Providers

Lists all configured custom providers.

Get Custom Provider by ID

Returns details for an individual custom provider.

Delete Custom Provider

Delete a custom provider by ID.

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

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.

Create Custom Provider Datasource

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

Get Datasource by ID

Returns details for a single datasource.

Delete Custom Provider Datasource

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

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.

Push Custom Provider Datasource CSV

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

{
    "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}\"}"

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:

cat app_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:

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

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:

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.

Get Custom Provider Icon

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

Delete Custom Provider Icon

Delete the icon associated with an OAA provider.

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 Upload Integrations

OAA Push API

Methods for working with Custom Data Providers and Sources

Overview

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

Authentication

curl -X GET "https://$VEZA_URL/api/v1/providers/custom" \
-H "authorization: Bearer $API_KEY"

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.

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.

Create a provider using the "Custom Application" template

curl -X POST "https://$VEZA_URL/api/v1/providers/custom" \
-d '{"name":"DemoApp","custom_template":"application"}'

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

{
  "value": {
    "id": "a6ef8d8d-d17b-4491-a67a-635ad70f1ba9",
    "name": "DemoApp",
    "custom_template": "application",
    "state": "ENABLED",
    "application_types": [],
    "resource_types": [],
    "idp_types": [],
    "schema_definition_json": "e30="
  }
}
  • 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.

Create a Data Source for the Provider

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"}'

The response will include the data source ID:

{
  "value": {
    "id": "1bd31da0-64ee-4dfe-82c9-cb9f0f2fc369",
    "name": "DemoApp - Documentation Datasource"
  }
}
  • 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 is required in both the request path and body.

Push data source metadata

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

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

Get Custom Providers

curl -X GET "https://$VEZA_URL/api/v1/providers/custom" \
-H 'accept: application/json' \
-H 'authorization: Bearer '$API_KEY

Get Custom Data Sources

curl -X GET "https://$VEZA_URL/api/v1/providers/custom/$PROVIDER_ID" \
-H 'accept: application/json' \
-H 'authorization: Bearer '$API_KEY

Update Custom Data Source

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

This document provides a basic overview of the API requests for creating and updating an OAA data source. These steps and 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.

While registering sources and pushing authorization metadata with 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).

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

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 .

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.

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:

Use to register a new top-level custom provider:

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

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

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.

API calls
Open Authorization API
template
Core Concepts
POST request to /api/providers/custom
Create Datasource
push authorization metadata
List Custom Provider Datasources
Create Custom Provider
Create Custom Provider Datasource
Push Custom Provider Datasource
post operation
List Provider
List Datasources
Team API key
get
Authorizations
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
200
OK
application/json
default
Default error response
application/json
get
GET /api/v1/providers/custom HTTP/1.1
Host: 
Authorization: Bearer Bearer <API key>
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,
      "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
            },
            "as_list": 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"
        }
      }
    }
  ],
  "next_page_token": "text",
  "has_more": true
}
get
Authorizations
Path parameters
idstringRequired
Responses
200
OK
application/json
default
Default error response
application/json
get
GET /api/v1/providers/custom/{id} HTTP/1.1
Host: 
Authorization: Bearer Bearer <API key>
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,
    "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
          },
          "as_list": 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"
      }
    }
  }
}
delete
Authorizations
Path parameters
idstringRequired
Responses
200
OK
application/json
Responseobject
default
Default error response
application/json
delete
DELETE /api/v1/providers/custom/{id} HTTP/1.1
Host: 
Authorization: Bearer Bearer <API key>
Accept: */*
{}
get
Authorizations
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
200
OK
application/json
default
Default error response
application/json
get
GET /api/v1/providers/custom/{id}/datasources HTTP/1.1
Host: 
Authorization: Bearer Bearer <API key>
Accept: */*
{
  "values": [
    {}
  ],
  "next_page_token": "text",
  "has_more": true
}
get
Authorizations
Path parameters
idstringRequired
data_source_idstringRequired
Responses
200
OK
application/json
default
Default error response
application/json
get
GET /api/v1/providers/custom/{id}/datasources/{data_source_id} HTTP/1.1
Host: 
Authorization: Bearer Bearer <API key>
Accept: */*
{
  "value": {}
}
delete
Authorizations
Path parameters
idstringRequired
data_source_idstringRequired
Responses
200
OK
application/json
Responseobject
default
Default error response
application/json
delete
DELETE /api/v1/providers/custom/{id}/datasources/{data_source_id} HTTP/1.1
Host: 
Authorization: Bearer Bearer <API key>
Accept: */*
{}
get
Authorizations
Path parameters
idstringRequired
Responses
200
OK
application/json
default
Default error response
application/json
get
GET /api/v1/providers/custom/{id}:icon HTTP/1.1
Host: 
Authorization: Bearer Bearer <API key>
Accept: */*
{
  "mime_type": "text",
  "icon_base64": "text"
}
get
Authorizations
Query parameters
app_or_idp_typestringOptionalDeprecated
custom_schema_typestringOptional
node_typestringOptional
Responses
200
OK
application/json
default
Default error response
application/json
get
GET /api/v1/providers/custom:icon HTTP/1.1
Host: 
Authorization: Bearer Bearer <API key>
Accept: */*
{
  "mime_type": "text",
  "icon_base64": "text",
  "provider_id": "text"
}
delete
Authorizations
Path parameters
idstringRequired
Responses
200
OK
application/json
Responseobject
default
Default error response
application/json
delete
DELETE /api/v1/providers/custom/{id}:icon HTTP/1.1
Host: 
Authorization: Bearer Bearer <API key>
Accept: */*
{}
post
Authorizations
Body
namestringOptional
custom_templatestringOptional
provisioningbooleanOptional
push_typeinteger · enumOptional
internal_app_namestringOptional
configuration_jsonstringOptional
data_plane_idstringOptional
custom_templatesstring[]Optional
Responses
200
OK
application/json
default
Default error response
application/json
post
POST /api/v1/providers/custom HTTP/1.1
Host: 
Authorization: Bearer Bearer <API key>
Content-Type: application/json
Accept: */*
Content-Length: 645

{
  "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
        },
        "as_list": 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"
    }
  }
}
{
  "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,
    "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
          },
          "as_list": 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"
      }
    }
  }
}
post
Authorizations
Path parameters
idstringRequired
Body
idstringOptional
namestringOptional
custom_templatestringOptional
Responses
200
OK
application/json
default
Default error response
application/json
post
POST /api/v1/providers/custom/{id}/datasources HTTP/1.1
Host: 
Authorization: Bearer Bearer <API key>
Content-Type: application/json
Accept: */*
Content-Length: 52

{
  "id": "text",
  "name": "text",
  "custom_template": "text"
}
{
  "value": {
    "id": "text",
    "name": "text"
  }
}
post
Authorizations
Path parameters
idstringRequired
data_source_idstringRequired
Body
idstringOptional
data_source_idstringOptional
json_datastringOptional
compression_typeinteger · enumOptional
priority_pushbooleanOptional
Responses
200
OK
application/json
default
Default error response
application/json
post
POST /api/v1/providers/custom/{id}/datasources/{data_source_id}:push HTTP/1.1
Host: 
Authorization: Bearer Bearer <API key>
Content-Type: application/json
Accept: */*
Content-Length: 98

{
  "id": "text",
  "data_source_id": "text",
  "json_data": "text",
  "compression_type": 1,
  "priority_push": true
}
{
  "warnings": [
    {
      "message": "text"
    }
  ]
}
post
Authorizations
Path parameters
idstringRequired
data_source_idstringRequired
Body
idstringOptional
data_source_idstringOptional
csv_datastringOptional
namestringOptional
typestringOptional
compression_typeinteger · enumOptional
priority_pushbooleanOptional
Responses
200
OK
application/json
default
Default error response
application/json
post
POST /api/v1/providers/custom/{id}/datasources/{data_source_id}:push_csv HTTP/1.1
Host: 
Authorization: Bearer Bearer <API key>
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
}
{
  "warnings": [
    {
      "message": "text"
    }
  ]
}
post
Authorizations
Path parameters
idstringRequired
data_source_idstringRequired
Body
idstringOptional
data_source_idstringOptional
json_datastringOptional
compression_typeinteger · enumOptional
priority_pushbooleanOptional
Responses
200
OK
application/json
default
Default error response
application/json
post
POST /api/v1/providers/custom/{id}/datasources/{data_source_id}:push HTTP/1.1
Host: 
Authorization: Bearer Bearer <API key>
Content-Type: application/json
Accept: */*
Content-Length: 98

{
  "id": "text",
  "data_source_id": "text",
  "json_data": "text",
  "compression_type": 1,
  "priority_push": true
}
{
  "warnings": [
    {
      "message": "text"
    }
  ]
}
post
Authorizations
Path parameters
idstringRequired
data_source_idstringRequired
Body
idstringOptional
data_source_idstringOptional
csv_datastringOptional
namestringOptional
typestringOptional
compression_typeinteger · enumOptional
priority_pushbooleanOptional
Responses
200
OK
application/json
default
Default error response
application/json
post
POST /api/v1/providers/custom/{id}/datasources/{data_source_id}:push_csv HTTP/1.1
Host: 
Authorization: Bearer Bearer <API key>
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
}
{
  "warnings": [
    {
      "message": "text"
    }
  ]
}
post
Authorizations
Path parameters
idstringRequired
Body
idstringOptional
icon_base64stringOptional
Responses
200
OK
application/json
Responseobject
default
Default error response
application/json
post
POST /api/v1/providers/custom/{id}:icon HTTP/1.1
Host: 
Authorization: Bearer Bearer <API key>
Content-Type: application/json
Accept: */*
Content-Length: 34

{
  "id": "text",
  "icon_base64": "text"
}
{}