diff --git a/Kentik/OpenAPIs/kentik_device_api-v202504beta2.json b/Kentik/OpenAPIs/kentik_device_api-v202504beta2.json new file mode 100644 index 0000000..ae9ce46 --- /dev/null +++ b/Kentik/OpenAPIs/kentik_device_api-v202504beta2.json @@ -0,0 +1,1624 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Device API", + "description": "# Overview\nThe Device API provides programmatic access to configuration of devices", + "version": "v202504beta2", + "contact": { + "name": "Kentik API Engineering", + "url": "https://github.com/kentik/api-schema-public" + } + }, + "tags": [ + { + "name": "DeviceService" + } + ], + "paths": { + "/device/v202504beta2/device": { + "get": { + "summary": "List all devices.", + "description": "Returns list of configured devices. Use the 'view' parameter to control response detail: FULL (default), BASIC (id, name, status), or ID_ONLY (id only). See [About Devices](https://kb.kentik.com/v4/Cb01.htm).", + "operationId": "ListDevices", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202504beta2ListDevicesResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "parameters": [ + { + "name": "query.noCustomColumns", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "view", + "description": "Controls the amount of detail returned for each device. Defaults to FULL.\n\n - DEVICE_VIEW_UNSPECIFIED: When unspecified, defaults to FULL for backward compatibility.\n - DEVICE_VIEW_FULL: Returns the full device configuration with all fields populated.\n - DEVICE_VIEW_BASIC: Returns only basic device information: id, device_name, device_status.\n - DEVICE_VIEW_ID_ONLY: Returns only device IDs.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "DEVICE_VIEW_UNSPECIFIED", + "DEVICE_VIEW_FULL", + "DEVICE_VIEW_BASIC", + "DEVICE_VIEW_ID_ONLY" + ], + "default": "DEVICE_VIEW_UNSPECIFIED" + } + } + ], + "tags": [ + "DeviceService" + ] + }, + "post": { + "summary": "Configure a new device.", + "description": "Create configuration for a new device. Returns the newly created configuration (see [About Devices](https://kb.kentik.com/v4/Cb01.htm)).", + "operationId": "CreateDevice", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202504beta2CreateDeviceResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202504beta2CreateDeviceRequest" + } + } + }, + "required": true + }, + "tags": [ + "DeviceService" + ] + } + }, + "/device/v202504beta2/device/batch_create": { + "post": { + "summary": "Configure multiple devices (max 100).", + "description": "Create configuration for multiple devices. Returns the newly created configurations (see [About Devices](https://kb.kentik.com/v4/Cb01.htm)).", + "operationId": "CreateDevices", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202504beta2CreateDevicesResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202504beta2CreateDevicesRequest" + } + } + }, + "required": true + }, + "tags": [ + "DeviceService" + ] + } + }, + "/device/v202504beta2/device/batch_delete": { + "post": { + "summary": "Delete configuration of multiple devices.", + "description": "Deletes configuration of multiple devices with specific IDs (see [About Devices](https://kb.kentik.com/v4/Cb01.htm)).", + "operationId": "DeleteDevices", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202504beta2DeleteDevicesResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202504beta2DeleteDevicesRequest" + } + } + }, + "required": true + }, + "tags": [ + "DeviceService" + ] + } + }, + "/device/v202504beta2/device/batch_update": { + "put": { + "summary": "Updates configuration of multiple devices (max 100).", + "description": "Replaces configuration of multiple devices with attributes in the request. Returns the updated configurations (see [About Devices](https://kb.kentik.com/v4/Cb01.htm)).", + "operationId": "UpdateDevices", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202504beta2UpdateDevicesResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202504beta2UpdateDevicesRequest" + } + } + }, + "required": true + }, + "tags": [ + "DeviceService" + ] + } + }, + "/device/v202504beta2/device/name/{deviceName}": { + "get": { + "summary": "Retrieve configuration of a device by name.", + "description": "Returns configuration of a device specified by name (see [About Devices](https://kb.kentik.com/v4/Cb01.htm)).", + "operationId": "GetDeviceByName", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202504beta2GetDeviceByNameResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "parameters": [ + { + "name": "deviceName", + "description": "Name of the requested device", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "query.noCustomColumns", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "tags": [ + "DeviceService" + ] + } + }, + "/device/v202504beta2/device/{device.id}": { + "put": { + "summary": "Updates configuration of a device.", + "description": "Replaces configuration of a device with attributes in the request. Returns the updated configuration (see [About Devices](https://kb.kentik.com/v4/Cb01.htm)).", + "operationId": "UpdateDevice", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202504beta2UpdateDeviceResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "parameters": [ + { + "name": "device.id", + "description": "System generated unique identifier", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeviceServiceUpdateDeviceBody" + } + } + }, + "required": true + }, + "tags": [ + "DeviceService" + ] + }, + "get": { + "summary": "Retrieve configuration of a device.", + "description": "Returns configuration of a device specified by ID (see [About Devices](https://kb.kentik.com/v4/Cb01.htm)).", + "operationId": "GetDevice", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202504beta2GetDeviceResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "parameters": [ + { + "name": "device.id", + "description": "ID of the requested device", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "query.noCustomColumns", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "tags": [ + "DeviceService" + ] + }, + "delete": { + "summary": "Delete configuration of a device.", + "description": "Deletes configuration of a device with specific ID (see [About Devices](https://kb.kentik.com/v4/Cb01.htm)).", + "operationId": "DeleteDevice", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202504beta2DeleteDeviceResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "parameters": [ + { + "name": "device.id", + "description": "ID of the device to be deleted", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "DeviceService" + ] + } + }, + "/device/v202504beta2/device/{id}/labels": { + "put": { + "summary": "Updates labels of a device.", + "description": "Removes all existing labels from the device and applies the device labels (see [About Device Labels](https://kb.kentik.com/v4/Cb16.htm)) specified by id. Returns the updated configuration.", + "operationId": "UpdateDeviceLabels", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202504beta2UpdateDeviceLabelsResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "ID of the device to be updated", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeviceServiceUpdateDeviceLabelsBody" + } + } + }, + "required": true + }, + "tags": [ + "DeviceService" + ] + } + } + }, + "security": [ + { + "email": [], + "token": [] + } + ], + "externalDocs": { + "description": "General information about Kentik APIs", + "url": "https://kb.kentik.com/v0/Ab09.htm#Ab09-APIs_Overview" + }, + "components": { + "securitySchemes": { + "email": { + "type": "apiKey", + "name": "X-CH-Auth-Email", + "in": "header" + }, + "token": { + "type": "apiKey", + "name": "X-CH-Auth-API-Token", + "in": "header" + } + }, + "schemas": { + "DeviceServiceUpdateDeviceBody": { + "type": "object", + "properties": { + "device": { + "type": "object", + "properties": { + "deviceName": { + "type": "string", + "description": "Device name (device_name) - The name of the device. Valid characters: alphanumeric and underscores. Length: min=4, max=60." + }, + "deviceSubtype": { + "type": "string", + "description": "Device subtype (device_subtype) - The device subtype." + }, + "cdnAttr": { + "type": "string", + "description": "CDN attributes (cdn_attr) - If this is a DNS server, you can contribute its queries to Kentik's CDN attribution database. Valid values: \"Y\" or \"N\". ** cdn_attr is required when the device subtype's parent type is \"host-nprobe-dns-www\"" + }, + "deviceDescription": { + "type": "string", + "description": "Description (device_description) - The device description. Valid characters: any. Length: max=128." + }, + "sendingIps": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Device ip (sending_ips) - Array containing one or more IP address(es), from which the device is sending flow. ** sending_ips is required when the device subtype's parent type is \"router\"" + }, + "deviceSampleRate": { + "type": "number", + "format": "double", + "description": "Sample rate (device_sample_rate) - The rate at which the device is sampling flows. Valid values: integer bigger than 1. Recommended rate varies depending on flow volume; see https://kb.kentik.com/Ab02.htm#Ab02-Flow_Sampling. ** device_sample_rate is required when the device subtype's parent type is \"router\"" + }, + "planId": { + "type": "integer", + "format": "int64", + "description": "Plan (plan_id) - The ID of the plan to which this device is assigned. Available plan(s) can be found via the Plans API. Valid value: integer." + }, + "siteId": { + "type": "integer", + "format": "int64", + "description": "Site (site_id) - The ID of the site (if any) to which this device is assigned. Site IDs are system generated when a site is created. Valid value: integer." + }, + "minimizeSnmp": { + "type": "boolean", + "description": "SNMP polling (minimize_snmp) - The interval at which SNMP will be polled. If \"false\" (Standard), interface counter will be polled every 10 minutes and interface description every 30 minutes. If \"true\" (Minimum) (Minimum), interface counter won't be polled and interface description will be polled every 6 hours. ** minimize_snmp is required when the device subtype's parent type is \"router\"" + }, + "deviceSnmpIp": { + "type": "string", + "description": "Device SNMP IP (device_snmp_ip) - The SNMP IP to use when polling the device. device_snmp_ip is ignored unless the device subtype's parent type is \"router\"" + }, + "deviceSnmpCommunity": { + "type": "string", + "description": "SNMP community (device_snmp_community) - The SNMP community to use when polling the device. device_snmp_community is ignored unless the device subtype's parent type is \"router\"" + }, + "deviceSnmpV3Conf": { + "$ref": "#/components/schemas/v202504beta2DeviceSnmpV3Conf" + }, + "deviceBgpType": { + "type": "string", + "description": "BGP (device_bgp_type) - Device bgp type. Valid values: \"none\" (use generic IP/ASN mapping), \"device\" (peer with the device itself), \"other_device\" (share routing table of existing peered device)" + }, + "deviceBgpNeighborIp": { + "type": "string", + "description": "Your IPv4 peering address (device_bgp_neighbor_ip) - A valid IPv4 address to use for peering with the device. ** An IPv4 and/or IPv6 peering address is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpNeighborIp6": { + "type": "string", + "description": "Your IPv6 peering address (device_bgp_neighbor_ip6) - A valid IPv6 address to use for peering with the device. ** An IPv4 and/or IPv6 peering address is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpNeighborAsn": { + "type": "string", + "description": "Your ASN (device_bgp_neighbor_asn) - The valid AS number (ASN) of the autonomous system that this device belongs to. ** device_bgp_neighbor_asn is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpPassword": { + "type": "string", + "description": "BGP md5 password (device_bgp_password) - Optional BGP MD5 password (shared authentication password for BGP peering). Valid characters: printable ASCII excluding space and question mark. Length: 32. device_bgp_password is optional when device_bgp_type is set to \"device\"" + }, + "useBgpDeviceId": { + "type": "string", + "description": "Select master BGP device (use_bgp_device_id) - The ID of the device whose BGP table should be shared with this device. ** use_bgp_device_id is required when device_bgp_type is set to \"other_device\"). Valid value: a system-generated device_id" + }, + "deviceBgpFlowspec": { + "type": "boolean", + "description": "BGP Flowspec Compatibility (device_bgp_flowspec) - Toggle BGP Flowspec Compatibility for device." + }, + "nms": { + "$ref": "#/components/schemas/v202504beta2DeviceNmsConfig" + }, + "deviceBgpCredentialName": { + "type": "string", + "description": "BGP Credential Name (device_bgp_credential_name) - Unsupported Field. Use device_bgp_password instead." + }, + "flowSnmpCredentialName": { + "type": "string", + "description": "Snmp Credential Name (flow_snmp_credential_name) - Optional Credential Name (Credential for Flow Snmp peering). Valid characters: alphanumeric. Length: 32." + }, + "monitoringTemplateId": { + "type": "integer", + "format": "int64", + "description": "Monitoring template - The ID of the monitoring template assigned to this device." + }, + "deviceAlert": { + "type": "string", + "description": "Device alert - The device alert endpoint URL." + } + }, + "title": "DeviceConcise" + } + }, + "title": "UpdateDeviceRequest", + "required": [ + "device" + ] + }, + "DeviceServiceUpdateDeviceLabelsBody": { + "type": "object", + "properties": { + "labels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202504beta2LabelConcise" + }, + "description": "List of labels to be added to the device" + } + }, + "title": "UpdateDeviceLabelsRequest", + "required": [ + "labels" + ] + }, + "devicev202504beta2Label": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Label ID" + }, + "name": { + "type": "string", + "description": "Label name" + }, + "description": { + "type": "string", + "description": "Label description" + }, + "edate": { + "type": "string", + "format": "date-time", + "description": "Label end date (UTC)" + }, + "cdate": { + "type": "string", + "format": "date-time", + "description": "Label creation date (UTC)" + }, + "userId": { + "type": "string", + "description": "User ID" + }, + "companyId": { + "type": "string", + "description": "Company ID" + }, + "color": { + "type": "string", + "description": "Label color" + }, + "order": { + "type": "string", + "description": "Label order" + }, + "pivotDeviceId": { + "type": "string", + "description": "Pivot device ID" + }, + "pivotLabelId": { + "type": "string", + "description": "Pivot label ID" + } + }, + "title": "Label" + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string" + } + }, + "additionalProperties": {} + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/protobufAny" + } + } + } + }, + "v202504beta2CreateDeviceRequest": { + "type": "object", + "properties": { + "device": { + "$ref": "#/components/schemas/v202504beta2DeviceConcise" + } + }, + "title": "CreateDeviceRequest", + "required": [ + "device" + ] + }, + "v202504beta2CreateDeviceResponse": { + "type": "object", + "properties": { + "device": { + "$ref": "#/components/schemas/v202504beta2DeviceDetailed" + } + }, + "title": "CreateDeviceResponse" + }, + "v202504beta2CreateDevicesRequest": { + "type": "object", + "properties": { + "devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202504beta2DeviceConcise" + }, + "description": "List of configurations of devices to be created" + } + }, + "title": "CreateDevicesRequest", + "required": [ + "devices" + ] + }, + "v202504beta2CreateDevicesResponse": { + "type": "object", + "properties": { + "devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202504beta2DeviceDetailed" + }, + "description": "List of configurations of newly created devices" + }, + "failedDevices": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of names of devices that failed to be created" + } + }, + "title": "CreateDevicesResponse" + }, + "v202504beta2CustomColumnData": { + "type": "object", + "properties": { + "deviceId": { + "type": "string", + "description": "Device ID" + }, + "fieldId": { + "type": "string", + "description": "Field ID" + }, + "colName": { + "type": "string", + "description": "Column name" + }, + "description": { + "type": "string", + "description": "Description" + }, + "colType": { + "type": "string", + "description": "Column type" + }, + "deviceType": { + "type": "string", + "description": "Device type" + } + }, + "title": "CustomColumnData" + }, + "v202504beta2DeleteDeviceResponse": { + "type": "object", + "title": "DeleteDeviceResponse" + }, + "v202504beta2DeleteDevicesRequest": { + "type": "object", + "properties": { + "ids": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of IDs of devices to be deleted" + } + }, + "title": "DeleteDevicesRequest", + "required": [ + "ids" + ] + }, + "v202504beta2DeleteDevicesResponse": { + "type": "object", + "properties": { + "failedDevices": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of IDs of devices that failed to be deleted" + } + }, + "title": "DeleteDevicesResponse" + }, + "v202504beta2DeviceConcise": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "System generated unique identifier", + "title": "id" + }, + "deviceName": { + "type": "string", + "description": "Device name (device_name) - The name of the device. Valid characters: alphanumeric and underscores. Length: min=4, max=60." + }, + "deviceSubtype": { + "type": "string", + "description": "Device subtype (device_subtype) - The device subtype." + }, + "cdnAttr": { + "type": "string", + "description": "CDN attributes (cdn_attr) - If this is a DNS server, you can contribute its queries to Kentik's CDN attribution database. Valid values: \"Y\" or \"N\". ** cdn_attr is required when the device subtype's parent type is \"host-nprobe-dns-www\"" + }, + "deviceDescription": { + "type": "string", + "description": "Description (device_description) - The device description. Valid characters: any. Length: max=128." + }, + "sendingIps": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Device ip (sending_ips) - Array containing one or more IP address(es), from which the device is sending flow. ** sending_ips is required when the device subtype's parent type is \"router\"" + }, + "deviceSampleRate": { + "type": "number", + "format": "double", + "description": "Sample rate (device_sample_rate) - The rate at which the device is sampling flows. Valid values: integer bigger than 1. Recommended rate varies depending on flow volume; see https://kb.kentik.com/Ab02.htm#Ab02-Flow_Sampling. ** device_sample_rate is required when the device subtype's parent type is \"router\"" + }, + "planId": { + "type": "integer", + "format": "int64", + "description": "Plan (plan_id) - The ID of the plan to which this device is assigned. Available plan(s) can be found via the Plans API. Valid value: integer." + }, + "siteId": { + "type": "integer", + "format": "int64", + "description": "Site (site_id) - The ID of the site (if any) to which this device is assigned. Site IDs are system generated when a site is created. Valid value: integer." + }, + "minimizeSnmp": { + "type": "boolean", + "description": "SNMP polling (minimize_snmp) - The interval at which SNMP will be polled. If \"false\" (Standard), interface counter will be polled every 10 minutes and interface description every 30 minutes. If \"true\" (Minimum) (Minimum), interface counter won't be polled and interface description will be polled every 6 hours. ** minimize_snmp is required when the device subtype's parent type is \"router\"" + }, + "deviceSnmpIp": { + "type": "string", + "description": "Device SNMP IP (device_snmp_ip) - The SNMP IP to use when polling the device. device_snmp_ip is ignored unless the device subtype's parent type is \"router\"" + }, + "deviceSnmpCommunity": { + "type": "string", + "description": "SNMP community (device_snmp_community) - The SNMP community to use when polling the device. device_snmp_community is ignored unless the device subtype's parent type is \"router\"" + }, + "deviceSnmpV3Conf": { + "$ref": "#/components/schemas/v202504beta2DeviceSnmpV3Conf" + }, + "deviceBgpType": { + "type": "string", + "description": "BGP (device_bgp_type) - Device bgp type. Valid values: \"none\" (use generic IP/ASN mapping), \"device\" (peer with the device itself), \"other_device\" (share routing table of existing peered device)" + }, + "deviceBgpNeighborIp": { + "type": "string", + "description": "Your IPv4 peering address (device_bgp_neighbor_ip) - A valid IPv4 address to use for peering with the device. ** An IPv4 and/or IPv6 peering address is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpNeighborIp6": { + "type": "string", + "description": "Your IPv6 peering address (device_bgp_neighbor_ip6) - A valid IPv6 address to use for peering with the device. ** An IPv4 and/or IPv6 peering address is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpNeighborAsn": { + "type": "string", + "description": "Your ASN (device_bgp_neighbor_asn) - The valid AS number (ASN) of the autonomous system that this device belongs to. ** device_bgp_neighbor_asn is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpPassword": { + "type": "string", + "description": "BGP md5 password (device_bgp_password) - Optional BGP MD5 password (shared authentication password for BGP peering). Valid characters: printable ASCII excluding space and question mark. Length: 32. device_bgp_password is optional when device_bgp_type is set to \"device\"" + }, + "useBgpDeviceId": { + "type": "string", + "description": "Select master BGP device (use_bgp_device_id) - The ID of the device whose BGP table should be shared with this device. ** use_bgp_device_id is required when device_bgp_type is set to \"other_device\"). Valid value: a system-generated device_id" + }, + "deviceBgpFlowspec": { + "type": "boolean", + "description": "BGP Flowspec Compatibility (device_bgp_flowspec) - Toggle BGP Flowspec Compatibility for device." + }, + "nms": { + "$ref": "#/components/schemas/v202504beta2DeviceNmsConfig" + }, + "deviceBgpCredentialName": { + "type": "string", + "description": "BGP Credential Name (device_bgp_credential_name) - Unsupported Field. Use device_bgp_password instead." + }, + "flowSnmpCredentialName": { + "type": "string", + "description": "Snmp Credential Name (flow_snmp_credential_name) - Optional Credential Name (Credential for Flow Snmp peering). Valid characters: alphanumeric. Length: 32." + }, + "monitoringTemplateId": { + "type": "integer", + "format": "int64", + "description": "Monitoring template - The ID of the monitoring template assigned to this device." + }, + "deviceAlert": { + "type": "string", + "description": "Device alert - The device alert endpoint URL." + } + }, + "title": "DeviceConcise" + }, + "v202504beta2DeviceDetailed": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "System generated unique identifier", + "readOnly": true + }, + "companyId": { + "type": "string", + "description": "Company ID" + }, + "deviceName": { + "type": "string", + "description": "Device name" + }, + "deviceAlias": { + "type": "string", + "description": "Device alias" + }, + "deviceType": { + "type": "string", + "description": "Device type" + }, + "deviceDescription": { + "type": "string", + "description": "Device description" + }, + "site": { + "$ref": "#/components/schemas/v202504beta2Site" + }, + "plan": { + "$ref": "#/components/schemas/v202504beta2Plan" + }, + "labels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/devicev202504beta2Label" + }, + "description": "List of labels" + }, + "allInterfaces": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202504beta2Interface" + }, + "description": "List of interfaces" + }, + "deviceFlowType": { + "type": "string", + "description": "Device flow type" + }, + "deviceSampleRate": { + "type": "string", + "description": "Device sample rate" + }, + "sendingIps": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of sending IPs" + }, + "deviceSnmpIp": { + "type": "string", + "description": "Device SNMP IP" + }, + "deviceSnmpCommunity": { + "type": "string", + "description": "Device SNMP community", + "title": "Keeping these tokens so we can give the user a useful error. They are removed from DeviceRequest" + }, + "minimizeSnmp": { + "type": "boolean", + "description": "Minimize SNMP" + }, + "deviceBgpType": { + "type": "string", + "description": "Device BGP type" + }, + "deviceBgpNeighborIp": { + "type": "string", + "description": "Device BGP neighbor IP" + }, + "deviceBgpNeighborIp6": { + "type": "string", + "description": "Device BGP neighbor IP6" + }, + "deviceBgpNeighborAsn": { + "type": "string", + "description": "Device BGP neighbor ASN" + }, + "deviceBgpFlowspec": { + "type": "boolean", + "description": "Device BGP flowspec" + }, + "deviceBgpPassword": { + "type": "string", + "description": "Device BGP password", + "title": "Keeping these tokens so we can give the user a useful error. They are removed from DeviceRequest" + }, + "deviceBgpLabelUnicast": { + "type": "boolean", + "description": "Device BGP label unicast" + }, + "bgpLookupStrategy": { + "type": "string", + "description": "BGP lookup strategy" + }, + "deviceStatus": { + "type": "string", + "description": "Device status" + }, + "useBgpDeviceId": { + "type": "string", + "description": "Use BGP device ID" + }, + "customColumns": { + "type": "string", + "description": "Custom columns" + }, + "customColumnData": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202504beta2CustomColumnData" + }, + "description": "Custom column data" + }, + "deviceChfClientPort": { + "type": "string", + "description": "Device CHF client port" + }, + "deviceChfClientProtocol": { + "type": "string", + "description": "Device CHF client protocol" + }, + "deviceChfInterface": { + "type": "string", + "description": "Device CHF interface" + }, + "deviceAgentType": { + "type": "string", + "description": "Device agent type" + }, + "maxFlowRate": { + "type": "integer", + "format": "int64", + "description": "Max flow rate" + }, + "maxBigFlowRate": { + "type": "integer", + "format": "int64", + "description": "Max big flow rate" + }, + "deviceProxyBgp": { + "type": "string", + "description": "Device proxy BGP" + }, + "deviceProxyBgp6": { + "type": "string", + "description": "Device proxy BGP6" + }, + "createdDate": { + "type": "string", + "format": "date-time", + "description": "Creation timestamp (UTC)" + }, + "updatedDate": { + "type": "string", + "format": "date-time", + "description": "Last modification timestamp (UTC)" + }, + "deviceSnmpV3ConfEnabled": { + "type": "boolean", + "description": "Device SNMP v3 configuration enabled" + }, + "deviceSnmpV3Conf": { + "$ref": "#/components/schemas/v202504beta2DeviceSnmpV3Conf" + }, + "cdnAttr": { + "type": "string", + "description": "CDN attributes" + }, + "bgpPeerIp4": { + "type": "string", + "description": "BGP peer IP4" + }, + "bgpPeerIp6": { + "type": "string", + "description": "BGP peer IP6" + }, + "deviceSubtype": { + "type": "string", + "description": "Device subtype" + }, + "deviceVendorType": { + "type": "string", + "description": "Device vendor type" + }, + "deviceModelType": { + "type": "string", + "description": "Device model type" + }, + "cloudExportId": { + "type": "string", + "description": "Cloud export ID" + }, + "deviceKproxy": { + "type": "string", + "description": "Device KProxy" + }, + "snmpEnabled": { + "type": "string", + "description": "SNMP enabled" + }, + "snmpDisabledReason": { + "type": "string", + "description": "SNMP disabled reason" + }, + "snmpDisabledReasonOther": { + "type": "string", + "description": "SNMP disabled reason other" + }, + "bgpDisabledReason": { + "type": "string", + "description": "BGP disabled reason" + }, + "bgpDisabledReasonOther": { + "type": "string", + "description": "BGP disabled reason other" + }, + "deviceManufacturer": { + "type": "string", + "description": "Device manufacturer" + }, + "deviceAlert": { + "type": "string", + "description": "Device alert" + }, + "role": { + "type": "string", + "description": "Role" + }, + "deviceGnmiV1Conf": { + "$ref": "#/components/schemas/v202504beta2GnmiV1Conf" + }, + "useAsnFromFlow": { + "type": "boolean", + "description": "Use ASN from flow" + }, + "maxInterface": { + "type": "integer", + "format": "int64", + "description": "Max interface" + }, + "maxInterfaceCheck": { + "type": "integer", + "format": "int64", + "description": "Max interface check" + }, + "nms": { + "$ref": "#/components/schemas/v202504beta2DeviceNmsConfig" + }, + "deviceBgpCredentialName": { + "type": "string", + "description": "BGP Credential Name (device_bgp_credential_name) - Unsupported Field. Use device_bgp_password instead." + }, + "flowSnmpCredentialName": { + "type": "string", + "description": "Snmp Credential Name (flow_snmp_credential_name) - Optional Credential Name (Credential for Flow Snmp peering). Valid characters: alphanumeric. Length: 32." + }, + "monitoringTemplateId": { + "type": "integer", + "format": "int64", + "description": "Monitoring template - The ID of the monitoring template assigned to this device." + }, + "osName": { + "type": "string", + "description": "Operating system name" + }, + "osVersion": { + "type": "string", + "description": "Operating system version" + }, + "serialNumber": { + "type": "string", + "description": "Serial number" + } + }, + "title": "DeviceDetailed" + }, + "v202504beta2DeviceNmsConfig": { + "type": "object", + "properties": { + "agentId": { + "type": "string", + "description": "ID of the agent that is monitoring this device." + }, + "ipAddress": { + "type": "string", + "description": "Local IP address of this device." + }, + "snmp": { + "$ref": "#/components/schemas/v202504beta2DeviceNmsSnmpConfig" + }, + "st": { + "$ref": "#/components/schemas/v202504beta2DeviceNmsStConfig" + } + }, + "title": "DeviceNmsConfig" + }, + "v202504beta2DeviceNmsSnmpConfig": { + "type": "object", + "properties": { + "credentialName": { + "type": "string", + "description": "Name of the SNMP credentials from the credential vault." + }, + "port": { + "type": "integer", + "format": "int64", + "description": "SNMP port, to override default of 161." + }, + "timeout": { + "type": "string", + "description": "Timeout, to override default of 2s." + } + }, + "title": "DeviceNmsSnmpConfig" + }, + "v202504beta2DeviceNmsStConfig": { + "type": "object", + "properties": { + "credentialName": { + "type": "string", + "description": "Name of the ST credentials from the credential vault." + }, + "port": { + "type": "integer", + "format": "int64", + "description": "ST port, to override default of 6030." + }, + "timeout": { + "type": "string", + "description": "Timeout, to override default of 2s." + }, + "secure": { + "type": "boolean", + "description": "Use SSL to connect to this device." + } + }, + "title": "DeviceNmsStConfig" + }, + "v202504beta2DeviceQuery": { + "type": "object", + "properties": { + "noCustomColumns": { + "type": "boolean" + } + } + }, + "v202504beta2DeviceSnmpV3Conf": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "UserName (username) - the user name to use to authenticate via SNMP v3. ** UserName is required when device_snmp_v3_conf is not null" + }, + "authenticationProtocol": { + "type": "string", + "description": "Authentication Protocol (authentication_protocol) - the auth protocol to use via SNMP v3" + }, + "authenticationPassphrase": { + "type": "string", + "description": "Authentication Passphrase (authentication_passphrase) - the passphrase to use for SNMP v3 authentication protocol (required when AuthenticationProtocol not NoAuth)" + }, + "privacyProtocol": { + "type": "string", + "description": "Privacy Protocol (privacy_protocol) - the privacy protocol to use to authenticate via SNMP v3" + }, + "privacyPassphrase": { + "type": "string", + "description": "Privacy Passphrase (privacy_passphrase) - the passphrase to use for SNMP v3 privacy protocol (required when PrivacyProtocol not NoPriv)" + } + }, + "title": "DeviceSnmpV3Conf" + }, + "v202504beta2DeviceView": { + "type": "string", + "enum": [ + "DEVICE_VIEW_UNSPECIFIED", + "DEVICE_VIEW_FULL", + "DEVICE_VIEW_BASIC", + "DEVICE_VIEW_ID_ONLY" + ], + "default": "DEVICE_VIEW_UNSPECIFIED", + "description": "DeviceView specifies the amount of detail to return for each device\nin a ListDevices response.\n\n - DEVICE_VIEW_UNSPECIFIED: When unspecified, defaults to FULL for backward compatibility.\n - DEVICE_VIEW_FULL: Returns the full device configuration with all fields populated.\n - DEVICE_VIEW_BASIC: Returns only basic device information: id, device_name, device_status.\n - DEVICE_VIEW_ID_ONLY: Returns only device IDs." + }, + "v202504beta2GetDeviceByNameResponse": { + "type": "object", + "properties": { + "device": { + "$ref": "#/components/schemas/v202504beta2DeviceDetailed" + } + }, + "title": "GetDeviceByNameResponse" + }, + "v202504beta2GetDeviceResponse": { + "type": "object", + "properties": { + "device": { + "$ref": "#/components/schemas/v202504beta2DeviceDetailed" + } + }, + "title": "GetDeviceResponse" + }, + "v202504beta2GnmiV1Conf": { + "type": "object", + "properties": { + "dialoutServer": { + "type": "string", + "description": "Dialout server" + } + }, + "title": "GnmiV1Conf" + }, + "v202504beta2Interface": { + "type": "object", + "properties": { + "interfaceDescription": { + "type": "string", + "description": "Interface description" + }, + "initialSnmpSpeed": { + "type": "string", + "description": "Initial SNMP speed" + }, + "deviceId": { + "type": "string", + "description": "Device ID" + }, + "snmpSpeed": { + "type": "string", + "description": "SNMP speed" + }, + "snmpAlias": { + "type": "string", + "description": "SNMP alias" + }, + "snmpId": { + "type": "string", + "description": "SNMP ID" + }, + "connectivityType": { + "type": "string", + "description": "Connectivity type" + }, + "networkBoundary": { + "type": "string", + "description": "Network boundary" + }, + "provider": { + "type": "string", + "description": "Provider" + } + }, + "title": "Interface" + }, + "v202504beta2LabelConcise": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "description": "Label ID" + } + }, + "title": "LabelConcise" + }, + "v202504beta2ListDevicesResponse": { + "type": "object", + "properties": { + "devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202504beta2DeviceDetailed" + }, + "description": "List of configurations of devices" + }, + "invalidCount": { + "type": "integer", + "format": "int64", + "description": "Number of invalid entries encountered while collecting data" + } + }, + "title": "ListDevicesResponse" + }, + "v202504beta2Plan": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Plan ID" + }, + "name": { + "type": "string", + "description": "Plan name" + }, + "active": { + "type": "boolean", + "description": "Plan Status" + }, + "bgp": { + "type": "boolean", + "description": "BGP enabled" + }, + "companyId": { + "type": "string", + "description": "Company ID" + }, + "description": { + "type": "string", + "description": "Plan Description" + }, + "deviceTypes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Device Types" + }, + "devices": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Devices" + }, + "fastRetention": { + "type": "integer", + "format": "int64", + "description": "Fast Rention in days" + }, + "fullRetention": { + "type": "integer", + "format": "int64", + "description": "Full Retention in days" + }, + "maxBigdataFps": { + "type": "integer", + "format": "int64", + "description": "Max data FPS" + }, + "maxDevices": { + "type": "integer", + "format": "int64", + "description": "Max Device" + }, + "maxFps": { + "type": "integer", + "format": "int64", + "description": "Max FPS" + }, + "cdate": { + "type": "string", + "format": "date-time", + "description": "Created Date" + }, + "edate": { + "type": "string", + "format": "date-time", + "description": "Updated Data" + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Plan Metadata" + } + }, + "title": "Plan" + }, + "v202504beta2Site": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Site ID" + }, + "siteName": { + "type": "string", + "description": "Site name" + }, + "lat": { + "type": "number", + "format": "double", + "description": "Site latitude" + }, + "lon": { + "type": "number", + "format": "double", + "description": "Site longitude" + }, + "companyId": { + "type": "string", + "description": "Company ID" + } + }, + "title": "Site" + }, + "v202504beta2UpdateDeviceLabelsResponse": { + "type": "object", + "properties": { + "device": { + "$ref": "#/components/schemas/v202504beta2DeviceDetailed" + } + }, + "title": "UpdateDeviceLabelsResponse" + }, + "v202504beta2UpdateDeviceResponse": { + "type": "object", + "properties": { + "device": { + "$ref": "#/components/schemas/v202504beta2DeviceDetailed" + } + }, + "title": "UpdateDeviceResponse" + }, + "v202504beta2UpdateDevicesRequest": { + "type": "object", + "properties": { + "devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202504beta2DeviceConcise" + }, + "description": "List of configurations of devices to be updated" + } + }, + "title": "UpdateDevicesRequest", + "required": [ + "devices" + ] + }, + "v202504beta2UpdateDevicesResponse": { + "type": "object", + "properties": { + "devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202504beta2DeviceDetailed" + }, + "description": "List of configurations of updated devices" + }, + "failedDevices": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of IDs of devices that failed to be updated" + } + }, + "title": "UpdateDevicesResponse" + } + } + } +} diff --git a/Kentik/OpenAPIs/kentik_device_site_api-latest.json b/Kentik/OpenAPIs/kentik_device_site_api-latest.json new file mode 100644 index 0000000..fa34a71 --- /dev/null +++ b/Kentik/OpenAPIs/kentik_device_site_api-latest.json @@ -0,0 +1,2493 @@ +{ + "openapi": "3.0.0", + "info": { + "version": "latest", + "x-vendor-api-version": "device v202504beta2 / site v202509", + "title": "Kentik Device & Site API", + "description": "Kentik Device & Site API provides programmatic access to device inventory and site management on the Kentik network observability platform.\n\nAuthentication: API key pair in two headers \u2014 X-CH-Auth-Email (account email) and X-CH-Auth-API-Token (API token). Generate a token at Kentik \u2192 Settings \u2192 My Profile \u2192 API Tokens.\n\nThis spec combines Kentik's official v6 Device API and Site API (from github.com/kentik/api-schema-public) into a single Integration Model, matching the scope of the legacy KentikV5 adapter this repo previously shipped. Kentik's v5 REST API (which that adapter targeted) was deprecated in January 2025 with no official spec ever published for it; v6 is the current, officially-specified, actively-supported API.\n\nSource: https://github.com/kentik/api-schema-public (gen/openapiv3/kentik/device/v202504beta2, gen/openapiv3/kentik/site/v202509)", + "contact": { + "name": "Kentik API Engineering", + "url": "https://github.com/kentik/api-schema-public" + }, + "x-itential-curated": "Combines the official Kentik v6 Device API (v202504beta2, 10 operations) and Site API (v202509, 10 operations) into a single Integration Model \u2014 both are already narrow, single-purpose service APIs, so all 20 operations are included in full. Replaces the legacy KentikV5 native adapter, which targeted the deprecated v5 REST API; 2 of that adapter's endpoints (/api/ui/companySettings, /api/ui/devices/non-cloud-status) were undocumented internal UI-backend endpoints with no official spec and have no v6 equivalent in scope here." + }, + "servers": [ + { + "url": "https://grpc.api.kentik.com" + } + ], + "security": [ + { + "email": [], + "token": [] + } + ], + "paths": { + "/device/v202504beta2/device": { + "get": { + "summary": "List all devices.", + "description": "Returns list of configured devices. Use the 'view' parameter to control response detail: FULL (default), BASIC (id, name, status), or ID_ONLY (id only). See [About Devices](https://kb.kentik.com/v4/Cb01.htm).", + "operationId": "ListDevices", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202504beta2ListDevicesResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "parameters": [ + { + "name": "query.noCustomColumns", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + }, + { + "name": "view", + "description": "Controls the amount of detail returned for each device. Defaults to FULL.\n\n - DEVICE_VIEW_UNSPECIFIED: When unspecified, defaults to FULL for backward compatibility.\n - DEVICE_VIEW_FULL: Returns the full device configuration with all fields populated.\n - DEVICE_VIEW_BASIC: Returns only basic device information: id, device_name, device_status.\n - DEVICE_VIEW_ID_ONLY: Returns only device IDs.", + "in": "query", + "required": false, + "schema": { + "type": "string", + "enum": [ + "DEVICE_VIEW_UNSPECIFIED", + "DEVICE_VIEW_FULL", + "DEVICE_VIEW_BASIC", + "DEVICE_VIEW_ID_ONLY" + ], + "default": "DEVICE_VIEW_UNSPECIFIED" + } + } + ], + "tags": [ + "DeviceService" + ] + }, + "post": { + "summary": "Configure a new device.", + "description": "Create configuration for a new device. Returns the newly created configuration (see [About Devices](https://kb.kentik.com/v4/Cb01.htm)).", + "operationId": "CreateDevice", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202504beta2CreateDeviceResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202504beta2CreateDeviceRequest" + } + } + }, + "required": true + }, + "tags": [ + "DeviceService" + ] + } + }, + "/device/v202504beta2/device/batch_create": { + "post": { + "summary": "Configure multiple devices (max 100).", + "description": "Create configuration for multiple devices. Returns the newly created configurations (see [About Devices](https://kb.kentik.com/v4/Cb01.htm)).", + "operationId": "CreateDevices", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202504beta2CreateDevicesResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202504beta2CreateDevicesRequest" + } + } + }, + "required": true + }, + "tags": [ + "DeviceService" + ] + } + }, + "/device/v202504beta2/device/batch_delete": { + "post": { + "summary": "Delete configuration of multiple devices.", + "description": "Deletes configuration of multiple devices with specific IDs (see [About Devices](https://kb.kentik.com/v4/Cb01.htm)).", + "operationId": "DeleteDevices", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202504beta2DeleteDevicesResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202504beta2DeleteDevicesRequest" + } + } + }, + "required": true + }, + "tags": [ + "DeviceService" + ] + } + }, + "/device/v202504beta2/device/batch_update": { + "put": { + "summary": "Updates configuration of multiple devices (max 100).", + "description": "Replaces configuration of multiple devices with attributes in the request. Returns the updated configurations (see [About Devices](https://kb.kentik.com/v4/Cb01.htm)).", + "operationId": "UpdateDevices", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202504beta2UpdateDevicesResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202504beta2UpdateDevicesRequest" + } + } + }, + "required": true + }, + "tags": [ + "DeviceService" + ] + } + }, + "/device/v202504beta2/device/name/{deviceName}": { + "get": { + "summary": "Retrieve configuration of a device by name.", + "description": "Returns configuration of a device specified by name (see [About Devices](https://kb.kentik.com/v4/Cb01.htm)).", + "operationId": "GetDeviceByName", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202504beta2GetDeviceByNameResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "parameters": [ + { + "name": "deviceName", + "description": "Name of the requested device", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "query.noCustomColumns", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "tags": [ + "DeviceService" + ] + } + }, + "/device/v202504beta2/device/{device.id}": { + "put": { + "summary": "Updates configuration of a device.", + "description": "Replaces configuration of a device with attributes in the request. Returns the updated configuration (see [About Devices](https://kb.kentik.com/v4/Cb01.htm)).", + "operationId": "UpdateDevice", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202504beta2UpdateDeviceResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "parameters": [ + { + "name": "device.id", + "description": "System generated unique identifier", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeviceServiceUpdateDeviceBody" + } + } + }, + "required": true + }, + "tags": [ + "DeviceService" + ] + }, + "get": { + "summary": "Retrieve configuration of a device.", + "description": "Returns configuration of a device specified by ID (see [About Devices](https://kb.kentik.com/v4/Cb01.htm)).", + "operationId": "GetDevice", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202504beta2GetDeviceResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "parameters": [ + { + "name": "device.id", + "description": "ID of the requested device", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "query.noCustomColumns", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "tags": [ + "DeviceService" + ] + }, + "delete": { + "summary": "Delete configuration of a device.", + "description": "Deletes configuration of a device with specific ID (see [About Devices](https://kb.kentik.com/v4/Cb01.htm)).", + "operationId": "DeleteDevice", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202504beta2DeleteDeviceResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "parameters": [ + { + "name": "device.id", + "description": "ID of the device to be deleted", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "DeviceService" + ] + } + }, + "/device/v202504beta2/device/{id}/labels": { + "put": { + "summary": "Updates labels of a device.", + "description": "Removes all existing labels from the device and applies the device labels (see [About Device Labels](https://kb.kentik.com/v4/Cb16.htm)) specified by id. Returns the updated configuration.", + "operationId": "UpdateDeviceLabels", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202504beta2UpdateDeviceLabelsResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "ID of the device to be updated", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeviceServiceUpdateDeviceLabelsBody" + } + } + }, + "required": true + }, + "tags": [ + "DeviceService" + ] + } + }, + "/site/v202509/site_markets": { + "get": { + "summary": "List all site markets.", + "description": "Returns list of configured site markets.", + "operationId": "ListSiteMarkets", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202509ListSiteMarketsResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "tags": [ + "SiteService" + ] + }, + "post": { + "summary": "Configure a new site market.", + "description": "Create configuration for a new site market. Returns the newly created configuration.", + "operationId": "CreateSiteMarket", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202509CreateSiteMarketResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202509CreateSiteMarketRequest" + } + } + }, + "required": true + }, + "tags": [ + "SiteService" + ] + } + }, + "/site/v202509/site_markets/{id}": { + "get": { + "summary": "Retrieve configuration of a site market.", + "description": "Returns configuration of a site market specified by ID.", + "operationId": "GetSiteMarket", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202509GetSiteMarketResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "ID of the requested site market", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "SiteService" + ] + }, + "delete": { + "summary": "Delete configuration of a site market.", + "description": "Deletes configuration of a site market with specific ID.", + "operationId": "DeleteSiteMarket", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202509DeleteSiteMarketResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "ID of the site market to be deleted", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "SiteService" + ] + }, + "put": { + "summary": "Updates configuration of a site market.", + "description": "Replaces configuration of a site market with attributes in the request. Returns the updated configuration.", + "operationId": "UpdateSiteMarket", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202509UpdateSiteMarketResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "System generated unique identifier", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SiteServiceUpdateSiteMarketBody" + } + } + }, + "required": true + }, + "tags": [ + "SiteService" + ] + } + }, + "/site/v202509/sites": { + "get": { + "summary": "List all sites.", + "description": "Returns list of configured sites.", + "operationId": "ListSites", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202509ListSitesResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "tags": [ + "SiteService" + ] + }, + "post": { + "summary": "Configure a new site.", + "description": "Create configuration for a new site. Returns the newly created configuration.", + "operationId": "CreateSite", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202509CreateSiteResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202509CreateSiteRequest" + } + } + }, + "required": true + }, + "tags": [ + "SiteService" + ] + } + }, + "/site/v202509/sites/{id}": { + "get": { + "summary": "Retrieve configuration of a site.", + "description": "Returns configuration of a site specified by ID.", + "operationId": "GetSite", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202509GetSiteResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "ID of the requested site", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "SiteService" + ] + }, + "delete": { + "summary": "Delete configuration of a site.", + "description": "Deletes configuration of a site with specific ID.", + "operationId": "DeleteSite", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202509DeleteSiteResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "ID of the site to be deleted", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "SiteService" + ] + }, + "put": { + "summary": "Updates configuration of a site.", + "description": "Replaces configuration of a site with attributes in the request. Returns the updated configuration.", + "operationId": "UpdateSite", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202509UpdateSiteResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "System generated unique identifier", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SiteServiceUpdateSiteBody" + } + } + }, + "required": true + }, + "tags": [ + "SiteService" + ] + } + } + }, + "components": { + "securitySchemes": { + "email": { + "type": "apiKey", + "name": "X-CH-Auth-Email", + "in": "header" + }, + "token": { + "type": "apiKey", + "name": "X-CH-Auth-API-Token", + "in": "header" + } + }, + "schemas": { + "DeviceServiceUpdateDeviceBody": { + "type": "object", + "properties": { + "device": { + "type": "object", + "properties": { + "deviceName": { + "type": "string", + "description": "Device name (device_name) - The name of the device. Valid characters: alphanumeric and underscores. Length: min=4, max=60." + }, + "deviceSubtype": { + "type": "string", + "description": "Device subtype (device_subtype) - The device subtype." + }, + "cdnAttr": { + "type": "string", + "description": "CDN attributes (cdn_attr) - If this is a DNS server, you can contribute its queries to Kentik's CDN attribution database. Valid values: \"Y\" or \"N\". ** cdn_attr is required when the device subtype's parent type is \"host-nprobe-dns-www\"" + }, + "deviceDescription": { + "type": "string", + "description": "Description (device_description) - The device description. Valid characters: any. Length: max=128." + }, + "sendingIps": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Device ip (sending_ips) - Array containing one or more IP address(es), from which the device is sending flow. ** sending_ips is required when the device subtype's parent type is \"router\"" + }, + "deviceSampleRate": { + "type": "number", + "format": "double", + "description": "Sample rate (device_sample_rate) - The rate at which the device is sampling flows. Valid values: integer bigger than 1. Recommended rate varies depending on flow volume; see https://kb.kentik.com/Ab02.htm#Ab02-Flow_Sampling. ** device_sample_rate is required when the device subtype's parent type is \"router\"" + }, + "planId": { + "type": "integer", + "format": "int64", + "description": "Plan (plan_id) - The ID of the plan to which this device is assigned. Available plan(s) can be found via the Plans API. Valid value: integer." + }, + "siteId": { + "type": "integer", + "format": "int64", + "description": "Site (site_id) - The ID of the site (if any) to which this device is assigned. Site IDs are system generated when a site is created. Valid value: integer." + }, + "minimizeSnmp": { + "type": "boolean", + "description": "SNMP polling (minimize_snmp) - The interval at which SNMP will be polled. If \"false\" (Standard), interface counter will be polled every 10 minutes and interface description every 30 minutes. If \"true\" (Minimum) (Minimum), interface counter won't be polled and interface description will be polled every 6 hours. ** minimize_snmp is required when the device subtype's parent type is \"router\"" + }, + "deviceSnmpIp": { + "type": "string", + "description": "Device SNMP IP (device_snmp_ip) - The SNMP IP to use when polling the device. device_snmp_ip is ignored unless the device subtype's parent type is \"router\"" + }, + "deviceSnmpCommunity": { + "type": "string", + "description": "SNMP community (device_snmp_community) - The SNMP community to use when polling the device. device_snmp_community is ignored unless the device subtype's parent type is \"router\"" + }, + "deviceSnmpV3Conf": { + "$ref": "#/components/schemas/v202504beta2DeviceSnmpV3Conf" + }, + "deviceBgpType": { + "type": "string", + "description": "BGP (device_bgp_type) - Device bgp type. Valid values: \"none\" (use generic IP/ASN mapping), \"device\" (peer with the device itself), \"other_device\" (share routing table of existing peered device)" + }, + "deviceBgpNeighborIp": { + "type": "string", + "description": "Your IPv4 peering address (device_bgp_neighbor_ip) - A valid IPv4 address to use for peering with the device. ** An IPv4 and/or IPv6 peering address is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpNeighborIp6": { + "type": "string", + "description": "Your IPv6 peering address (device_bgp_neighbor_ip6) - A valid IPv6 address to use for peering with the device. ** An IPv4 and/or IPv6 peering address is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpNeighborAsn": { + "type": "string", + "description": "Your ASN (device_bgp_neighbor_asn) - The valid AS number (ASN) of the autonomous system that this device belongs to. ** device_bgp_neighbor_asn is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpPassword": { + "type": "string", + "description": "BGP md5 password (device_bgp_password) - Optional BGP MD5 password (shared authentication password for BGP peering). Valid characters: printable ASCII excluding space and question mark. Length: 32. device_bgp_password is optional when device_bgp_type is set to \"device\"" + }, + "useBgpDeviceId": { + "type": "string", + "description": "Select master BGP device (use_bgp_device_id) - The ID of the device whose BGP table should be shared with this device. ** use_bgp_device_id is required when device_bgp_type is set to \"other_device\"). Valid value: a system-generated device_id" + }, + "deviceBgpFlowspec": { + "type": "boolean", + "description": "BGP Flowspec Compatibility (device_bgp_flowspec) - Toggle BGP Flowspec Compatibility for device." + }, + "nms": { + "$ref": "#/components/schemas/v202504beta2DeviceNmsConfig" + }, + "deviceBgpCredentialName": { + "type": "string", + "description": "BGP Credential Name (device_bgp_credential_name) - Unsupported Field. Use device_bgp_password instead." + }, + "flowSnmpCredentialName": { + "type": "string", + "description": "Snmp Credential Name (flow_snmp_credential_name) - Optional Credential Name (Credential for Flow Snmp peering). Valid characters: alphanumeric. Length: 32." + }, + "monitoringTemplateId": { + "type": "integer", + "format": "int64", + "description": "Monitoring template - The ID of the monitoring template assigned to this device." + }, + "deviceAlert": { + "type": "string", + "description": "Device alert - The device alert endpoint URL." + } + }, + "title": "DeviceConcise" + } + }, + "title": "UpdateDeviceRequest", + "required": [ + "device" + ] + }, + "DeviceServiceUpdateDeviceLabelsBody": { + "type": "object", + "properties": { + "labels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202504beta2LabelConcise" + }, + "description": "List of labels to be added to the device" + } + }, + "title": "UpdateDeviceLabelsRequest", + "required": [ + "labels" + ] + }, + "devicev202504beta2Label": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Label ID" + }, + "name": { + "type": "string", + "description": "Label name" + }, + "description": { + "type": "string", + "description": "Label description" + }, + "edate": { + "type": "string", + "format": "date-time", + "description": "Label end date (UTC)" + }, + "cdate": { + "type": "string", + "format": "date-time", + "description": "Label creation date (UTC)" + }, + "userId": { + "type": "string", + "description": "User ID" + }, + "companyId": { + "type": "string", + "description": "Company ID" + }, + "color": { + "type": "string", + "description": "Label color" + }, + "order": { + "type": "string", + "description": "Label order" + }, + "pivotDeviceId": { + "type": "string", + "description": "Pivot device ID" + }, + "pivotLabelId": { + "type": "string", + "description": "Pivot label ID" + } + }, + "title": "Label" + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string" + } + }, + "additionalProperties": {} + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/protobufAny" + } + } + } + }, + "v202504beta2CreateDeviceRequest": { + "type": "object", + "properties": { + "device": { + "$ref": "#/components/schemas/v202504beta2DeviceConcise" + } + }, + "title": "CreateDeviceRequest", + "required": [ + "device" + ] + }, + "v202504beta2CreateDeviceResponse": { + "type": "object", + "properties": { + "device": { + "$ref": "#/components/schemas/v202504beta2DeviceDetailed" + } + }, + "title": "CreateDeviceResponse" + }, + "v202504beta2CreateDevicesRequest": { + "type": "object", + "properties": { + "devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202504beta2DeviceConcise" + }, + "description": "List of configurations of devices to be created" + } + }, + "title": "CreateDevicesRequest", + "required": [ + "devices" + ] + }, + "v202504beta2CreateDevicesResponse": { + "type": "object", + "properties": { + "devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202504beta2DeviceDetailed" + }, + "description": "List of configurations of newly created devices" + }, + "failedDevices": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of names of devices that failed to be created" + } + }, + "title": "CreateDevicesResponse" + }, + "v202504beta2CustomColumnData": { + "type": "object", + "properties": { + "deviceId": { + "type": "string", + "description": "Device ID" + }, + "fieldId": { + "type": "string", + "description": "Field ID" + }, + "colName": { + "type": "string", + "description": "Column name" + }, + "description": { + "type": "string", + "description": "Description" + }, + "colType": { + "type": "string", + "description": "Column type" + }, + "deviceType": { + "type": "string", + "description": "Device type" + } + }, + "title": "CustomColumnData" + }, + "v202504beta2DeleteDeviceResponse": { + "type": "object", + "title": "DeleteDeviceResponse" + }, + "v202504beta2DeleteDevicesRequest": { + "type": "object", + "properties": { + "ids": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of IDs of devices to be deleted" + } + }, + "title": "DeleteDevicesRequest", + "required": [ + "ids" + ] + }, + "v202504beta2DeleteDevicesResponse": { + "type": "object", + "properties": { + "failedDevices": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of IDs of devices that failed to be deleted" + } + }, + "title": "DeleteDevicesResponse" + }, + "v202504beta2DeviceConcise": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "System generated unique identifier", + "title": "id" + }, + "deviceName": { + "type": "string", + "description": "Device name (device_name) - The name of the device. Valid characters: alphanumeric and underscores. Length: min=4, max=60." + }, + "deviceSubtype": { + "type": "string", + "description": "Device subtype (device_subtype) - The device subtype." + }, + "cdnAttr": { + "type": "string", + "description": "CDN attributes (cdn_attr) - If this is a DNS server, you can contribute its queries to Kentik's CDN attribution database. Valid values: \"Y\" or \"N\". ** cdn_attr is required when the device subtype's parent type is \"host-nprobe-dns-www\"" + }, + "deviceDescription": { + "type": "string", + "description": "Description (device_description) - The device description. Valid characters: any. Length: max=128." + }, + "sendingIps": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Device ip (sending_ips) - Array containing one or more IP address(es), from which the device is sending flow. ** sending_ips is required when the device subtype's parent type is \"router\"" + }, + "deviceSampleRate": { + "type": "number", + "format": "double", + "description": "Sample rate (device_sample_rate) - The rate at which the device is sampling flows. Valid values: integer bigger than 1. Recommended rate varies depending on flow volume; see https://kb.kentik.com/Ab02.htm#Ab02-Flow_Sampling. ** device_sample_rate is required when the device subtype's parent type is \"router\"" + }, + "planId": { + "type": "integer", + "format": "int64", + "description": "Plan (plan_id) - The ID of the plan to which this device is assigned. Available plan(s) can be found via the Plans API. Valid value: integer." + }, + "siteId": { + "type": "integer", + "format": "int64", + "description": "Site (site_id) - The ID of the site (if any) to which this device is assigned. Site IDs are system generated when a site is created. Valid value: integer." + }, + "minimizeSnmp": { + "type": "boolean", + "description": "SNMP polling (minimize_snmp) - The interval at which SNMP will be polled. If \"false\" (Standard), interface counter will be polled every 10 minutes and interface description every 30 minutes. If \"true\" (Minimum) (Minimum), interface counter won't be polled and interface description will be polled every 6 hours. ** minimize_snmp is required when the device subtype's parent type is \"router\"" + }, + "deviceSnmpIp": { + "type": "string", + "description": "Device SNMP IP (device_snmp_ip) - The SNMP IP to use when polling the device. device_snmp_ip is ignored unless the device subtype's parent type is \"router\"" + }, + "deviceSnmpCommunity": { + "type": "string", + "description": "SNMP community (device_snmp_community) - The SNMP community to use when polling the device. device_snmp_community is ignored unless the device subtype's parent type is \"router\"" + }, + "deviceSnmpV3Conf": { + "$ref": "#/components/schemas/v202504beta2DeviceSnmpV3Conf" + }, + "deviceBgpType": { + "type": "string", + "description": "BGP (device_bgp_type) - Device bgp type. Valid values: \"none\" (use generic IP/ASN mapping), \"device\" (peer with the device itself), \"other_device\" (share routing table of existing peered device)" + }, + "deviceBgpNeighborIp": { + "type": "string", + "description": "Your IPv4 peering address (device_bgp_neighbor_ip) - A valid IPv4 address to use for peering with the device. ** An IPv4 and/or IPv6 peering address is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpNeighborIp6": { + "type": "string", + "description": "Your IPv6 peering address (device_bgp_neighbor_ip6) - A valid IPv6 address to use for peering with the device. ** An IPv4 and/or IPv6 peering address is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpNeighborAsn": { + "type": "string", + "description": "Your ASN (device_bgp_neighbor_asn) - The valid AS number (ASN) of the autonomous system that this device belongs to. ** device_bgp_neighbor_asn is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpPassword": { + "type": "string", + "description": "BGP md5 password (device_bgp_password) - Optional BGP MD5 password (shared authentication password for BGP peering). Valid characters: printable ASCII excluding space and question mark. Length: 32. device_bgp_password is optional when device_bgp_type is set to \"device\"" + }, + "useBgpDeviceId": { + "type": "string", + "description": "Select master BGP device (use_bgp_device_id) - The ID of the device whose BGP table should be shared with this device. ** use_bgp_device_id is required when device_bgp_type is set to \"other_device\"). Valid value: a system-generated device_id" + }, + "deviceBgpFlowspec": { + "type": "boolean", + "description": "BGP Flowspec Compatibility (device_bgp_flowspec) - Toggle BGP Flowspec Compatibility for device." + }, + "nms": { + "$ref": "#/components/schemas/v202504beta2DeviceNmsConfig" + }, + "deviceBgpCredentialName": { + "type": "string", + "description": "BGP Credential Name (device_bgp_credential_name) - Unsupported Field. Use device_bgp_password instead." + }, + "flowSnmpCredentialName": { + "type": "string", + "description": "Snmp Credential Name (flow_snmp_credential_name) - Optional Credential Name (Credential for Flow Snmp peering). Valid characters: alphanumeric. Length: 32." + }, + "monitoringTemplateId": { + "type": "integer", + "format": "int64", + "description": "Monitoring template - The ID of the monitoring template assigned to this device." + }, + "deviceAlert": { + "type": "string", + "description": "Device alert - The device alert endpoint URL." + } + }, + "title": "DeviceConcise" + }, + "v202504beta2DeviceDetailed": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "System generated unique identifier", + "readOnly": true + }, + "companyId": { + "type": "string", + "description": "Company ID" + }, + "deviceName": { + "type": "string", + "description": "Device name" + }, + "deviceAlias": { + "type": "string", + "description": "Device alias" + }, + "deviceType": { + "type": "string", + "description": "Device type" + }, + "deviceDescription": { + "type": "string", + "description": "Device description" + }, + "site": { + "$ref": "#/components/schemas/v202504beta2Site" + }, + "plan": { + "$ref": "#/components/schemas/v202504beta2Plan" + }, + "labels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/devicev202504beta2Label" + }, + "description": "List of labels" + }, + "allInterfaces": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202504beta2Interface" + }, + "description": "List of interfaces" + }, + "deviceFlowType": { + "type": "string", + "description": "Device flow type" + }, + "deviceSampleRate": { + "type": "string", + "description": "Device sample rate" + }, + "sendingIps": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of sending IPs" + }, + "deviceSnmpIp": { + "type": "string", + "description": "Device SNMP IP" + }, + "deviceSnmpCommunity": { + "type": "string", + "description": "Device SNMP community", + "title": "Keeping these tokens so we can give the user a useful error. They are removed from DeviceRequest" + }, + "minimizeSnmp": { + "type": "boolean", + "description": "Minimize SNMP" + }, + "deviceBgpType": { + "type": "string", + "description": "Device BGP type" + }, + "deviceBgpNeighborIp": { + "type": "string", + "description": "Device BGP neighbor IP" + }, + "deviceBgpNeighborIp6": { + "type": "string", + "description": "Device BGP neighbor IP6" + }, + "deviceBgpNeighborAsn": { + "type": "string", + "description": "Device BGP neighbor ASN" + }, + "deviceBgpFlowspec": { + "type": "boolean", + "description": "Device BGP flowspec" + }, + "deviceBgpPassword": { + "type": "string", + "description": "Device BGP password", + "title": "Keeping these tokens so we can give the user a useful error. They are removed from DeviceRequest" + }, + "deviceBgpLabelUnicast": { + "type": "boolean", + "description": "Device BGP label unicast" + }, + "bgpLookupStrategy": { + "type": "string", + "description": "BGP lookup strategy" + }, + "deviceStatus": { + "type": "string", + "description": "Device status" + }, + "useBgpDeviceId": { + "type": "string", + "description": "Use BGP device ID" + }, + "customColumns": { + "type": "string", + "description": "Custom columns" + }, + "customColumnData": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202504beta2CustomColumnData" + }, + "description": "Custom column data" + }, + "deviceChfClientPort": { + "type": "string", + "description": "Device CHF client port" + }, + "deviceChfClientProtocol": { + "type": "string", + "description": "Device CHF client protocol" + }, + "deviceChfInterface": { + "type": "string", + "description": "Device CHF interface" + }, + "deviceAgentType": { + "type": "string", + "description": "Device agent type" + }, + "maxFlowRate": { + "type": "integer", + "format": "int64", + "description": "Max flow rate" + }, + "maxBigFlowRate": { + "type": "integer", + "format": "int64", + "description": "Max big flow rate" + }, + "deviceProxyBgp": { + "type": "string", + "description": "Device proxy BGP" + }, + "deviceProxyBgp6": { + "type": "string", + "description": "Device proxy BGP6" + }, + "createdDate": { + "type": "string", + "format": "date-time", + "description": "Creation timestamp (UTC)" + }, + "updatedDate": { + "type": "string", + "format": "date-time", + "description": "Last modification timestamp (UTC)" + }, + "deviceSnmpV3ConfEnabled": { + "type": "boolean", + "description": "Device SNMP v3 configuration enabled" + }, + "deviceSnmpV3Conf": { + "$ref": "#/components/schemas/v202504beta2DeviceSnmpV3Conf" + }, + "cdnAttr": { + "type": "string", + "description": "CDN attributes" + }, + "bgpPeerIp4": { + "type": "string", + "description": "BGP peer IP4" + }, + "bgpPeerIp6": { + "type": "string", + "description": "BGP peer IP6" + }, + "deviceSubtype": { + "type": "string", + "description": "Device subtype" + }, + "deviceVendorType": { + "type": "string", + "description": "Device vendor type" + }, + "deviceModelType": { + "type": "string", + "description": "Device model type" + }, + "cloudExportId": { + "type": "string", + "description": "Cloud export ID" + }, + "deviceKproxy": { + "type": "string", + "description": "Device KProxy" + }, + "snmpEnabled": { + "type": "string", + "description": "SNMP enabled" + }, + "snmpDisabledReason": { + "type": "string", + "description": "SNMP disabled reason" + }, + "snmpDisabledReasonOther": { + "type": "string", + "description": "SNMP disabled reason other" + }, + "bgpDisabledReason": { + "type": "string", + "description": "BGP disabled reason" + }, + "bgpDisabledReasonOther": { + "type": "string", + "description": "BGP disabled reason other" + }, + "deviceManufacturer": { + "type": "string", + "description": "Device manufacturer" + }, + "deviceAlert": { + "type": "string", + "description": "Device alert" + }, + "role": { + "type": "string", + "description": "Role" + }, + "deviceGnmiV1Conf": { + "$ref": "#/components/schemas/v202504beta2GnmiV1Conf" + }, + "useAsnFromFlow": { + "type": "boolean", + "description": "Use ASN from flow" + }, + "maxInterface": { + "type": "integer", + "format": "int64", + "description": "Max interface" + }, + "maxInterfaceCheck": { + "type": "integer", + "format": "int64", + "description": "Max interface check" + }, + "nms": { + "$ref": "#/components/schemas/v202504beta2DeviceNmsConfig" + }, + "deviceBgpCredentialName": { + "type": "string", + "description": "BGP Credential Name (device_bgp_credential_name) - Unsupported Field. Use device_bgp_password instead." + }, + "flowSnmpCredentialName": { + "type": "string", + "description": "Snmp Credential Name (flow_snmp_credential_name) - Optional Credential Name (Credential for Flow Snmp peering). Valid characters: alphanumeric. Length: 32." + }, + "monitoringTemplateId": { + "type": "integer", + "format": "int64", + "description": "Monitoring template - The ID of the monitoring template assigned to this device." + }, + "osName": { + "type": "string", + "description": "Operating system name" + }, + "osVersion": { + "type": "string", + "description": "Operating system version" + }, + "serialNumber": { + "type": "string", + "description": "Serial number" + } + }, + "title": "DeviceDetailed" + }, + "v202504beta2DeviceNmsConfig": { + "type": "object", + "properties": { + "agentId": { + "type": "string", + "description": "ID of the agent that is monitoring this device." + }, + "ipAddress": { + "type": "string", + "description": "Local IP address of this device." + }, + "snmp": { + "$ref": "#/components/schemas/v202504beta2DeviceNmsSnmpConfig" + }, + "st": { + "$ref": "#/components/schemas/v202504beta2DeviceNmsStConfig" + } + }, + "title": "DeviceNmsConfig" + }, + "v202504beta2DeviceNmsSnmpConfig": { + "type": "object", + "properties": { + "credentialName": { + "type": "string", + "description": "Name of the SNMP credentials from the credential vault." + }, + "port": { + "type": "integer", + "format": "int64", + "description": "SNMP port, to override default of 161." + }, + "timeout": { + "type": "string", + "description": "Timeout, to override default of 2s." + } + }, + "title": "DeviceNmsSnmpConfig" + }, + "v202504beta2DeviceNmsStConfig": { + "type": "object", + "properties": { + "credentialName": { + "type": "string", + "description": "Name of the ST credentials from the credential vault." + }, + "port": { + "type": "integer", + "format": "int64", + "description": "ST port, to override default of 6030." + }, + "timeout": { + "type": "string", + "description": "Timeout, to override default of 2s." + }, + "secure": { + "type": "boolean", + "description": "Use SSL to connect to this device." + } + }, + "title": "DeviceNmsStConfig" + }, + "v202504beta2DeviceQuery": { + "type": "object", + "properties": { + "noCustomColumns": { + "type": "boolean" + } + } + }, + "v202504beta2DeviceSnmpV3Conf": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "UserName (username) - the user name to use to authenticate via SNMP v3. ** UserName is required when device_snmp_v3_conf is not null" + }, + "authenticationProtocol": { + "type": "string", + "description": "Authentication Protocol (authentication_protocol) - the auth protocol to use via SNMP v3" + }, + "authenticationPassphrase": { + "type": "string", + "description": "Authentication Passphrase (authentication_passphrase) - the passphrase to use for SNMP v3 authentication protocol (required when AuthenticationProtocol not NoAuth)" + }, + "privacyProtocol": { + "type": "string", + "description": "Privacy Protocol (privacy_protocol) - the privacy protocol to use to authenticate via SNMP v3" + }, + "privacyPassphrase": { + "type": "string", + "description": "Privacy Passphrase (privacy_passphrase) - the passphrase to use for SNMP v3 privacy protocol (required when PrivacyProtocol not NoPriv)" + } + }, + "title": "DeviceSnmpV3Conf" + }, + "v202504beta2DeviceView": { + "type": "string", + "enum": [ + "DEVICE_VIEW_UNSPECIFIED", + "DEVICE_VIEW_FULL", + "DEVICE_VIEW_BASIC", + "DEVICE_VIEW_ID_ONLY" + ], + "default": "DEVICE_VIEW_UNSPECIFIED", + "description": "DeviceView specifies the amount of detail to return for each device\nin a ListDevices response.\n\n - DEVICE_VIEW_UNSPECIFIED: When unspecified, defaults to FULL for backward compatibility.\n - DEVICE_VIEW_FULL: Returns the full device configuration with all fields populated.\n - DEVICE_VIEW_BASIC: Returns only basic device information: id, device_name, device_status.\n - DEVICE_VIEW_ID_ONLY: Returns only device IDs." + }, + "v202504beta2GetDeviceByNameResponse": { + "type": "object", + "properties": { + "device": { + "$ref": "#/components/schemas/v202504beta2DeviceDetailed" + } + }, + "title": "GetDeviceByNameResponse" + }, + "v202504beta2GetDeviceResponse": { + "type": "object", + "properties": { + "device": { + "$ref": "#/components/schemas/v202504beta2DeviceDetailed" + } + }, + "title": "GetDeviceResponse" + }, + "v202504beta2GnmiV1Conf": { + "type": "object", + "properties": { + "dialoutServer": { + "type": "string", + "description": "Dialout server" + } + }, + "title": "GnmiV1Conf" + }, + "v202504beta2Interface": { + "type": "object", + "properties": { + "interfaceDescription": { + "type": "string", + "description": "Interface description" + }, + "initialSnmpSpeed": { + "type": "string", + "description": "Initial SNMP speed" + }, + "deviceId": { + "type": "string", + "description": "Device ID" + }, + "snmpSpeed": { + "type": "string", + "description": "SNMP speed" + }, + "snmpAlias": { + "type": "string", + "description": "SNMP alias" + }, + "snmpId": { + "type": "string", + "description": "SNMP ID" + }, + "connectivityType": { + "type": "string", + "description": "Connectivity type" + }, + "networkBoundary": { + "type": "string", + "description": "Network boundary" + }, + "provider": { + "type": "string", + "description": "Provider" + } + }, + "title": "Interface" + }, + "v202504beta2LabelConcise": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "description": "Label ID" + } + }, + "title": "LabelConcise" + }, + "v202504beta2ListDevicesResponse": { + "type": "object", + "properties": { + "devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202504beta2DeviceDetailed" + }, + "description": "List of configurations of devices" + }, + "invalidCount": { + "type": "integer", + "format": "int64", + "description": "Number of invalid entries encountered while collecting data" + } + }, + "title": "ListDevicesResponse" + }, + "v202504beta2Plan": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Plan ID" + }, + "name": { + "type": "string", + "description": "Plan name" + }, + "active": { + "type": "boolean", + "description": "Plan Status" + }, + "bgp": { + "type": "boolean", + "description": "BGP enabled" + }, + "companyId": { + "type": "string", + "description": "Company ID" + }, + "description": { + "type": "string", + "description": "Plan Description" + }, + "deviceTypes": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Device Types" + }, + "devices": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Devices" + }, + "fastRetention": { + "type": "integer", + "format": "int64", + "description": "Fast Rention in days" + }, + "fullRetention": { + "type": "integer", + "format": "int64", + "description": "Full Retention in days" + }, + "maxBigdataFps": { + "type": "integer", + "format": "int64", + "description": "Max data FPS" + }, + "maxDevices": { + "type": "integer", + "format": "int64", + "description": "Max Device" + }, + "maxFps": { + "type": "integer", + "format": "int64", + "description": "Max FPS" + }, + "cdate": { + "type": "string", + "format": "date-time", + "description": "Created Date" + }, + "edate": { + "type": "string", + "format": "date-time", + "description": "Updated Data" + }, + "metadata": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Plan Metadata" + } + }, + "title": "Plan" + }, + "v202504beta2Site": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Site ID" + }, + "siteName": { + "type": "string", + "description": "Site name" + }, + "lat": { + "type": "number", + "format": "double", + "description": "Site latitude" + }, + "lon": { + "type": "number", + "format": "double", + "description": "Site longitude" + }, + "companyId": { + "type": "string", + "description": "Company ID" + } + }, + "title": "Site" + }, + "v202504beta2UpdateDeviceLabelsResponse": { + "type": "object", + "properties": { + "device": { + "$ref": "#/components/schemas/v202504beta2DeviceDetailed" + } + }, + "title": "UpdateDeviceLabelsResponse" + }, + "v202504beta2UpdateDeviceResponse": { + "type": "object", + "properties": { + "device": { + "$ref": "#/components/schemas/v202504beta2DeviceDetailed" + } + }, + "title": "UpdateDeviceResponse" + }, + "v202504beta2UpdateDevicesRequest": { + "type": "object", + "properties": { + "devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202504beta2DeviceConcise" + }, + "description": "List of configurations of devices to be updated" + } + }, + "title": "UpdateDevicesRequest", + "required": [ + "devices" + ] + }, + "v202504beta2UpdateDevicesResponse": { + "type": "object", + "properties": { + "devices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202504beta2DeviceDetailed" + }, + "description": "List of configurations of updated devices" + }, + "failedDevices": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of IDs of devices that failed to be updated" + } + }, + "title": "UpdateDevicesResponse" + }, + "SiteServiceUpdateSiteBody": { + "type": "object", + "properties": { + "site": { + "type": "object", + "properties": { + "title": { + "type": "string", + "description": "User selected title/name" + }, + "lat": { + "type": "number", + "format": "double", + "description": "Latitude (signed decimal degrees)" + }, + "lon": { + "type": "number", + "format": "double", + "description": "Longitude (signed decimal degrees)" + }, + "postalAddress": { + "$ref": "#/components/schemas/v202509PostalAddress" + }, + "type": { + "$ref": "#/components/schemas/v202509SiteType" + }, + "addressClassification": { + "$ref": "#/components/schemas/v202509SiteIpAddressClassification" + }, + "architecture": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202509LayerSet" + }, + "description": "Logical network topology/architecture" + }, + "siteMarket": { + "$ref": "#/components/schemas/v202509SiteMarket" + }, + "peeringdbSiteMapping": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202509PeeringDBSiteMapping" + }, + "description": "List of PeeringDB site mappings associated with this site" + } + }, + "title": "Site" + } + }, + "title": "UpdateSiteRequest", + "required": [ + "title", + "type", + "site" + ] + }, + "SiteServiceUpdateSiteMarketBody": { + "type": "object", + "properties": { + "siteMarket": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "User selected unique name" + }, + "description": { + "type": "string", + "description": "Free-form description" + }, + "numberOfSites": { + "type": "integer", + "format": "int64", + "description": "Number of sites in this market", + "readOnly": true + }, + "cdate": { + "type": "string", + "format": "date-time", + "description": "Creation timestamp (UTC)", + "readOnly": true + }, + "edate": { + "type": "string", + "format": "date-time", + "description": "Last modification timestamp (UTC)", + "readOnly": true + } + }, + "title": "SiteMarket" + } + }, + "title": "UpdateSiteMarketRequest", + "required": [ + "name", + "siteMarket" + ] + }, + "v202509CreateSiteMarketRequest": { + "type": "object", + "properties": { + "siteMarket": { + "$ref": "#/components/schemas/v202509SiteMarket" + } + }, + "title": "CreateSiteMarketRequest", + "required": [ + "siteMarket" + ] + }, + "v202509CreateSiteMarketResponse": { + "type": "object", + "properties": { + "siteMarket": { + "$ref": "#/components/schemas/v202509SiteMarket" + } + }, + "title": "CreateSiteMarketResponse" + }, + "v202509CreateSiteRequest": { + "type": "object", + "properties": { + "site": { + "$ref": "#/components/schemas/v202509Site" + } + }, + "title": "CreateSiteRequest", + "required": [ + "site" + ] + }, + "v202509CreateSiteResponse": { + "type": "object", + "properties": { + "site": { + "$ref": "#/components/schemas/v202509Site" + } + }, + "title": "CreateSiteResponse" + }, + "v202509DeleteSiteMarketResponse": { + "type": "object", + "title": "DeleteSiteMarketResponse" + }, + "v202509DeleteSiteResponse": { + "type": "object", + "title": "DeleteSiteResponse" + }, + "v202509GetSiteMarketResponse": { + "type": "object", + "properties": { + "siteMarket": { + "$ref": "#/components/schemas/v202509SiteMarket" + } + }, + "title": "GetSiteMarketResponse" + }, + "v202509GetSiteResponse": { + "type": "object", + "properties": { + "site": { + "$ref": "#/components/schemas/v202509Site" + } + }, + "title": "GetSiteResponse" + }, + "v202509Layer": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the network layer" + }, + "deviceIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "IDs of devices that are deemed to be part of the network layer" + } + }, + "title": "Layer" + }, + "v202509LayerSet": { + "type": "object", + "properties": { + "layers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202509Layer" + }, + "description": "List of parallel network layers" + } + }, + "title": "LayerSet" + }, + "v202509ListSiteMarketsResponse": { + "type": "object", + "properties": { + "siteMarkets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202509SiteMarket" + }, + "description": "List of configurations of requested site markets" + }, + "invalidCount": { + "type": "integer", + "format": "int64", + "description": "Number of invalid entries encountered while collecting data" + } + }, + "title": "ListSiteMarketsResponse" + }, + "v202509ListSitesResponse": { + "type": "object", + "properties": { + "sites": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202509Site" + }, + "description": "List of configurations of requested sites" + }, + "invalidCount": { + "type": "integer", + "format": "int64", + "description": "Number of invalid entries encountered while collecting data" + } + }, + "title": "ListSitesResponse" + }, + "v202509PeeringDBSiteMapping": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Peering DB id" + }, + "siteId": { + "type": "string", + "description": "Peering DB site id" + }, + "peeringdbFacId": { + "type": "string", + "description": "Peering DB facility id" + }, + "edate": { + "type": "string", + "format": "date-time", + "description": "Last modification timestamp (UTC)", + "readOnly": true + }, + "cdate": { + "type": "string", + "format": "date-time", + "description": "Creation timestamp (UTC)", + "readOnly": true + }, + "companyId": { + "type": "string", + "description": "Company ID" + } + }, + "required": [ + "id", + "siteId", + "peeringdbFacId" + ] + }, + "v202509PostalAddress": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "Street address" + }, + "city": { + "type": "string", + "description": "City (full name)" + }, + "region": { + "type": "string", + "description": "Geographical region" + }, + "postalCode": { + "type": "string", + "description": "Country specific postal code" + }, + "country": { + "type": "string", + "description": "Country (full name or country code)" + } + }, + "title": "PostalAddress", + "required": [ + "address", + "city", + "country" + ] + }, + "v202509Site": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "System generated unique identifier", + "readOnly": true + }, + "title": { + "type": "string", + "description": "User selected title/name" + }, + "lat": { + "type": "number", + "format": "double", + "description": "Latitude (signed decimal degrees)" + }, + "lon": { + "type": "number", + "format": "double", + "description": "Longitude (signed decimal degrees)" + }, + "postalAddress": { + "$ref": "#/components/schemas/v202509PostalAddress" + }, + "type": { + "$ref": "#/components/schemas/v202509SiteType" + }, + "addressClassification": { + "$ref": "#/components/schemas/v202509SiteIpAddressClassification" + }, + "architecture": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202509LayerSet" + }, + "description": "Logical network topology/architecture" + }, + "siteMarket": { + "$ref": "#/components/schemas/v202509SiteMarket" + }, + "peeringdbSiteMapping": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202509PeeringDBSiteMapping" + }, + "description": "List of PeeringDB site mappings associated with this site" + } + }, + "title": "Site", + "required": [ + "title", + "type" + ] + }, + "v202509SiteIpAddressClassification": { + "type": "object", + "properties": { + "infrastructureNetworks": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of IP address prefixes (in standard CIDR notation) used in infrastructure networks" + }, + "userAccessNetworks": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of IP address prefixes (in standard CIDR notation) used in access networks" + }, + "otherNetworks": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of IP address prefixes (in standard CIDR notation) used in other networks" + } + }, + "title": "SiteIpAddressClassification" + }, + "v202509SiteMarket": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "System generated unique identifier", + "readOnly": true + }, + "name": { + "type": "string", + "description": "User selected unique name" + }, + "description": { + "type": "string", + "description": "Free-form description" + }, + "numberOfSites": { + "type": "integer", + "format": "int64", + "description": "Number of sites in this market", + "readOnly": true + }, + "cdate": { + "type": "string", + "format": "date-time", + "description": "Creation timestamp (UTC)", + "readOnly": true + }, + "edate": { + "type": "string", + "format": "date-time", + "description": "Last modification timestamp (UTC)", + "readOnly": true + } + }, + "title": "SiteMarket", + "required": [ + "name" + ] + }, + "v202509SiteType": { + "type": "string", + "enum": [ + "SITE_TYPE_UNSPECIFIED", + "SITE_TYPE_DATA_CENTER", + "SITE_TYPE_CLOUD", + "SITE_TYPE_BRANCH", + "SITE_TYPE_CONNECTIVITY", + "SITE_TYPE_CUSTOMER", + "SITE_TYPE_OTHER" + ], + "default": "SITE_TYPE_UNSPECIFIED", + "description": "- SITE_TYPE_UNSPECIFIED: Invalid value.\n - SITE_TYPE_DATA_CENTER: Data center site type.\n - SITE_TYPE_CLOUD: Cloud site type.\n - SITE_TYPE_BRANCH: Branch office site type.\n - SITE_TYPE_CONNECTIVITY: Connectivity/PoP site type.\n - SITE_TYPE_CUSTOMER: Customer/partner site type.\n - SITE_TYPE_OTHER: Other site type.", + "title": "SiteType" + }, + "v202509UpdateSiteMarketResponse": { + "type": "object", + "properties": { + "siteMarket": { + "$ref": "#/components/schemas/v202509SiteMarket" + } + }, + "title": "UpdateSiteMarketResponse" + }, + "v202509UpdateSiteResponse": { + "type": "object", + "properties": { + "site": { + "$ref": "#/components/schemas/v202509Site" + } + }, + "title": "UpdateSiteResponse" + } + } + } +} \ No newline at end of file diff --git a/Kentik/OpenAPIs/kentik_site_api-v202509.json b/Kentik/OpenAPIs/kentik_site_api-v202509.json new file mode 100644 index 0000000..cd6271c --- /dev/null +++ b/Kentik/OpenAPIs/kentik_site_api-v202509.json @@ -0,0 +1,943 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Site Configuration API", + "description": "# Overview\nThe Site Configuration API provides programmatic access to configuration of Sites and Site Markets:\n\n* **Site**: A site is a specific user-defined physical location (e.g. a data center at a given address) or logical location at which there is hosting of your devices, services, providers, or partner networks. Information that can be associated with a site includes the classification of IP addresses and the site's logical network topology/architecture.\n* **Site Market**: Sites with any common characteristics of your choosing (e.g. all PoPs in a particular region) can be logically grouped into a site market.\n\nBoth REST endpoint and gRPC RPCs are provided.\n\n***Notes:*** \n - Once a site is created in Kentik, you can assign one or more devices to the site via the settings for those devices; to do so programmatically you'd use the v5 Device API (see [Device Create](https://kb.kentik.com/v0/Ec05.htm#Ec05-Device_Create)).\n - Sites can also be managed using the legacy REST-only [Site API](https://kb.kentik.com/v0/Ec10.htm#Ec10-Site_API), which provides access to a subset of site configuration attributes.", + "version": "v202509", + "contact": { + "name": "Kentik API Engineering", + "url": "https://github.com/kentik/api-schema-public" + } + }, + "tags": [ + { + "name": "SiteService" + } + ], + "paths": { + "/site/v202509/site_markets": { + "get": { + "summary": "List all site markets.", + "description": "Returns list of configured site markets.", + "operationId": "ListSiteMarkets", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202509ListSiteMarketsResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "tags": [ + "SiteService" + ] + }, + "post": { + "summary": "Configure a new site market.", + "description": "Create configuration for a new site market. Returns the newly created configuration.", + "operationId": "CreateSiteMarket", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202509CreateSiteMarketResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202509CreateSiteMarketRequest" + } + } + }, + "required": true + }, + "tags": [ + "SiteService" + ] + } + }, + "/site/v202509/site_markets/{id}": { + "get": { + "summary": "Retrieve configuration of a site market.", + "description": "Returns configuration of a site market specified by ID.", + "operationId": "GetSiteMarket", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202509GetSiteMarketResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "ID of the requested site market", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "SiteService" + ] + }, + "delete": { + "summary": "Delete configuration of a site market.", + "description": "Deletes configuration of a site market with specific ID.", + "operationId": "DeleteSiteMarket", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202509DeleteSiteMarketResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "ID of the site market to be deleted", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "SiteService" + ] + }, + "put": { + "summary": "Updates configuration of a site market.", + "description": "Replaces configuration of a site market with attributes in the request. Returns the updated configuration.", + "operationId": "UpdateSiteMarket", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202509UpdateSiteMarketResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "System generated unique identifier", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SiteServiceUpdateSiteMarketBody" + } + } + }, + "required": true + }, + "tags": [ + "SiteService" + ] + } + }, + "/site/v202509/sites": { + "get": { + "summary": "List all sites.", + "description": "Returns list of configured sites.", + "operationId": "ListSites", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202509ListSitesResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "tags": [ + "SiteService" + ] + }, + "post": { + "summary": "Configure a new site.", + "description": "Create configuration for a new site. Returns the newly created configuration.", + "operationId": "CreateSite", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202509CreateSiteResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202509CreateSiteRequest" + } + } + }, + "required": true + }, + "tags": [ + "SiteService" + ] + } + }, + "/site/v202509/sites/{id}": { + "get": { + "summary": "Retrieve configuration of a site.", + "description": "Returns configuration of a site specified by ID.", + "operationId": "GetSite", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202509GetSiteResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "ID of the requested site", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "SiteService" + ] + }, + "delete": { + "summary": "Delete configuration of a site.", + "description": "Deletes configuration of a site with specific ID.", + "operationId": "DeleteSite", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202509DeleteSiteResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "ID of the site to be deleted", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "tags": [ + "SiteService" + ] + }, + "put": { + "summary": "Updates configuration of a site.", + "description": "Replaces configuration of a site with attributes in the request. Returns the updated configuration.", + "operationId": "UpdateSite", + "responses": { + "200": { + "description": "A successful response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/v202509UpdateSiteResponse" + } + } + } + }, + "default": { + "description": "An unexpected error response.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rpcStatus" + } + } + } + } + }, + "parameters": [ + { + "name": "id", + "description": "System generated unique identifier", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SiteServiceUpdateSiteBody" + } + } + }, + "required": true + }, + "tags": [ + "SiteService" + ] + } + } + }, + "security": [ + { + "email": [], + "token": [] + } + ], + "externalDocs": { + "description": "General information about Kentik APIs", + "url": "https://kb.kentik.com/v0/Ab09.htm#Ab09-APIs_Overview" + }, + "components": { + "securitySchemes": { + "email": { + "type": "apiKey", + "name": "X-CH-Auth-Email", + "in": "header" + }, + "token": { + "type": "apiKey", + "name": "X-CH-Auth-API-Token", + "in": "header" + } + }, + "schemas": { + "SiteServiceUpdateSiteBody": { + "type": "object", + "properties": { + "site": { + "type": "object", + "properties": { + "title": { + "type": "string", + "description": "User selected title/name" + }, + "lat": { + "type": "number", + "format": "double", + "description": "Latitude (signed decimal degrees)" + }, + "lon": { + "type": "number", + "format": "double", + "description": "Longitude (signed decimal degrees)" + }, + "postalAddress": { + "$ref": "#/components/schemas/v202509PostalAddress" + }, + "type": { + "$ref": "#/components/schemas/v202509SiteType" + }, + "addressClassification": { + "$ref": "#/components/schemas/v202509SiteIpAddressClassification" + }, + "architecture": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202509LayerSet" + }, + "description": "Logical network topology/architecture" + }, + "siteMarket": { + "$ref": "#/components/schemas/v202509SiteMarket" + }, + "peeringdbSiteMapping": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202509PeeringDBSiteMapping" + }, + "description": "List of PeeringDB site mappings associated with this site" + } + }, + "title": "Site" + } + }, + "title": "UpdateSiteRequest", + "required": [ + "title", + "type", + "site" + ] + }, + "SiteServiceUpdateSiteMarketBody": { + "type": "object", + "properties": { + "siteMarket": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "User selected unique name" + }, + "description": { + "type": "string", + "description": "Free-form description" + }, + "numberOfSites": { + "type": "integer", + "format": "int64", + "description": "Number of sites in this market", + "readOnly": true + }, + "cdate": { + "type": "string", + "format": "date-time", + "description": "Creation timestamp (UTC)", + "readOnly": true + }, + "edate": { + "type": "string", + "format": "date-time", + "description": "Last modification timestamp (UTC)", + "readOnly": true + } + }, + "title": "SiteMarket" + } + }, + "title": "UpdateSiteMarketRequest", + "required": [ + "name", + "siteMarket" + ] + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string" + } + }, + "additionalProperties": {} + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/protobufAny" + } + } + } + }, + "v202509CreateSiteMarketRequest": { + "type": "object", + "properties": { + "siteMarket": { + "$ref": "#/components/schemas/v202509SiteMarket" + } + }, + "title": "CreateSiteMarketRequest", + "required": [ + "siteMarket" + ] + }, + "v202509CreateSiteMarketResponse": { + "type": "object", + "properties": { + "siteMarket": { + "$ref": "#/components/schemas/v202509SiteMarket" + } + }, + "title": "CreateSiteMarketResponse" + }, + "v202509CreateSiteRequest": { + "type": "object", + "properties": { + "site": { + "$ref": "#/components/schemas/v202509Site" + } + }, + "title": "CreateSiteRequest", + "required": [ + "site" + ] + }, + "v202509CreateSiteResponse": { + "type": "object", + "properties": { + "site": { + "$ref": "#/components/schemas/v202509Site" + } + }, + "title": "CreateSiteResponse" + }, + "v202509DeleteSiteMarketResponse": { + "type": "object", + "title": "DeleteSiteMarketResponse" + }, + "v202509DeleteSiteResponse": { + "type": "object", + "title": "DeleteSiteResponse" + }, + "v202509GetSiteMarketResponse": { + "type": "object", + "properties": { + "siteMarket": { + "$ref": "#/components/schemas/v202509SiteMarket" + } + }, + "title": "GetSiteMarketResponse" + }, + "v202509GetSiteResponse": { + "type": "object", + "properties": { + "site": { + "$ref": "#/components/schemas/v202509Site" + } + }, + "title": "GetSiteResponse" + }, + "v202509Layer": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the network layer" + }, + "deviceIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "IDs of devices that are deemed to be part of the network layer" + } + }, + "title": "Layer" + }, + "v202509LayerSet": { + "type": "object", + "properties": { + "layers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202509Layer" + }, + "description": "List of parallel network layers" + } + }, + "title": "LayerSet" + }, + "v202509ListSiteMarketsResponse": { + "type": "object", + "properties": { + "siteMarkets": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202509SiteMarket" + }, + "description": "List of configurations of requested site markets" + }, + "invalidCount": { + "type": "integer", + "format": "int64", + "description": "Number of invalid entries encountered while collecting data" + } + }, + "title": "ListSiteMarketsResponse" + }, + "v202509ListSitesResponse": { + "type": "object", + "properties": { + "sites": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202509Site" + }, + "description": "List of configurations of requested sites" + }, + "invalidCount": { + "type": "integer", + "format": "int64", + "description": "Number of invalid entries encountered while collecting data" + } + }, + "title": "ListSitesResponse" + }, + "v202509PeeringDBSiteMapping": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Peering DB id" + }, + "siteId": { + "type": "string", + "description": "Peering DB site id" + }, + "peeringdbFacId": { + "type": "string", + "description": "Peering DB facility id" + }, + "edate": { + "type": "string", + "format": "date-time", + "description": "Last modification timestamp (UTC)", + "readOnly": true + }, + "cdate": { + "type": "string", + "format": "date-time", + "description": "Creation timestamp (UTC)", + "readOnly": true + }, + "companyId": { + "type": "string", + "description": "Company ID" + } + }, + "required": [ + "id", + "siteId", + "peeringdbFacId" + ] + }, + "v202509PostalAddress": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "Street address" + }, + "city": { + "type": "string", + "description": "City (full name)" + }, + "region": { + "type": "string", + "description": "Geographical region" + }, + "postalCode": { + "type": "string", + "description": "Country specific postal code" + }, + "country": { + "type": "string", + "description": "Country (full name or country code)" + } + }, + "title": "PostalAddress", + "required": [ + "address", + "city", + "country" + ] + }, + "v202509Site": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "System generated unique identifier", + "readOnly": true + }, + "title": { + "type": "string", + "description": "User selected title/name" + }, + "lat": { + "type": "number", + "format": "double", + "description": "Latitude (signed decimal degrees)" + }, + "lon": { + "type": "number", + "format": "double", + "description": "Longitude (signed decimal degrees)" + }, + "postalAddress": { + "$ref": "#/components/schemas/v202509PostalAddress" + }, + "type": { + "$ref": "#/components/schemas/v202509SiteType" + }, + "addressClassification": { + "$ref": "#/components/schemas/v202509SiteIpAddressClassification" + }, + "architecture": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202509LayerSet" + }, + "description": "Logical network topology/architecture" + }, + "siteMarket": { + "$ref": "#/components/schemas/v202509SiteMarket" + }, + "peeringdbSiteMapping": { + "type": "array", + "items": { + "$ref": "#/components/schemas/v202509PeeringDBSiteMapping" + }, + "description": "List of PeeringDB site mappings associated with this site" + } + }, + "title": "Site", + "required": [ + "title", + "type" + ] + }, + "v202509SiteIpAddressClassification": { + "type": "object", + "properties": { + "infrastructureNetworks": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of IP address prefixes (in standard CIDR notation) used in infrastructure networks" + }, + "userAccessNetworks": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of IP address prefixes (in standard CIDR notation) used in access networks" + }, + "otherNetworks": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of IP address prefixes (in standard CIDR notation) used in other networks" + } + }, + "title": "SiteIpAddressClassification" + }, + "v202509SiteMarket": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "System generated unique identifier", + "readOnly": true + }, + "name": { + "type": "string", + "description": "User selected unique name" + }, + "description": { + "type": "string", + "description": "Free-form description" + }, + "numberOfSites": { + "type": "integer", + "format": "int64", + "description": "Number of sites in this market", + "readOnly": true + }, + "cdate": { + "type": "string", + "format": "date-time", + "description": "Creation timestamp (UTC)", + "readOnly": true + }, + "edate": { + "type": "string", + "format": "date-time", + "description": "Last modification timestamp (UTC)", + "readOnly": true + } + }, + "title": "SiteMarket", + "required": [ + "name" + ] + }, + "v202509SiteType": { + "type": "string", + "enum": [ + "SITE_TYPE_UNSPECIFIED", + "SITE_TYPE_DATA_CENTER", + "SITE_TYPE_CLOUD", + "SITE_TYPE_BRANCH", + "SITE_TYPE_CONNECTIVITY", + "SITE_TYPE_CUSTOMER", + "SITE_TYPE_OTHER" + ], + "default": "SITE_TYPE_UNSPECIFIED", + "description": "- SITE_TYPE_UNSPECIFIED: Invalid value.\n - SITE_TYPE_DATA_CENTER: Data center site type.\n - SITE_TYPE_CLOUD: Cloud site type.\n - SITE_TYPE_BRANCH: Branch office site type.\n - SITE_TYPE_CONNECTIVITY: Connectivity/PoP site type.\n - SITE_TYPE_CUSTOMER: Customer/partner site type.\n - SITE_TYPE_OTHER: Other site type.", + "title": "SiteType" + }, + "v202509UpdateSiteMarketResponse": { + "type": "object", + "properties": { + "siteMarket": { + "$ref": "#/components/schemas/v202509SiteMarket" + } + }, + "title": "UpdateSiteMarketResponse" + }, + "v202509UpdateSiteResponse": { + "type": "object", + "properties": { + "site": { + "$ref": "#/components/schemas/v202509Site" + } + }, + "title": "UpdateSiteResponse" + } + } + } +} diff --git a/Kentik/README.md b/Kentik/README.md index 465150d..b50b8f5 100644 --- a/Kentik/README.md +++ b/Kentik/README.md @@ -1,15 +1,124 @@ -# Kentik Assets -Assets for the Itential Platform. +Kentik is a network observability platform for NetFlow analytics, DDoS detection, and infrastructure monitoring. + +This project provides an OpenAPI spec for automating against Kentik's Device and Site APIs via an Integration Model, plus CRUD workflows built on that model. It also retains a set of pre-existing sample-use-case workflows built on the legacy Kentik adapter, demonstrating cross-system orchestration with AWS, ServiceNow, NetBox, and Microsoft Teams. + +## Table of Contents + +- [Contents](#contents) +- [Requirements](#requirements) +- [Integration Configuration](#integration-configuration) +- [OpenAPIs](#openapis) + - [`kentik_device_site_api-latest.json`](#kentik_device_site_api-latestjson) + - [`kentik_device_api-v202504beta2.json`](#kentik_device_api-v202504beta2json) + - [`kentik_site_api-v202509.json`](#kentik_site_api-v202509json) +- [Studio Projects](#studio-projects) + - [Kentik Project](#kentik-project) + - [Folder Structure](#folder-structure) + - [Dependencies](#dependencies) + +## Contents + +| Asset | Description | +|---|---| +| [OpenAPIs/](./OpenAPIs/) | Kentik Device & Site API OpenAPI spec — curated `-latest` plus the two official dated specs it was combined from | +| [Studio Projects/](./Studio%20Projects/) | Itential Platform project containing the Devices/Sites/Site Markets CRUD workflows and the pre-existing sample-use-case workflows | + +## Requirements + +| Requirement | Version | +|---|---| +| Itential Platform | 6.x | +| `Kentik Device & Site API:latest` Integration Model | Required to run the Devices/Sites/Site Markets folders | +| [Kentik 5.x Adapter](https://gitlab.com/itentialopensource/adapters/adapter-kentick_v5) | Required to run the Create Device/Device Flow Test/Sample Use Cases folders (legacy, unmigrated) | + +> **Note:** This project does not require Itential Gateway for the Devices/Sites/Site Markets folders. All API calls are made directly from Itential Platform to Kentik's REST API. + +## Integration Configuration + +Import `kentik_device_site_api-latest.json` as an Integration Model in **Admin > Integrations**, then create an integration pointing at Kentik's v6 API gateway. + +Authentication is a pair of API key headers: + +``` +X-CH-Auth-Email: +X-CH-Auth-API-Token: +``` + +Generate an API token at Kentik → Settings → My Profile → API Tokens. + +The instance's `authentication`/`server` properties should look like this once configured: + +```json +{ + "authentication": { + "email": { "value": "" }, + "token": { "value": "" } + }, + "server": { + "protocol": "https", + "host": "grpc.api.kentik.com", + "base_path": "" + } +} +``` + +## OpenAPIs + +| Spec | Version | Operations | Description | +|---|---|---|---| +| [`kentik_device_site_api-latest.json`](./OpenAPIs/kentik_device_site_api-latest.json) | latest (curated) | 20 | Combines the official Device and Site v6 APIs into one Integration Model — see breakdown below | +| [`kentik_device_api-v202504beta2.json`](./OpenAPIs/kentik_device_api-v202504beta2.json) | v202504beta2 | 10 | Full, unmodified official Device API spec | +| [`kentik_site_api-v202509.json`](./OpenAPIs/kentik_site_api-v202509.json) | v202509 | 10 | Full, unmodified official Site API spec | + +### `kentik_device_site_api-latest.json` + +**Important context:** Kentik's legacy v5 REST API — the one the [Kentik 5.x Adapter](https://gitlab.com/itentialopensource/adapters/adapter-kentick_v5) targets — was **deprecated in January 2025**, and no official OpenAPI/Swagger spec was ever published for it. Kentik's current, officially-specified, actively-supported API is v6, based on gRPC with an automatic REST/JSON translation layer (gRPC-gateway). This spec targets v6. + +Combines two official Kentik v6 specs from [`github.com/kentik/api-schema-public`](https://github.com/kentik/api-schema-public) into a single Integration Model: the Device API (`v202504beta2`, 10 operations) and the Site API (`v202509`, 10 operations). Both are already narrow, single-purpose service APIs — every operation is CRUD against devices, sites, or site markets — so all 20 operations are included in full. + +Two endpoints used by the legacy adapter (`/api/ui/companySettings`, `/api/ui/devices/non-cloud-status`) are **not** part of this spec — they're undocumented internal UI-backend endpoints (no official spec, no v6 equivalent found), reverse-engineered from browser traffic rather than sourced from any published API. They remain in use only by the legacy `Device Flow Test` and `Device Onboarding` workflows in the Studio Project below. + +Operations included, by category: + +- **Devices**: List, create (single or batch), update (single or batch), delete (single or batch), get by ID, get by name, update labels +- **Sites**: List, create, get, update, delete +- **Site Markets**: List, create, get, update, delete + +### `kentik_device_api-v202504beta2.json` + +Full, unmodified official vendor spec for the Kentik Device API, version `v202504beta2` — preserved as-is from `github.com/kentik/api-schema-public`. + +### `kentik_site_api-v202509.json` + +Full, unmodified official vendor spec for the Kentik Site API, version `v202509` — preserved as-is from `github.com/kentik/api-schema-public`. + +--- + +## Studio Projects -## Projects ### Kentik Project -- Create Device -- Device Flow Test -- _Sample Use Cases_ - - AWS Blocked Traffic Event - - AWS Blocked Traffic Event - Reset - - Device Onboarding - - Device Onboarding - Reset + +#### Folder Structure + +| Folder | Workflows | Scope | Backing | +|---|---|---|---| +| Devices | 10 | Device CRUD (list, create, update, delete, get by ID/name, batch ops, labels) | `Kentik Device & Site API:latest` Integration Model | +| Sites | 5 | Site CRUD | `Kentik Device & Site API:latest` Integration Model | +| Site Markets | 5 | Site Market CRUD | `Kentik Device & Site API:latest` Integration Model | +| Create Device | 1 | Create a device (legacy) | Kentik 5.x Adapter | +| Device Flow Test | 2 | Find devices / raw flow-status check via an undocumented internal endpoint (legacy) | Kentik 5.x Adapter | +| Sample Use Cases | 28 | Cross-system reference workflows: AWS security-group remediation, ServiceNow incident/change tickets, NetBox sync, MS Teams notifications, IOS-XE config push via IAG (legacy, unmigrated — see note below) | Kentik 5.x Adapter, plus AWS EC2, ServiceNow, NetBox, and Microsoft Teams adapters | + +A few resource names in the Devices folder are prefixed with `Kentik` (`Create Kentik Device`, `Get Kentik Device`, `Update Kentik Device`) to avoid colliding with identically-named workflows already published for other products — workflow names are unique across the whole Itential Platform instance, not scoped per-project. + +> **Note on Sample Use Cases:** This folder is a multi-vendor reference solution (Kentik + AWS + ServiceNow + NetBox + Microsoft Teams + IAG device config push), not a Kentik-specific CRUD surface. It's left as-is on the legacy Kentik 5.x Adapter — migrating it would mean rewriting orchestration logic that spans several other products' adapters, well beyond the scope of this pass. It also depends on the two undocumented `/api/ui/` endpoints noted above, which have no v6 equivalent. #### Dependencies -- [Kentik 5.x Adapter](https://gitlab.com/itentialopensource/adapters/adapter-kentick_v5) + +| Dependency | Notes | +|---|---| +| `Kentik Device & Site API:latest` Integration Model | Import from [`kentik_device_site_api-latest.json`](./OpenAPIs/kentik_device_site_api-latest.json) before importing the project. Backs the Devices, Sites, and Site Markets folders. | +| `Kentik` integration instance | Create in **Admin > Integrations** with the connection properties above. Workflows are wired to an integration instance named `Kentik` — update the `adapter_id` value in each workflow task if yours is named differently | +| [Kentik 5.x Adapter](https://gitlab.com/itentialopensource/adapters/adapter-kentick_v5) | Required for the Create Device, Device Flow Test, and Sample Use Cases folders (legacy, unmigrated) | + +**Testing status:** the 20 Devices/Sites/Site Markets workflows were created and schema-validated against a running Itential Platform instance, using a placeholder integration instance — no Kentik test account was available for this pass, so none have been executed against a live Kentik account. diff --git a/Kentik/Studio Projects/Kentik.project.json b/Kentik/Studio Projects/Kentik.project.json index 7d67e94..a5a2ace 100644 --- a/Kentik/Studio Projects/Kentik.project.json +++ b/Kentik/Studio Projects/Kentik.project.json @@ -1,7 +1,7 @@ { "_id": "66d032bd21161b4df2717499", "name": "Kentik", - "description": "Kentik Project has assets for Creating Device, Device Flow Test, AWS Blocked Traffic Event, AWS Blocked Traffic Event Reset, Device Onboarding, and Device Onboarding Reset", + "description": "Kentik Project has assets for Creating Device, Device Flow Test, AWS Blocked Traffic Event, AWS Blocked Traffic Event Reset, Device Onboarding, and Device Onboarding Reset. Also includes Devices, Sites, and Site Markets CRUD workflows backed by the Kentik Device & Site API Integration Model (v6).", "components": [ { "iid": 0, @@ -216,28 +216,74 @@ "type": "object", "properties": { "summary": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "comments": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "adapterId": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] } }, - "required": ["summary", "comments", "adapterId"] + "required": [ + "summary", + "comments", + "adapterId" + ] }, "outputSchema": { "type": "object", "properties": { "summary": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "comments": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "adapterId": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "_id": { "type": "string", @@ -247,10 +293,24 @@ "type": "string" }, "serviceNowError": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "createdIncident": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] } } }, @@ -445,34 +505,95 @@ "type": "object", "properties": { "text": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "title": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "webhookKey": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "adapterId": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] } }, - "required": ["text", "title", "webhookKey", "adapterId"] + "required": [ + "text", + "title", + "webhookKey", + "adapterId" + ] }, "outputSchema": { "type": "object", "properties": { "text": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "title": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "webhookKey": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "adapterId": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "_id": { "type": "string", @@ -482,7 +603,14 @@ "type": "string" }, "errorMessage": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] } } }, @@ -715,21 +843,29 @@ "properties": { "sourceIP": { "type": "string", - "examples": ["10.10.10.10"] + "examples": [ + "10.10.10.10" + ] }, "awsEC2Adapter": { "type": "string", - "examples": ["AWS"] + "examples": [ + "AWS" + ] }, "awsSecurityGroup": { "type": "string", - "examples": ["webserver-kentik"] + "examples": [ + "webserver-kentik" + ] } }, "required": [] } }, - "required": ["formData"] + "required": [ + "formData" + ] }, "outputSchema": { "type": "object", @@ -739,15 +875,21 @@ "properties": { "sourceIP": { "type": "string", - "examples": ["10.10.10.10"] + "examples": [ + "10.10.10.10" + ] }, "awsEC2Adapter": { "type": "string", - "examples": ["AWS"] + "examples": [ + "AWS" + ] }, "awsSecurityGroup": { "type": "string", - "examples": ["webserver-kentik"] + "examples": [ + "webserver-kentik" + ] } }, "required": [] @@ -1167,7 +1309,14 @@ "type": "object", "properties": { "adapterId": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "startTime": { "title": "timeObject", @@ -1176,27 +1325,44 @@ "formatString": { "title": "formatString", "type": "string", - "examples": ["YYYY-MM-DDTHH:mm:ss.SSSSSSZZ"] + "examples": [ + "YYYY-MM-DDTHH:mm:ss.SSSSSSZZ" + ] }, "time": { "title": "timeString", "type": "string", - "examples": ["2019-01-01T14:28:21.886000-0700"] + "examples": [ + "2019-01-01T14:28:21.886000-0700" + ] } } }, "deviceName": { "type": "string", - "examples": ["deviceName"] + "examples": [ + "deviceName" + ] } }, - "required": ["adapterId", "startTime", "deviceName"] + "required": [ + "adapterId", + "startTime", + "deviceName" + ] }, "outputSchema": { "type": "object", "properties": { "adapterId": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "startTime": { "title": "timeObject", @@ -1205,18 +1371,24 @@ "formatString": { "title": "formatString", "type": "string", - "examples": ["YYYY-MM-DDTHH:mm:ss.SSSSSSZZ"] + "examples": [ + "YYYY-MM-DDTHH:mm:ss.SSSSSSZZ" + ] }, "time": { "title": "timeString", "type": "string", - "examples": ["2019-01-01T14:28:21.886000-0700"] + "examples": [ + "2019-01-01T14:28:21.886000-0700" + ] } } }, "deviceName": { "type": "string", - "examples": ["deviceName"] + "examples": [ + "deviceName" + ] }, "_id": { "type": "string", @@ -1227,7 +1399,13 @@ }, "testResult": { "title": "output", - "type": ["array", "string", "boolean", "number", "object"] + "type": [ + "array", + "string", + "boolean", + "number", + "object" + ] } } }, @@ -1529,17 +1707,23 @@ "properties": { "deviceName": { "type": "string", - "examples": ["IOS_Device_Name"] + "examples": [ + "IOS_Device_Name" + ] }, "kentikAdapter": { "type": "string", - "examples": ["Kentik v5"] + "examples": [ + "Kentik v5" + ] } }, "required": [] } }, - "required": ["formData"] + "required": [ + "formData" + ] }, "outputSchema": { "type": "object", @@ -1549,11 +1733,15 @@ "properties": { "deviceName": { "type": "string", - "examples": ["IOS_Device_Name"] + "examples": [ + "IOS_Device_Name" + ] }, "kentikAdapter": { "type": "string", - "examples": ["Kentik v5"] + "examples": [ + "Kentik v5" + ] } }, "required": [] @@ -1959,11 +2147,20 @@ ] }, "autoApprove": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "device": { "type": "string", - "examples": ["deviceName"] + "examples": [ + "deviceName" + ] } }, "required": [ @@ -1994,11 +2191,20 @@ ] }, "autoApprove": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "device": { "type": "string", - "examples": ["deviceName"] + "examples": [ + "deviceName" + ] }, "_id": { "type": "string", @@ -2346,31 +2552,65 @@ "type": "object", "properties": { "deviceName": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "_id": { "title": "job_id", "type": "string", - "examples": ["test"] + "examples": [ + "test" + ] }, "adapterId": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] } }, - "required": ["deviceName", "_id", "adapterId"] + "required": [ + "deviceName", + "_id", + "adapterId" + ] }, "outputSchema": { "type": "object", "properties": { "deviceName": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "_id": { "type": "string", "pattern": "^[0-9a-f]{24}$" }, "adapterId": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "initiator": { "type": "string" @@ -3005,12 +3245,21 @@ "type": "object", "properties": { "autoApprove": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "templateName": { "title": "template", "type": "string", - "examples": ["show version"] + "examples": [ + "show version" + ] }, "templateVariables": { "type": "object", @@ -3022,22 +3271,35 @@ ] }, "reattempt": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "_id": { "title": "job_id", "type": "string", - "examples": ["test"] + "examples": [ + "test" + ] }, "reattemptWaitTime": { "title": "minutes", "type": "integer", - "examples": [1] + "examples": [ + 1 + ] }, "reattemptQuantity": { "title": "attempts", "type": "integer", - "examples": [2] + "examples": [ + 2 + ] }, "deviceName": { "type": [ @@ -3049,7 +3311,9 @@ "object" ], "title": "elementN", - "examples": ["Device3"] + "examples": [ + "Device3" + ] } }, "required": [ @@ -3067,12 +3331,21 @@ "type": "object", "properties": { "autoApprove": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "templateName": { "title": "template", "type": "string", - "examples": ["show version"] + "examples": [ + "show version" + ] }, "templateVariables": { "type": "object", @@ -3084,7 +3357,14 @@ ] }, "reattempt": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "_id": { "type": "string", @@ -3093,12 +3373,16 @@ "reattemptWaitTime": { "title": "minutes", "type": "integer", - "examples": [1] + "examples": [ + 1 + ] }, "reattemptQuantity": { "title": "attempts", "type": "integer", - "examples": [2] + "examples": [ + 2 + ] }, "deviceName": { "type": [ @@ -3110,7 +3394,9 @@ "object" ], "title": "elementN", - "examples": ["Device3"] + "examples": [ + "Device3" + ] }, "initiator": { "type": "string" @@ -3120,14 +3406,18 @@ "properties": { "raw": { "type": "string", - "examples": ["show version"] + "examples": [ + "show version" + ] }, "all_pass_flag": { "type": "boolean" }, "evaluated": { "type": "string", - "examples": ["show version"] + "examples": [ + "show version" + ] }, "parameters": { "type": "object", @@ -3140,15 +3430,21 @@ "properties": { "rule": { "type": "string", - "examples": ["show version"] + "examples": [ + "show version" + ] }, "eval": { "type": "string", - "examples": ["contains"] + "examples": [ + "contains" + ] }, "raw": { "type": "string", - "examples": ["show version"] + "examples": [ + "show version" + ] }, "result": { "type": "boolean" @@ -3158,11 +3454,15 @@ }, "device": { "type": "string", - "examples": ["device1"] + "examples": [ + "device1" + ] }, "response": { "type": "string", - "examples": ["version: 10.0.0"] + "examples": [ + "version: 10.0.0" + ] }, "result": { "type": "boolean" @@ -3170,7 +3470,14 @@ } }, "templateError": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] } } }, @@ -3395,90 +3702,135 @@ "type": "object", "properties": { "adapterId": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "name": { "type": "string", - "examples": ["test-device"] + "examples": [ + "test-device" + ] }, "type": { "type": "string", - "examples": ["router"] + "examples": [ + "router" + ] }, "description": { "type": "string", - "examples": ["my device"] - }, + "examples": [ + "my device" + ] + }, "planId": { "type": "integer", - "examples": [44662] + "examples": [ + 44662 + ] }, "sampleRate": { "type": "integer", - "examples": [1] + "examples": [ + 1 + ] }, "sendingIPs": { "type": "array", "items": { "type": "string", - "examples": ["192.168.178.1"], + "examples": [ + "192.168.178.1" + ], "format": "ipv4" } }, "snmpIP": { "type": "string", - "examples": ["192.168.178.1"], + "examples": [ + "192.168.178.1" + ], "format": "ipv4" }, "snmpCommunity": { "type": "string", - "examples": ["kentikSNMP"] + "examples": [ + "kentikSNMP" + ] }, "snmpConfUsername": { "type": "string", - "examples": ["kentik"] + "examples": [ + "kentik" + ] }, "snmpConfAuthenticationProtocol": { "type": "string", - "examples": ["SHA"] + "examples": [ + "SHA" + ] }, "snmpConfAuthenticationPassphrase": { "type": "string", - "examples": ["Pass"] + "examples": [ + "Pass" + ] }, "snmpPrivacyProtocol": { "type": "string", - "examples": ["AES"] + "examples": [ + "AES" + ] }, "snmpPrivacyPassphrase": { "type": "string", - "examples": ["AESPassword"] + "examples": [ + "AESPassword" + ] }, "bgpType": { "type": "string", - "examples": ["device"] + "examples": [ + "device" + ] }, "bgpNeighborIP": { "type": "string", - "examples": ["209.1.1.1"], + "examples": [ + "209.1.1.1" + ], "format": "ipv4" }, "bgpNeighborIP6": { "type": "string", - "examples": ["ff44::ffff"], + "examples": [ + "ff44::ffff" + ], "format": "ipv6" }, "bgpNeighborASN": { "type": "string", - "examples": ["1"] + "examples": [ + "1" + ] }, "bgpNeighborPassword": { "type": "string", - "examples": ["pass"] + "examples": [ + "pass" + ] }, "siteName": { "type": "string", - "examples": ["mySite"] + "examples": [ + "mySite" + ] } }, "required": [ @@ -3508,90 +3860,135 @@ "type": "object", "properties": { "adapterId": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "name": { "type": "string", - "examples": ["test-device"] + "examples": [ + "test-device" + ] }, "type": { "type": "string", - "examples": ["router"] + "examples": [ + "router" + ] }, "description": { "type": "string", - "examples": ["my device"] + "examples": [ + "my device" + ] }, "planId": { "type": "integer", - "examples": [44662] + "examples": [ + 44662 + ] }, "sampleRate": { "type": "integer", - "examples": [1] + "examples": [ + 1 + ] }, "sendingIPs": { "type": "array", "items": { "type": "string", - "examples": ["192.168.178.1"], + "examples": [ + "192.168.178.1" + ], "format": "ipv4" } }, "snmpIP": { "type": "string", - "examples": ["192.168.178.1"], + "examples": [ + "192.168.178.1" + ], "format": "ipv4" }, "snmpCommunity": { "type": "string", - "examples": ["kentikSNMP"] + "examples": [ + "kentikSNMP" + ] }, "snmpConfUsername": { "type": "string", - "examples": ["kentik"] + "examples": [ + "kentik" + ] }, "snmpConfAuthenticationProtocol": { "type": "string", - "examples": ["SHA"] + "examples": [ + "SHA" + ] }, "snmpConfAuthenticationPassphrase": { "type": "string", - "examples": ["Pass"] + "examples": [ + "Pass" + ] }, "snmpPrivacyProtocol": { "type": "string", - "examples": ["AES"] + "examples": [ + "AES" + ] }, "snmpPrivacyPassphrase": { "type": "string", - "examples": ["AESPassword"] + "examples": [ + "AESPassword" + ] }, "bgpType": { "type": "string", - "examples": ["device"] + "examples": [ + "device" + ] }, "bgpNeighborIP": { "type": "string", - "examples": ["209.1.1.1"], + "examples": [ + "209.1.1.1" + ], "format": "ipv4" }, "bgpNeighborIP6": { "type": "string", - "examples": ["ff44::ffff"], + "examples": [ + "ff44::ffff" + ], "format": "ipv6" }, "bgpNeighborASN": { "type": "string", - "examples": ["1"] + "examples": [ + "1" + ] }, "bgpNeighborPassword": { "type": "string", - "examples": ["pass"] + "examples": [ + "pass" + ] }, "siteName": { "type": "string", - "examples": ["mySite"] + "examples": [ + "mySite" + ] }, "_id": { "type": "string", @@ -3622,7 +4019,9 @@ "type": "null" } ], - "examples": ["value"] + "examples": [ + "value" + ] } } }, @@ -4422,7 +4821,9 @@ "variables": { "incoming": { "name": "allowedIPList", - "value": ["10.10.10.10"] + "value": [ + "10.10.10.10" + ] }, "outgoing": { "value": null @@ -4716,36 +5117,55 @@ "type": "object", "properties": { "serviceNowAdapter": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "iapUrl": { "type": "string", - "examples": ["https://iap_1:3443"] + "examples": [ + "https://iap_1:3443" + ] }, "serviceNowUrl": { "type": "string", - "examples": ["https://servicenow_dev.com"] + "examples": [ + "https://servicenow_dev.com" + ] }, "Dimensions": { "type": "object", "properties": { "AS_src": { "type": "string", - "examples": ["198465"] + "examples": [ + "198465" + ] }, "IP_dst": { "type": "string", - "examples": ["10.0.18.252"], + "examples": [ + "10.0.18.252" + ], "format": "ipv4" }, "IP_src": { "type": "string", - "examples": ["45.129.14.30"], + "examples": [ + "45.129.14.30" + ], "format": "ipv4" }, "kt_aws_dst_sg": { "type": "string", - "examples": ["webserver-kentik"] + "examples": [ + "webserver-kentik" + ] } }, "required": [] @@ -4757,7 +5177,9 @@ "properties": { "Name": { "type": "string", - "examples": ["DashboardAlarmURL"] + "examples": [ + "DashboardAlarmURL" + ] }, "Value": { "type": "string", @@ -4771,26 +5193,65 @@ }, "_id": { "type": "string", - "examples": ["7517dfb1b5fd4af2bac87a02"] + "examples": [ + "7517dfb1b5fd4af2bac87a02" + ] }, "AlarmPolicyName": { "type": "string", - "examples": ["Web Server Traffic Rejections"] + "examples": [ + "Web Server Traffic Rejections" + ] }, "awsEC2Adapter": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "allPolicyEventsWebhookUrl": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "msTeamsAdapter": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "policyAutomatedAuthorizationWebhookUrl": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "policyAutomatedFailureWebhookUrl": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] } }, "required": [ @@ -4812,36 +5273,55 @@ "type": "object", "properties": { "serviceNowAdapter": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "iapUrl": { "type": "string", - "examples": ["https://iap_1:3443"] + "examples": [ + "https://iap_1:3443" + ] }, "serviceNowUrl": { "type": "string", - "examples": ["https://servicenow_dev.com"] + "examples": [ + "https://servicenow_dev.com" + ] }, "Dimensions": { "type": "object", "properties": { "AS_src": { "type": "string", - "examples": ["198465"] + "examples": [ + "198465" + ] }, "IP_dst": { "type": "string", - "examples": ["10.0.18.252"], + "examples": [ + "10.0.18.252" + ], "format": "ipv4" }, "IP_src": { "type": "string", - "examples": ["45.129.14.30"], + "examples": [ + "45.129.14.30" + ], "format": "ipv4" }, "kt_aws_dst_sg": { "type": "string", - "examples": ["webserver-kentik"] + "examples": [ + "webserver-kentik" + ] } }, "required": [] @@ -4853,7 +5333,9 @@ "properties": { "Name": { "type": "string", - "examples": ["DashboardAlarmURL"] + "examples": [ + "DashboardAlarmURL" + ] }, "Value": { "type": "string", @@ -4871,22 +5353,59 @@ }, "AlarmPolicyName": { "type": "string", - "examples": ["Web Server Traffic Rejections"] + "examples": [ + "Web Server Traffic Rejections" + ] }, "awsEC2Adapter": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "allPolicyEventsWebhookUrl": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "msTeamsAdapter": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "policyAutomatedAuthorizationWebhookUrl": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "policyAutomatedFailureWebhookUrl": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "initiator": { "type": "string" @@ -5905,51 +6424,80 @@ "properties": { "_id": { "type": "string", - "examples": ["afdaf323r4"] + "examples": [ + "afdaf323r4" + ] }, "webhookKey": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "formData": { "type": "object", "properties": { "deviceName": { "type": "string", - "examples": ["IOS_Device_Name"] + "examples": [ + "IOS_Device_Name" + ] }, "iapUrl": { "type": "string", - "examples": ["https://iap_01:3443"] + "examples": [ + "https://iap_01:3443" + ] }, "serviceNowUrl": { "type": "string", - "examples": ["https://servicenow_dev.com"] + "examples": [ + "https://servicenow_dev.com" + ] }, "deviceOnboardingWebhookUrl": { "type": "string", - "examples": ["webhookURL"] + "examples": [ + "webhookURL" + ] }, "serviceNowAdapter": { "type": "string", - "examples": ["ServiceNow"] + "examples": [ + "ServiceNow" + ] }, "netBoxAdapter": { "type": "string", - "examples": ["NetboxV3"] + "examples": [ + "NetboxV3" + ] }, "msTeamsAdapter": { "type": "string", - "examples": ["MS Teams"] + "examples": [ + "MS Teams" + ] }, "kentikAdapter": { "type": "string", - "examples": ["Kentik v5"] + "examples": [ + "Kentik v5" + ] } }, "required": [] } }, - "required": ["_id", "webhookKey", "formData"] + "required": [ + "_id", + "webhookKey", + "formData" + ] }, "outputSchema": { "type": "object", @@ -5959,42 +6507,65 @@ "pattern": "^[0-9a-f]{24}$" }, "webhookKey": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "formData": { "type": "object", "properties": { "deviceName": { "type": "string", - "examples": ["IOS_Device_Name"] + "examples": [ + "IOS_Device_Name" + ] }, "iapUrl": { "type": "string", - "examples": ["https://iap_01:3443"] + "examples": [ + "https://iap_01:3443" + ] }, "serviceNowUrl": { "type": "string", - "examples": ["https://servicenow_dev.com"] + "examples": [ + "https://servicenow_dev.com" + ] }, "deviceOnboardingWebhookUrl": { "type": "string", - "examples": ["webhookURL"] + "examples": [ + "webhookURL" + ] }, "serviceNowAdapter": { "type": "string", - "examples": ["ServiceNow"] + "examples": [ + "ServiceNow" + ] }, "netBoxAdapter": { "type": "string", - "examples": ["NetboxV3"] + "examples": [ + "NetboxV3" + ] }, "msTeamsAdapter": { "type": "string", - "examples": ["MS Teams"] + "examples": [ + "MS Teams" + ] }, "kentikAdapter": { "type": "string", - "examples": ["Kentik v5"] + "examples": [ + "Kentik v5" + ] } }, "required": [] @@ -6270,10 +6841,24 @@ "type": "object", "properties": { "adapterId": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "crNumber": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "comments": { "type": "string" @@ -6282,16 +6867,35 @@ "type": "string" } }, - "required": ["adapterId", "crNumber", "comments", "state"] + "required": [ + "adapterId", + "crNumber", + "comments", + "state" + ] }, "outputSchema": { "type": "object", "properties": { "adapterId": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "crNumber": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "comments": { "type": "string" @@ -6307,10 +6911,24 @@ "type": "string" }, "serviceNowError": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "updatedCR": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] } } }, @@ -6579,22 +7197,64 @@ "type": "object", "properties": { "adapterId": { - "type": ["array", "boolean", "null", "number", "object", "string"] - }, - "title": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] + }, + "title": { + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "summary": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "description": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "comments": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "assignmentGroup": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] } }, "required": [ @@ -6610,22 +7270,64 @@ "type": "object", "properties": { "adapterId": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "title": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "summary": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "description": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "comments": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "assignmentGroup": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "_id": { "type": "string", @@ -6635,10 +7337,24 @@ "type": "string" }, "createdCR": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] }, "serviceNowError": { - "type": ["array", "boolean", "null", "number", "object", "string"] + "type": [ + "array", + "boolean", + "null", + "number", + "object", + "string" + ] } } }, @@ -6753,7 +7469,10 @@ "title": "Device Onboarding Reset - Kentik - Example", "description": "", "type": "object", - "required": ["deviceName", "kentikAdapter"], + "required": [ + "deviceName", + "kentikAdapter" + ], "properties": { "deviceName": { "type": "string", @@ -7596,11 +8315,15 @@ "properties": { "deviceName": { "type": "string", - "examples": ["IOS_Device_Name"] + "examples": [ + "IOS_Device_Name" + ] }, "kentikAdapter": { "type": "string", - "examples": ["Kentik v5"] + "examples": [ + "Kentik v5" + ] } }, "required": [] @@ -7688,7 +8411,9 @@ "properties": { "Name": { "type": "string", - "examples": ["DashboardAlarmURL"] + "examples": [ + "DashboardAlarmURL" + ] }, "Value": { "type": "string", @@ -7706,21 +8431,29 @@ "properties": { "AS_src": { "type": "string", - "examples": ["198465"] + "examples": [ + "198465" + ] }, "IP_dst": { "type": "string", - "examples": ["13.13.13.13"], + "examples": [ + "13.13.13.13" + ], "format": "ipv4" }, "IP_src": { "type": "string", - "examples": ["45.129.14.30"], + "examples": [ + "45.129.14.30" + ], "format": "ipv4" }, "kt_aws_dst_sg": { "type": "string", - "examples": ["webserver-kentik"] + "examples": [ + "webserver-kentik" + ] } }, "required": [] @@ -7728,21 +8461,27 @@ { "$id": "jobId", "type": "string", - "examples": ["7517dfb1b5fd4af2bac87a02"] + "examples": [ + "7517dfb1b5fd4af2bac87a02" + ] }, { "$id": "allowedIPList", "type": "array", "items": { "type": "string", - "examples": ["10.10.10.10"], + "examples": [ + "10.10.10.10" + ], "format": "ipv4" } }, { "$id": "iapUrl", "type": "string", - "examples": ["https://iap_01:3443"] + "examples": [ + "https://iap_01:3443" + ] } ], "outgoing": [ @@ -7892,7 +8631,10 @@ "type": "method", "library": "Array", "method": "getIndex", - "args": [null, 0], + "args": [ + null, + 0 + ], "view": { "row": 1, "col": 1 @@ -7904,7 +8646,10 @@ "type": "method", "library": "Array", "method": "getIndex", - "args": [null, 1], + "args": [ + null, + 1 + ], "view": { "row": 2, "col": 1 @@ -7916,7 +8661,10 @@ "type": "method", "library": "Array", "method": "map", - "args": [null, "formatAllowedIPs"], + "args": [ + null, + "formatAllowedIPs" + ], "view": { "row": 4, "col": 1 @@ -8003,7 +8751,10 @@ "type": "method", "library": "Object", "method": "getProperty", - "args": [null, "Name"], + "args": [ + null, + "Name" + ], "view": { "row": 1, "col": 2 @@ -8015,7 +8766,10 @@ "type": "method", "library": "Object", "method": "getProperty", - "args": [null, "Value"], + "args": [ + null, + "Value" + ], "view": { "row": 2, "col": 3 @@ -8027,7 +8781,10 @@ "type": "method", "library": "Object", "method": "getProperty", - "args": [null, "Value"], + "args": [ + null, + "Value" + ], "view": { "row": 1, "col": 3 @@ -8039,7 +8796,10 @@ "type": "method", "library": "Object", "method": "getProperty", - "args": [null, "Name"], + "args": [ + null, + "Name" + ], "view": { "row": 2, "col": 2 @@ -8051,7 +8811,10 @@ "type": "method", "library": "Array", "method": "join", - "args": [null, " "], + "args": [ + null, + " " + ], "view": { "row": 4, "col": 2 @@ -8182,11 +8945,15 @@ "properties": { "Name": { "type": "string", - "examples": ["DashboardAlarmURL"] + "examples": [ + "DashboardAlarmURL" + ] }, "Label": { "type": "string", - "examples": ["Open in Dashboard"] + "examples": [ + "Open in Dashboard" + ] }, "Value": { "type": "string", @@ -8212,11 +8979,15 @@ "properties": { "Name": { "type": "string", - "examples": ["DashboardAlarmURL"] + "examples": [ + "DashboardAlarmURL" + ] }, "Label": { "type": "string", - "examples": ["Open in Dashboard"] + "examples": [ + "Open in Dashboard" + ] }, "Value": { "type": "string", @@ -8273,7 +9044,10 @@ "type": "method", "library": "Equality", "method": "equality", - "args": [null, null], + "args": [ + null, + null + ], "view": { "row": 2, "col": 1 @@ -8297,19 +9071,21 @@ } ], "functions": [], - "name": "ƒ_query_1", + "name": "\u0192_query_1", "view": { "col": 2, "row": 4 }, - "id": "ƒ_query_1", + "id": "\u0192_query_1", "comments": [] }, { "incoming": [ { "type": "string", - "examples": ["10%2E10%2E10%2E10"], + "examples": [ + "10%2E10%2E10%2E10" + ], "format": "ipv4", "$id": "currentValue" }, @@ -8324,7 +9100,9 @@ "type": "array", "items": { "type": "string", - "examples": ["10%2E10%2E10%2E10"], + "examples": [ + "10%2E10%2E10%2E10" + ], "format": "ipv4" }, "optional": true @@ -8367,7 +9145,11 @@ "type": "method", "library": "String", "method": "concat", - "args": ["
  • ", null, "
  • "], + "args": [ + "
  • ", + null, + "
  • " + ], "view": { "row": 2, "col": 1 @@ -8434,12 +9216,16 @@ { "$id": "iapURL", "type": "string", - "examples": ["https://iap_1:3443"] + "examples": [ + "https://iap_1:3443" + ] }, { "$id": "serviceNowURL", "type": "string", - "examples": ["https://servicenow_dev.com"] + "examples": [ + "https://servicenow_dev.com" + ] }, { "$id": "dimensions", @@ -8447,21 +9233,29 @@ "properties": { "AS_src": { "type": "string", - "examples": ["198465"] + "examples": [ + "198465" + ] }, "IP_dst": { "type": "string", - "examples": ["10.0.18.252"], + "examples": [ + "10.0.18.252" + ], "format": "ipv4" }, "IP_src": { "type": "string", - "examples": ["45.129.14.30"], + "examples": [ + "45.129.14.30" + ], "format": "ipv4" }, "kt_aws_dst_sg": { "type": "string", - "examples": ["webserver-kentik"] + "examples": [ + "webserver-kentik" + ] } }, "required": [] @@ -8474,7 +9268,9 @@ "properties": { "Name": { "type": "string", - "examples": ["DashboardAlarmURL"] + "examples": [ + "DashboardAlarmURL" + ] }, "Value": { "type": "string", @@ -8489,22 +9285,30 @@ { "$id": "jobId", "type": "string", - "examples": ["7517dfb1b5fd4af2bac87a02"] + "examples": [ + "7517dfb1b5fd4af2bac87a02" + ] }, { "$id": "alarmPolicyName", "type": "string", - "examples": ["Web Server Traffic Rejections"] + "examples": [ + "Web Server Traffic Rejections" + ] }, { "$id": "serviceNowChangeSysId", "type": "string", - "examples": ["afdafadfA"] + "examples": [ + "afdafadfA" + ] }, { "$id": "serviceNowIncidentSysId", "type": "string", - "examples": ["f298220c87b6611035617558dabb3563"] + "examples": [ + "f298220c87b6611035617558dabb3563" + ] } ], "outgoing": [ @@ -8523,17 +9327,23 @@ { "$id": "serviceNowSummary", "type": "string", - "examples": ["servicenow summary"] + "examples": [ + "servicenow summary" + ] }, { "$id": "serviceNowComments", "type": "string", - "examples": ["servicenow comments"] + "examples": [ + "servicenow comments" + ] }, { "$id": "seviceNowChangeComments", "type": "string", - "examples": ["servicenow change comments"] + "examples": [ + "servicenow change comments" + ] }, { "$id": "securityGroupFilter", @@ -8543,11 +9353,15 @@ "properties": { "Name": { "type": "string", - "examples": ["group-name"] + "examples": [ + "group-name" + ] }, "Value": { "type": "string", - "examples": ["webserver-kentik"] + "examples": [ + "webserver-kentik" + ] } }, "required": [] @@ -8556,13 +9370,17 @@ { "$id": "sourceIpCIDR", "type": "string", - "examples": ["45%2E129%2E14%2E30"], + "examples": [ + "45%2E129%2E14%2E30" + ], "format": "ipv4" }, { "$id": "sourceIP", "type": "string", - "examples": ["10%2E10%2E10%2E10"], + "examples": [ + "10%2E10%2E10%2E10" + ], "format": "ipv4" } ], @@ -8602,7 +9420,11 @@ "type": "method", "library": "Object", "method": "setProperty", - "args": [{}, "Name", "group-name"], + "args": [ + {}, + "Name", + "group-name" + ], "view": { "row": 1, "col": 1 @@ -8914,7 +9736,10 @@ "type": "method", "library": "Array", "method": "getIndex", - "args": [null, 0], + "args": [ + null, + 0 + ], "view": { "row": 4, "col": 1 @@ -8926,7 +9751,10 @@ "type": "method", "library": "Array", "method": "getIndex", - "args": [null, 1], + "args": [ + null, + 1 + ], "view": { "row": 5, "col": 1 @@ -8938,7 +9766,10 @@ "type": "method", "library": "String", "method": "concat", - "args": [null, "/32"], + "args": [ + null, + "/32" + ], "view": { "row": 2, "col": 1 @@ -9010,7 +9841,11 @@ "type": "method", "library": "Object", "method": "setProperty", - "args": [null, "Value", null], + "args": [ + null, + "Value", + null + ], "view": { "row": 3, "col": 2 @@ -9022,7 +9857,10 @@ "type": "method", "library": "Object", "method": "getProperty", - "args": [null, "Value"], + "args": [ + null, + "Value" + ], "view": { "row": 4, "col": 2 @@ -9034,7 +9872,10 @@ "type": "method", "library": "Object", "method": "getProperty", - "args": [null, "Value"], + "args": [ + null, + "Value" + ], "view": { "row": 5, "col": 2 @@ -9046,7 +9887,10 @@ "type": "method", "library": "Object", "method": "getProperty", - "args": [null, "Name"], + "args": [ + null, + "Name" + ], "view": { "row": 2, "col": 2 @@ -9058,7 +9902,10 @@ "type": "method", "library": "Object", "method": "getProperty", - "args": [null, "Name"], + "args": [ + null, + "Name" + ], "view": { "row": 1, "col": 2 @@ -9205,7 +10052,9 @@ "type": "method", "library": "Array", "method": "push", - "args": [[]], + "args": [ + [] + ], "view": { "row": 5, "col": 5 @@ -9328,7 +10177,9 @@ "library": "String", "method": "templateLiteral", "template": "${renderedTeamsMessage}
    An automated attempt to remediate the problem will now occur.", - "args": [null], + "args": [ + null + ], "view": { "row": 1, "col": 5 @@ -9341,7 +10192,9 @@ "library": "String", "method": "templateLiteral", "template": "${renderedTeamsMessage}
    Remediation Successful! Security Group has been altered to authorize ingress traffic.", - "args": [null], + "args": [ + null + ], "view": { "row": 2, "col": 5 @@ -9354,7 +10207,9 @@ "library": "String", "method": "templateLiteral", "template": "[code]${renderedTeamsMessage}[/code]", - "args": [null], + "args": [ + null + ], "view": { "row": 4, "col": 5 @@ -9367,7 +10222,10 @@ "library": "String", "method": "templateLiteral", "template": "${renderedTeamsMessage}
    Remediation Failed! Security Group already includes source IP.
    ServiceNow Incident Opened: ServiceNow Incident", - "args": [null, null], + "args": [ + null, + null + ], "view": { "row": 3, "col": 5 @@ -9488,11 +10346,15 @@ "properties": { "Name": { "type": "string", - "examples": ["DashboardAlarmURL"] + "examples": [ + "DashboardAlarmURL" + ] }, "Label": { "type": "string", - "examples": ["Open in Dashboard"] + "examples": [ + "Open in Dashboard" + ] }, "Value": { "type": "string", @@ -9518,11 +10380,15 @@ "properties": { "Name": { "type": "string", - "examples": ["DashboardAlarmURL"] + "examples": [ + "DashboardAlarmURL" + ] }, "Label": { "type": "string", - "examples": ["Open in Dashboard"] + "examples": [ + "Open in Dashboard" + ] }, "Value": { "type": "string", @@ -9579,7 +10445,10 @@ "type": "method", "library": "Equality", "method": "equality", - "args": [null, null], + "args": [ + null, + null + ], "view": { "row": 2, "col": 1 @@ -9603,12 +10472,12 @@ } ], "functions": [], - "name": "Æ’_query_1", + "name": "\u0192_query_1", "view": { "col": 2, "row": 4 }, - "id": "Æ’_query_1", + "id": "\u0192_query_1", "comments": [] } ], @@ -9654,11 +10523,15 @@ "properties": { "id": { "type": "string", - "examples": ["a68d46e49712011015c5b4b3f153af9e"] + "examples": [ + "a68d46e49712011015c5b4b3f153af9e" + ] }, "current_state": { "type": "string", - "examples": ["-5"] + "examples": [ + "-5" + ] } }, "required": [] @@ -9690,7 +10563,9 @@ }, "state": { "type": "integer", - "examples": [0] + "examples": [ + 0 + ] } }, "required": [] @@ -9716,7 +10591,9 @@ "type": "method", "library": "String", "method": "toLowerCase", - "args": [null], + "args": [ + null + ], "view": { "row": 3, "col": 1 @@ -9755,7 +10632,10 @@ "type": "method", "library": "Object", "method": "optional chaining", - "args": [null, null], + "args": [ + null, + null + ], "view": { "row": 3, "col": 2 @@ -9794,7 +10674,10 @@ "type": "method", "library": "Logical", "method": "nullish", - "args": [null, null], + "args": [ + null, + null + ], "view": { "row": 3, "col": 3 @@ -9833,7 +10716,10 @@ "type": "method", "library": "Number", "method": "parseInt", - "args": [null, null], + "args": [ + null, + null + ], "view": { "row": 2, "col": 2 @@ -9858,7 +10744,10 @@ "type": "method", "library": "Array", "method": "getIndex", - "args": [null, 0], + "args": [ + null, + 0 + ], "view": { "row": 1, "col": 1 @@ -9883,7 +10772,10 @@ "type": "method", "library": "Object", "method": "getProperty", - "args": [null, "current_state"], + "args": [ + null, + "current_state" + ], "view": { "row": 2, "col": 1 @@ -9922,7 +10814,10 @@ "type": "method", "library": "Object", "method": "getProperty", - "args": [null, "id"], + "args": [ + null, + "id" + ], "view": { "row": 1, "col": 2 @@ -9995,7 +10890,9 @@ "properties": { "renderedTemplate": { "type": "string", - "examples": ["banner"] + "examples": [ + "banner" + ] } }, "required": [] @@ -10003,7 +10900,9 @@ { "$id": "deviceName", "type": "string", - "examples": ["deviceName"] + "examples": [ + "deviceName" + ] } ], "outgoing": [ @@ -10022,7 +10921,9 @@ "type": "declaration", "library": "Array", "method": "new Array", - "args": [null], + "args": [ + null + ], "view": { "row": 2, "col": 1 @@ -10050,7 +10951,9 @@ "type": "declaration", "library": "Array", "method": "new Array", - "args": [null], + "args": [ + null + ], "view": { "row": 1, "col": 1 @@ -10142,7 +11045,9 @@ "properties": { "id": { "type": "integer", - "examples": [3] + "examples": [ + 3 + ] } }, "required": [] @@ -10153,7 +11058,9 @@ "properties": { "id": { "type": "string", - "examples": ["167024"] + "examples": [ + "167024" + ] } }, "required": [] @@ -10163,7 +11070,9 @@ { "$id": "netboxId", "type": "integer", - "examples": [3] + "examples": [ + 3 + ] }, { "$id": "netboxDevice", @@ -10171,7 +11080,9 @@ "properties": { "asset_tag": { "type": "string", - "examples": ["123"] + "examples": [ + "123" + ] } }, "required": [] @@ -10244,99 +11155,135 @@ { "$id": "name", "type": "string", - "examples": ["test-device"] + "examples": [ + "test-device" + ] }, { "$id": "type", "type": "string", - "examples": ["router"] + "examples": [ + "router" + ] }, { "$id": "description", "type": "string", - "examples": ["my device"] + "examples": [ + "my device" + ] }, { "$id": "planId", "type": "integer", - "examples": [44662] + "examples": [ + 44662 + ] }, { "$id": "sampleRate", "type": "integer", - "examples": [1] + "examples": [ + 1 + ] }, { "$id": "sendingIPs", "type": "array", "items": { "type": "string", - "examples": ["192.168.178.1"], + "examples": [ + "192.168.178.1" + ], "format": "ipv4" } }, { "$id": "snmpIP", "type": "string", - "examples": ["192.168.178.1"], + "examples": [ + "192.168.178.1" + ], "format": "ipv4" }, { "$id": "snmpCommunity", "type": "string", - "examples": ["kentikSNMP"] + "examples": [ + "kentikSNMP" + ] }, { "$id": "snmpConfUsername", "type": "string", - "examples": ["kentik"] + "examples": [ + "kentik" + ] }, { "$id": "snmpConfAuthenticationProtocol", "type": "string", - "examples": ["SHA"] + "examples": [ + "SHA" + ] }, { "$id": "snmpConfAuthenticationPassphrase", "type": "string", - "examples": ["Pass"] + "examples": [ + "Pass" + ] }, { "$id": "snmpPrivacyProtocol", "type": "string", - "examples": ["AES"] + "examples": [ + "AES" + ] }, { "$id": "snmpPrivacyPassphrase", "type": "string", - "examples": ["AESPassword"] + "examples": [ + "AESPassword" + ] }, { "$id": "bgpType", "type": "string", - "examples": ["device"] + "examples": [ + "device" + ] }, { "$id": "bgpNeighborIP", "type": "string", - "examples": ["209.1.1.1"], + "examples": [ + "209.1.1.1" + ], "format": "ipv4" }, { "$id": "bgpNeighborIP6", "type": "string", - "examples": ["ff44::ffff"], + "examples": [ + "ff44::ffff" + ], "format": "ipv6" }, { "$id": "bgpNeighborASN", "type": "string", - "examples": ["1"] + "examples": [ + "1" + ] }, { "$id": "bgpNeighborPassword", "type": "string", - "examples": ["pass"] + "examples": [ + "pass" + ] }, { "$id": "siteInfo", @@ -10351,24 +11298,46 @@ "type": "object", "properties": { "id": { - "type": ["integer", "number"], - "examples": [18245] + "type": [ + "integer", + "number" + ], + "examples": [ + 18245 + ] }, "site_name": { "type": "string", - "examples": ["ATL HQ"] + "examples": [ + "ATL HQ" + ] }, "lat": { - "type": ["number", "null"], - "examples": [33.7914918] + "type": [ + "number", + "null" + ], + "examples": [ + 33.7914918 + ] }, "lon": { - "type": ["number", "null"], - "examples": [-84.3898086] + "type": [ + "number", + "null" + ], + "examples": [ + -84.3898086 + ] }, "company_id": { - "type": ["integer", "number"], - "examples": [180173] + "type": [ + "integer", + "number" + ], + "examples": [ + 180173 + ] } }, "required": [] @@ -10383,7 +11352,9 @@ { "$id": "siteName", "type": "string", - "examples": ["mySite"] + "examples": [ + "mySite" + ] } ], "outgoing": [ @@ -10396,96 +11367,137 @@ "properties": { "device_name": { "type": "string", - "examples": ["test1d"] + "examples": [ + "test1d" + ] }, "device_type": { "type": "string", - "examples": ["router"] + "examples": [ + "router" + ] }, "device_description": { "type": "string", - "examples": ["New Test Device"] + "examples": [ + "New Test Device" + ] }, "plan_id": { "type": "integer", - "examples": [44662] + "examples": [ + 44662 + ] }, "site_id": { "type": "integer", - "examples": [10170] + "examples": [ + 10170 + ] }, "device_sample_rate": { "type": "integer", - "examples": [1024] + "examples": [ + 1024 + ] }, "sending_ips": { "type": "array", "items": { "type": "string", - "examples": ["192.168.178.1"], + "examples": [ + "192.168.178.1" + ], "format": "ipv4" } }, "device_snmp_ip": { "type": "string", - "examples": ["192.168.178.1"], + "examples": [ + "192.168.178.1" + ], "format": "ipv4" }, "device_snmp_community": { "type": "string", - "examples": ["kentikSNMP"] + "examples": [ + "kentikSNMP" + ] }, "minimize_snmp": { "type": "boolean", - "examples": [true, false] + "examples": [ + true, + false + ] }, "device_snmp_v3_conf": { "type": "object", "properties": { "UserName": { "type": "string", - "examples": ["kentik"] + "examples": [ + "kentik" + ] }, "AuthenticationProtocol": { "type": "string", - "examples": ["SHA"] + "examples": [ + "SHA" + ] }, "AuthenticationPassphrase": { "type": "string", - "examples": ["Password"] + "examples": [ + "Password" + ] }, "PrivacyProtocol": { "type": "string", - "examples": ["AES"] + "examples": [ + "AES" + ] }, "PrivacyPassphrase": { "type": "string", - "examples": ["AESPassword"] + "examples": [ + "AESPassword" + ] } }, "required": [] }, "device_bgp_type": { "type": "string", - "examples": ["device"] + "examples": [ + "device" + ] }, "device_bgp_neighbor_ip": { "type": "string", - "examples": ["209.1.1.1"], + "examples": [ + "209.1.1.1" + ], "format": "ipv4" }, "device_bgp_neighbor_ip6": { "type": "string", - "examples": ["ff44::ffff"], + "examples": [ + "ff44::ffff" + ], "format": "ipv6" }, "device_bgp_neighbor_asn": { "type": "string", - "examples": ["1"] + "examples": [ + "1" + ] }, "device_bgp_password": { "type": "string", - "examples": ["KentikMD5"] + "examples": [ + "KentikMD5" + ] } }, "required": [] @@ -10695,7 +11707,9 @@ "type": "declaration", "library": "Boolean", "method": "new Boolean", - "args": [false], + "args": [ + false + ], "view": { "row": 3, "col": 3 @@ -10827,7 +11841,9 @@ "type": "method", "library": "String", "method": "length", - "args": [null], + "args": [ + null + ], "view": { "row": 4, "col": 1 @@ -10839,7 +11855,11 @@ "type": "method", "library": "Array", "method": "find", - "args": [null, "Æ’_query_1", null], + "args": [ + null, + "\u0192_query_1", + null + ], "view": { "row": 9, "col": 1 @@ -10881,7 +11901,10 @@ "type": "method", "library": "Relational", "method": "greaterThan", - "args": [null, 0], + "args": [ + null, + 0 + ], "view": { "row": 4, "col": 2 @@ -10893,7 +11916,10 @@ "type": "method", "library": "Object", "method": "getProperty", - "args": [null, "id"], + "args": [ + null, + "id" + ], "view": { "row": 9, "col": 3 @@ -10921,7 +11947,13 @@ "library": "String", "method": "templateLiteral", "template": "{\n \"UserName\": \"${userName}\",\n \"AuthenticationProtocol\": \"${authenticationProtocol}\",\n \"AuthenticationPassphrase\": \"${authenticationPassphrase}\",\n \"PrivacyProtocol\": \"${privacyProtocol}\",\n \"PrivacyPassphrase\": \"${privacyPassphrase}\"\n}", - "args": [null, null, null, null, null], + "args": [ + null, + null, + null, + null, + null + ], "view": { "row": 5, "col": 1 @@ -10948,7 +11980,10 @@ "type": "method", "library": "JSON", "method": "parse", - "args": [null, null], + "args": [ + null, + null + ], "view": { "row": 5, "col": 2 @@ -10975,7 +12010,11 @@ "type": "method", "library": "Conditional", "method": "ternary", - "args": [null, null, {}], + "args": [ + null, + null, + {} + ], "view": { "row": 4, "col": 3 @@ -11035,24 +12074,46 @@ "type": "object", "properties": { "id": { - "type": ["integer", "number"], - "examples": [18245] + "type": [ + "integer", + "number" + ], + "examples": [ + 18245 + ] }, "site_name": { "type": "string", - "examples": ["ATL HQ"] + "examples": [ + "ATL HQ" + ] }, "lat": { - "type": ["number", "null"], - "examples": [33.7914918] + "type": [ + "number", + "null" + ], + "examples": [ + 33.7914918 + ] }, "lon": { - "type": ["number", "null"], - "examples": [-84.3898086] + "type": [ + "number", + "null" + ], + "examples": [ + -84.3898086 + ] }, "company_id": { - "type": ["integer", "number"], - "examples": [180173] + "type": [ + "integer", + "number" + ], + "examples": [ + 180173 + ] } }, "required": [], @@ -11070,24 +12131,46 @@ "type": "object", "properties": { "id": { - "type": ["integer", "number"], - "examples": [18245] + "type": [ + "integer", + "number" + ], + "examples": [ + 18245 + ] }, "site_name": { "type": "string", - "examples": ["ATL HQ"] + "examples": [ + "ATL HQ" + ] }, "lat": { - "type": ["number", "null"], - "examples": [33.7914918] + "type": [ + "number", + "null" + ], + "examples": [ + 33.7914918 + ] }, "lon": { - "type": ["number", "null"], - "examples": [-84.3898086] + "type": [ + "number", + "null" + ], + "examples": [ + -84.3898086 + ] }, "company_id": { - "type": ["integer", "number"], - "examples": [180173] + "type": [ + "integer", + "number" + ], + "examples": [ + 180173 + ] } }, "required": [] @@ -11144,7 +12227,10 @@ "type": "method", "library": "Equality", "method": "equality", - "args": [null, null], + "args": [ + null, + null + ], "view": { "row": 1, "col": 1 @@ -11168,12 +12254,12 @@ } ], "functions": [], - "name": "Æ’_query_1", + "name": "\u0192_query_1", "view": { "col": 2, "row": 4 }, - "id": "Æ’_query_1", + "id": "\u0192_query_1", "comments": [] } ], @@ -11217,7 +12303,9 @@ "properties": { "count": { "type": "integer", - "examples": [1] + "examples": [ + 1 + ] }, "next": { "type": "null" @@ -11240,131 +12328,179 @@ { "$id": "planId", "type": "integer", - "examples": [44662] + "examples": [ + 44662 + ] }, { "$id": "jobId", "type": "string", - "examples": ["123safaf"] + "examples": [ + "123safaf" + ] }, { "$id": "serviceNowSysId", "type": "string", - "examples": ["adbafd23e34"] + "examples": [ + "adbafd23e34" + ] }, { "$id": "iapURL", "type": "string", - "examples": ["https://iap_01:3443"] + "examples": [ + "https://iap_01:3443" + ] }, { "$id": "serviceNowURL", "type": "string", - "examples": ["https://servicenow_instance.com"] + "examples": [ + "https://servicenow_instance.com" + ] } ], "outgoing": [ { "$id": "type", "type": "string", - "examples": ["router"] + "examples": [ + "router" + ] }, { "$id": "name", "type": "string", - "examples": ["test-device"] + "examples": [ + "test-device" + ] }, { "$id": "description", "type": "string", - "examples": ["my device"] + "examples": [ + "my device" + ] }, { "$id": "planId", "type": "integer", - "examples": [44662] + "examples": [ + 44662 + ] }, { "$id": "sampleRate", "type": "integer", - "examples": [1] + "examples": [ + 1 + ] }, { "$id": "sendingIPs", "type": "array", "items": { "type": "string", - "examples": ["192.168.178.1"], + "examples": [ + "192.168.178.1" + ], "format": "ipv4" } }, { "$id": "snmpIP", "type": "string", - "examples": ["192.168.178.1"], + "examples": [ + "192.168.178.1" + ], "format": "ipv4" }, { "$id": "snmpCommunity", "type": "string", - "examples": ["kentikSNMP"] + "examples": [ + "kentikSNMP" + ] }, { "$id": "snmpConfUsername", "type": "string", - "examples": ["kentik"] + "examples": [ + "kentik" + ] }, { "$id": "snmpConfAuthenticationProtocol", "type": "string", - "examples": ["SHA"] + "examples": [ + "SHA" + ] }, { "$id": "snmpConfAuthenticationPassphrase", "type": "string", - "examples": ["Pass"] + "examples": [ + "Pass" + ] }, { "$id": "snmpPrivacyProtocol", "type": "string", - "examples": ["AES"] + "examples": [ + "AES" + ] }, { "$id": "snmpPrivacyPassphrase", "type": "string", - "examples": ["AESPassword"] + "examples": [ + "AESPassword" + ] }, { "$id": "bgpType", "type": "string", - "examples": ["device"] + "examples": [ + "device" + ] }, { "$id": "bgpNeighborIP", "type": "string", - "examples": ["209.1.1.1"], + "examples": [ + "209.1.1.1" + ], "format": "ipv4" }, { "$id": "bgpNeighborIP6", "type": "string", - "examples": ["ff44::ffff"], + "examples": [ + "ff44::ffff" + ], "format": "ipv6" }, { "$id": "bgpNeighborASN", "type": "string", - "examples": ["1"] + "examples": [ + "1" + ] }, { "$id": "bgpNeighborPassword", "type": "string", - "examples": ["pass"] + "examples": [ + "pass" + ] }, { "$id": "siteName", "type": "string", - "examples": ["mySite"] + "examples": [ + "mySite" + ] }, { "$id": "teamsMessageStart", @@ -11411,7 +12547,9 @@ "type": "declaration", "library": "String", "method": "new String", - "args": ["router"], + "args": [ + "router" + ], "view": { "row": 1, "col": 3 @@ -11423,7 +12561,9 @@ "type": "declaration", "library": "String", "method": "new String", - "args": [null], + "args": [ + null + ], "view": { "row": 7, "col": 6 @@ -11435,7 +12575,9 @@ "type": "declaration", "library": "String", "method": "new String", - "args": ["none"], + "args": [ + "none" + ], "view": { "row": 6, "col": 6 @@ -11507,7 +12649,10 @@ "type": "method", "library": "Array", "method": "getIndex", - "args": [null, 0], + "args": [ + null, + 0 + ], "view": { "row": 2, "col": 1 @@ -11564,7 +12709,10 @@ "type": "method", "library": "Object", "method": "getProperty", - "args": [null, "name"], + "args": [ + null, + "name" + ], "view": { "row": 1, "col": 2 @@ -11576,7 +12724,10 @@ "type": "method", "library": "Object", "method": "getProperty", - "args": [null, "config_context"], + "args": [ + null, + "config_context" + ], "view": { "row": 2, "col": 2 @@ -11588,7 +12739,10 @@ "type": "method", "library": "Object", "method": "getProperty", - "args": [null, "site"], + "args": [ + null, + "site" + ], "view": { "row": 1, "col": 4 @@ -11720,7 +12874,10 @@ "type": "method", "library": "Object", "method": "getProperty", - "args": [null, "description"], + "args": [ + null, + "description" + ], "view": { "row": 2, "col": 3 @@ -11732,7 +12889,10 @@ "type": "method", "library": "Object", "method": "getProperty", - "args": [null, "sampleRate"], + "args": [ + null, + "sampleRate" + ], "view": { "row": 3, "col": 3 @@ -11744,7 +12904,10 @@ "type": "method", "library": "Object", "method": "getProperty", - "args": [null, "snmpCommunity"], + "args": [ + null, + "snmpCommunity" + ], "view": { "row": 4, "col": 3 @@ -11756,7 +12919,10 @@ "type": "method", "library": "Object", "method": "getProperty", - "args": [null, "snmpV3Conf"], + "args": [ + null, + "snmpV3Conf" + ], "view": { "row": 4, "col": 1 @@ -11768,7 +12934,10 @@ "type": "method", "library": "Object", "method": "getProperty", - "args": [null, "name"], + "args": [ + null, + "name" + ], "view": { "row": 2, "col": 4 @@ -11780,7 +12949,10 @@ "type": "method", "library": "Object", "method": "getProperty", - "args": [null, "ipAddress"], + "args": [ + null, + "ipAddress" + ], "view": { "row": 1, "col": 5 @@ -11792,7 +12964,9 @@ "type": "method", "library": "String", "method": "toLowerCase", - "args": [null], + "args": [ + null + ], "view": { "row": 7, "col": 1 @@ -11909,7 +13083,10 @@ "type": "method", "library": "Object", "method": "getProperty", - "args": [null, "userName"], + "args": [ + null, + "userName" + ], "view": { "row": 3, "col": 2 @@ -11921,7 +13098,10 @@ "type": "method", "library": "Object", "method": "getProperty", - "args": [null, "authenticationProtocol"], + "args": [ + null, + "authenticationProtocol" + ], "view": { "row": 4, "col": 2 @@ -11933,7 +13113,10 @@ "type": "method", "library": "Object", "method": "getProperty", - "args": [null, "authenticationPassphrase"], + "args": [ + null, + "authenticationPassphrase" + ], "view": { "row": 5, "col": 3 @@ -11945,7 +13128,10 @@ "type": "method", "library": "Object", "method": "getProperty", - "args": [null, "privacyProtocol"], + "args": [ + null, + "privacyProtocol" + ], "view": { "row": 5, "col": 1 @@ -11957,7 +13143,10 @@ "type": "method", "library": "Object", "method": "getProperty", - "args": [null, "privacyPassphrase"], + "args": [ + null, + "privacyPassphrase" + ], "view": { "row": 5, "col": 2 @@ -11969,7 +13158,9 @@ "type": "declaration", "library": "Array", "method": "new Array", - "args": [null], + "args": [ + null + ], "view": { "row": 1, "col": 6 @@ -11983,7 +13174,13 @@ "library": "String", "method": "templateLiteral", "template": "Device Onboarding has begun for device ${deviceName}.\n
    \n", - "args": [null, null, null, null, null], + "args": [ + null, + null, + null, + null, + null + ], "view": { "row": 6, "col": 1 @@ -11996,7 +13193,13 @@ "library": "String", "method": "templateLiteral", "template": "Device Onboarding has completed for device ${deviceName}. Traffic flow is being captured and can be seen in Kentik.\n
    \n", - "args": [null, null, null, null, null], + "args": [ + null, + null, + null, + null, + null + ], "view": { "row": 7, "col": 2 @@ -12410,15 +13613,21 @@ "properties": { "id": { "type": "string", - "examples": ["165963"] + "examples": [ + "165963" + ] }, "device_name": { "type": "string", - "examples": ["test"] + "examples": [ + "test" + ] }, "device_type": { "type": "string", - "examples": ["router"] + "examples": [ + "router" + ] } }, "required": [] @@ -12433,14 +13642,18 @@ { "$id": "deviceName", "type": "string", - "examples": ["deviceName"] + "examples": [ + "deviceName" + ] } ], "outgoing": [ { "$id": "deviceFilter", "type": "string", - "examples": ["device"] + "examples": [ + "device" + ] } ], "steps": [ @@ -12479,7 +13692,9 @@ "type": "method", "library": "String", "method": "toLowerCase", - "args": [null], + "args": [ + null + ], "view": { "row": 2, "col": 1 @@ -12506,7 +13721,11 @@ "type": "method", "library": "Array", "method": "find", - "args": [null, "findDevice", null], + "args": [ + null, + "findDevice", + null + ], "view": { "row": 1, "col": 2 @@ -12533,7 +13752,10 @@ "type": "method", "library": "Object", "method": "getProperty", - "args": [null, "id"], + "args": [ + null, + "id" + ], "view": { "row": 1, "col": 3 @@ -12561,7 +13783,9 @@ "library": "String", "method": "templateLiteral", "template": "response[${deviceId}].metadata.status.flow_last_seen", - "args": [null], + "args": [ + null + ], "view": { "row": 1, "col": 4 @@ -12592,15 +13816,21 @@ "properties": { "id": { "type": "string", - "examples": ["165963"] + "examples": [ + "165963" + ] }, "device_name": { "type": "string", - "examples": ["test"] + "examples": [ + "test" + ] }, "device_type": { "type": "string", - "examples": ["router"] + "examples": [ + "router" + ] } }, "required": [], @@ -12619,15 +13849,21 @@ "properties": { "id": { "type": "string", - "examples": ["165963"] + "examples": [ + "165963" + ] }, "device_name": { "type": "string", - "examples": ["test"] + "examples": [ + "test" + ] }, "device_type": { "type": "string", - "examples": ["router"] + "examples": [ + "router" + ] } }, "required": [] @@ -12684,7 +13920,10 @@ "type": "method", "library": "Equality", "method": "identity", - "args": [null, null], + "args": [ + null, + null + ], "view": { "row": 1, "col": 1 @@ -12754,26 +13993,36 @@ "properties": { "id": { "type": "integer", - "examples": [3] + "examples": [ + 3 + ] }, "url": { "type": "string", - "examples": ["https://35.169.244.112/api/dcim/devices/3/"] + "examples": [ + "https://35.169.244.112/api/dcim/devices/3/" + ] }, "display": { "type": "string", - "examples": ["ATLSWITCH01"] + "examples": [ + "ATLSWITCH01" + ] }, "name": { "type": "string", - "examples": ["ATLSWITCH01"] + "examples": [ + "ATLSWITCH01" + ] }, "device_type": { "type": "object", "properties": { "id": { "type": "integer", - "examples": [1] + "examples": [ + 1 + ] }, "url": { "type": "string", @@ -12783,14 +14032,18 @@ }, "display": { "type": "string", - "examples": ["IOS"] + "examples": [ + "IOS" + ] }, "manufacturer": { "type": "object", "properties": { "id": { "type": "integer", - "examples": [1] + "examples": [ + 1 + ] }, "url": { "type": "string", @@ -12800,26 +14053,36 @@ }, "display": { "type": "string", - "examples": ["Cisco"] + "examples": [ + "Cisco" + ] }, "name": { "type": "string", - "examples": ["Cisco"] + "examples": [ + "Cisco" + ] }, "slug": { "type": "string", - "examples": ["cisco"] + "examples": [ + "cisco" + ] } }, "required": [] }, "model": { "type": "string", - "examples": ["IOS"] + "examples": [ + "IOS" + ] }, "slug": { "type": "string", - "examples": ["ios"] + "examples": [ + "ios" + ] } }, "required": [] @@ -12829,7 +14092,9 @@ "properties": { "id": { "type": "integer", - "examples": [2] + "examples": [ + 2 + ] }, "url": { "type": "string", @@ -12839,15 +14104,21 @@ }, "display": { "type": "string", - "examples": ["Data Center"] + "examples": [ + "Data Center" + ] }, "name": { "type": "string", - "examples": ["Data Center"] + "examples": [ + "Data Center" + ] }, "slug": { "type": "string", - "examples": ["data-center"] + "examples": [ + "data-center" + ] } }, "required": [] @@ -12860,30 +14131,42 @@ "properties": { "id": { "type": "integer", - "examples": [1] + "examples": [ + 1 + ] }, "url": { "type": "string", - "examples": ["https://35.169.244.112/api/dcim/platforms/1/"] + "examples": [ + "https://35.169.244.112/api/dcim/platforms/1/" + ] }, "display": { "type": "string", - "examples": ["CIsco IOS"] + "examples": [ + "CIsco IOS" + ] }, "name": { "type": "string", - "examples": ["CIsco IOS"] + "examples": [ + "CIsco IOS" + ] }, "slug": { "type": "string", - "examples": ["cisco-ios"] + "examples": [ + "cisco-ios" + ] } }, "required": [] }, "serial": { "type": "string", - "examples": ["12345"] + "examples": [ + "12345" + ] }, "asset_tag": { "type": "null" @@ -12893,23 +14176,33 @@ "properties": { "id": { "type": "integer", - "examples": [2] + "examples": [ + 2 + ] }, "url": { "type": "string", - "examples": ["https://35.169.244.112/api/dcim/sites/2/"] + "examples": [ + "https://35.169.244.112/api/dcim/sites/2/" + ] }, "display": { "type": "string", - "examples": ["ATL HQ"] + "examples": [ + "ATL HQ" + ] }, "name": { "type": "string", - "examples": ["ATL HQ"] + "examples": [ + "ATL HQ" + ] }, "slug": { "type": "string", - "examples": ["atl-hq"] + "examples": [ + "atl-hq" + ] } }, "required": [] @@ -12934,11 +14227,15 @@ "properties": { "value": { "type": "string", - "examples": ["active"] + "examples": [ + "active" + ] }, "label": { "type": "string", - "examples": ["Active"] + "examples": [ + "Active" + ] } }, "required": [] @@ -12969,53 +14266,73 @@ }, "comments": { "type": "string", - "examples": ["Used for Partner testing, Kentik"] + "examples": [ + "Used for Partner testing, Kentik" + ] }, "local_context_data": { "type": "object", "properties": { "ipAddress": { "type": "string", - "examples": ["3.230.106.58"], + "examples": [ + "3.230.106.58" + ], "format": "ipv4" }, "sampleRate": { "type": "integer", - "examples": [1] + "examples": [ + 1 + ] }, "snmpV3Conf": { "type": "object", "properties": { "userName": { "type": "string", - "examples": ["kentik"] + "examples": [ + "kentik" + ] }, "privacyProtocol": { "type": "string", - "examples": ["AES"] + "examples": [ + "AES" + ] }, "privacyPassphrase": { "type": "string", - "examples": ["AESPassword"] + "examples": [ + "AESPassword" + ] }, "authenticationProtocol": { "type": "string", - "examples": ["SHA"] + "examples": [ + "SHA" + ] }, "authenticationPassphrase": { "type": "string", - "examples": ["Password"] + "examples": [ + "Password" + ] } }, "required": [] }, "description": { "type": "string", - "examples": ["New Test Device"] + "examples": [ + "New Test Device" + ] }, "snmpCommunity": { "type": "string", - "examples": ["kentikSNMP"] + "examples": [ + "kentikSNMP" + ] } }, "required": [] @@ -13033,58 +14350,80 @@ "properties": { "ipAddress": { "type": "string", - "examples": ["3.230.106.58"], + "examples": [ + "3.230.106.58" + ], "format": "ipv4" }, "sampleRate": { "type": "integer", - "examples": [1] + "examples": [ + 1 + ] }, "snmpV3Conf": { "type": "object", "properties": { "userName": { "type": "string", - "examples": ["kentik"] + "examples": [ + "kentik" + ] }, "privacyProtocol": { "type": "string", - "examples": ["AES"] + "examples": [ + "AES" + ] }, "privacyPassphrase": { "type": "string", - "examples": ["AESPassword"] + "examples": [ + "AESPassword" + ] }, "authenticationProtocol": { "type": "string", - "examples": ["SHA"] + "examples": [ + "SHA" + ] }, "authenticationPassphrase": { "type": "string", - "examples": ["Password"] + "examples": [ + "Password" + ] } }, "required": [] }, "description": { "type": "string", - "examples": ["New Test Device"] + "examples": [ + "New Test Device" + ] }, "snmpCommunity": { "type": "string", - "examples": ["kentikSNMP"] + "examples": [ + "kentikSNMP" + ] } }, "required": [] }, "created": { "type": "string", - "examples": ["2023-09-02T20:38:21.063282Z"], + "examples": [ + "2023-09-02T20:38:21.063282Z" + ], "format": "date-time" }, "last_updated": { "type": "string", - "examples": ["2023-09-20T16:53:12.254929Z"], + "examples": [ + "2023-09-20T16:53:12.254929Z" + ], "format": "date-time" } }, @@ -13093,12 +14432,16 @@ { "$id": "jobId", "type": "string", - "examples": ["afdaf323r4"] + "examples": [ + "afdaf323r4" + ] }, { "$id": "vrfGatewayIP", "type": "string", - "examples": ["10.10.10.123"], + "examples": [ + "10.10.10.123" + ], "format": "ipv4" }, { @@ -13110,19 +14453,25 @@ "properties": { "company_max_fps": { "type": "integer", - "examples": [4000] + "examples": [ + 4000 + ] }, "flow_ips": { "type": "array", "items": { "type": "string", - "examples": ["208.76.14.230"], + "examples": [ + "208.76.14.230" + ], "format": "ipv4" } }, "port": { "type": "string", - "examples": ["20013"] + "examples": [ + "20013" + ] }, "access_control": { "type": "object", @@ -13131,21 +14480,27 @@ "type": "array", "items": { "type": "string", - "examples": ["0.0.0.0/0"] + "examples": [ + "0.0.0.0/0" + ] } }, "remote_agent_access_allowed": { "type": "array", "items": { "type": "string", - "examples": ["0.0.0.0/0"] + "examples": [ + "0.0.0.0/0" + ] } }, "remote_api_access_allowed": { "type": "array", "items": { "type": "string", - "examples": ["10.10.10.10"], + "examples": [ + "10.10.10.10" + ], "format": "ipv4" } }, @@ -13157,14 +14512,18 @@ }, "edition": { "type": "string", - "examples": ["premier"] + "examples": [ + "premier" + ] }, "tags": { "type": "array" }, "currency": { "type": "string", - "examples": ["USD"] + "examples": [ + "USD" + ] } }, "required": [] @@ -13180,59 +14539,85 @@ "properties": { "snmpCommunity": { "type": "string", - "examples": ["kentikSNMP"] + "examples": [ + "kentikSNMP" + ] }, "customFlowRecord": { "type": "string", - "examples": ["itential-flow"] + "examples": [ + "itential-flow" + ] }, "netflowSampler": { "type": "string", - "examples": ["itential-sampler"] + "examples": [ + "itential-sampler" + ] }, "deviceSampleRate": { "type": "integer", - "examples": [1] + "examples": [ + 1 + ] }, "exporter": { "type": "string", - "examples": ["itential-exporter"] + "examples": [ + "itential-exporter" + ] }, "publicFlowIngestDescription": { "type": "string", - "examples": ["iap-job-id"] + "examples": [ + "iap-job-id" + ] }, "kentikIngestIP": { "type": "string", - "examples": ["208.76.14.230"], + "examples": [ + "208.76.14.230" + ], "format": "ipv4" }, "kentikIngestUDPPort": { "type": "string", - "examples": ["20013"] + "examples": [ + "20013" + ] }, "vrfName": { "type": "string", - "examples": ["itential-vrf"] + "examples": [ + "itential-vrf" + ] }, "vrfGatewayIP": { "type": "string", - "examples": ["10.10.10.123"], + "examples": [ + "10.10.10.123" + ], "format": "ipv4" }, "flowMonitor": { "type": "string", - "examples": ["itential-monitor"] + "examples": [ + "itential-monitor" + ] }, "sourceInterface": { "type": "string", - "examples": ["GigabitEthernet1"] + "examples": [ + "GigabitEthernet1" + ] }, "sourceInterfaces": { "type": "array", "items": { "type": "string", - "examples": ["GigabitEthernet1"] + "examples": [ + "GigabitEthernet1" + ] } } }, @@ -13305,7 +14690,9 @@ "type": "declaration", "library": "String", "method": "new String", - "args": ["itential-flow"], + "args": [ + "itential-flow" + ], "view": { "row": 1, "col": 1 @@ -13317,7 +14704,9 @@ "type": "declaration", "library": "String", "method": "new String", - "args": ["itential-sampler"], + "args": [ + "itential-sampler" + ], "view": { "row": 2, "col": 1 @@ -13329,7 +14718,9 @@ "type": "declaration", "library": "String", "method": "new String", - "args": ["itential-exporter"], + "args": [ + "itential-exporter" + ], "view": { "row": 3, "col": 1 @@ -13341,7 +14732,9 @@ "type": "declaration", "library": "String", "method": "new String", - "args": [null], + "args": [ + null + ], "view": { "row": 4, "col": 1 @@ -13353,7 +14746,9 @@ "type": "declaration", "library": "String", "method": "new String", - "args": ["itential-monitor"], + "args": [ + "itential-monitor" + ], "view": { "row": 5, "col": 1 @@ -13365,7 +14760,10 @@ "type": "declaration", "library": "Array", "method": "new Array", - "args": ["GigabitEthernet1", "GigabitEthernet1.33"], + "args": [ + "GigabitEthernet1", + "GigabitEthernet1.33" + ], "view": { "row": 4, "col": 2 @@ -13468,7 +14866,10 @@ "type": "method", "library": "Array", "method": "getIndex", - "args": [null, 0], + "args": [ + null, + 0 + ], "view": { "row": 3, "col": 2 @@ -13525,7 +14926,9 @@ "type": "declaration", "library": "String", "method": "new String", - "args": ["GigabitEthernet1"], + "args": [ + "GigabitEthernet1" + ], "view": { "row": 1, "col": 2 @@ -13586,15 +14989,21 @@ "properties": { "sourceIP": { "type": "string", - "examples": ["10.10.10.10"] + "examples": [ + "10.10.10.10" + ] }, "awsEC2Adapter": { "type": "string", - "examples": ["AWS"] + "examples": [ + "AWS" + ] }, "awsSecurityGroup": { "type": "string", - "examples": ["webserver-kentik"] + "examples": [ + "webserver-kentik" + ] } }, "required": [] @@ -13604,12 +15013,16 @@ { "$id": "cidrSourceIP", "type": "string", - "examples": ["10.10.10.10"] + "examples": [ + "10.10.10.10" + ] }, { "$id": "awsEC2Adapter", "type": "string", - "examples": ["AWS"] + "examples": [ + "AWS" + ] }, { "$id": "securityGroupSearchData", @@ -13668,7 +15081,9 @@ "library": "String", "method": "templateLiteral", "template": "${sourceIP}/32", - "args": [null], + "args": [ + null + ], "view": { "row": 1, "col": 1 @@ -13679,7 +15094,9 @@ "id": 6, "type": "function", "function": "createSecurityGroupSearch", - "args": [null], + "args": [ + null + ], "view": { "row": 2, "col": 1 @@ -13723,7 +15140,9 @@ { "$id": "securityGroupName", "type": "string", - "examples": ["securityGroupName"] + "examples": [ + "securityGroupName" + ] } ], "outgoing": [ @@ -13735,11 +15154,15 @@ "properties": { "Name": { "type": "string", - "examples": ["group-name"] + "examples": [ + "group-name" + ] }, "Value": { "type": "string", - "examples": ["webserver-kentik"] + "examples": [ + "webserver-kentik" + ] } }, "required": [] @@ -13800,7 +15223,9 @@ "type": "declaration", "library": "Array", "method": "new Array", - "args": [null], + "args": [ + null + ], "view": { "row": 1, "col": 2 @@ -13871,35 +15296,51 @@ "properties": { "deviceName": { "type": "string", - "examples": ["IOS_Device_Name"] + "examples": [ + "IOS_Device_Name" + ] }, "iapUrl": { "type": "string", - "examples": ["https://iap_01:3443"] + "examples": [ + "https://iap_01:3443" + ] }, "serviceNowUrl": { "type": "string", - "examples": ["https://servicenow_dev.com"] + "examples": [ + "https://servicenow_dev.com" + ] }, "deviceOnboardingWebhookUrl": { "type": "string", - "examples": ["webhookURL"] + "examples": [ + "webhookURL" + ] }, "serviceNowAdapter": { "type": "string", - "examples": ["ServiceNow"] + "examples": [ + "ServiceNow" + ] }, "netBoxAdapter": { "type": "string", - "examples": ["NetboxV3"] + "examples": [ + "NetboxV3" + ] }, "msTeamsAdapter": { "type": "string", - "examples": ["MS Teams"] + "examples": [ + "MS Teams" + ] }, "kentikAdapter": { "type": "string", - "examples": ["Kentik v5"] + "examples": [ + "Kentik v5" + ] } }, "required": [] @@ -13921,17 +15362,23 @@ { "$id": "deviceName", "type": "string", - "examples": ["IOS_Device_Name"] + "examples": [ + "IOS_Device_Name" + ] }, { "$id": "iapURL", "type": "string", - "examples": ["https://iap_01:3443"] + "examples": [ + "https://iap_01:3443" + ] }, { "$id": "serviceNowURL", "type": "string", - "examples": ["https://servicenow_dev.com"] + "examples": [ + "https://servicenow_dev.com" + ] }, { "$id": "deviceOnboardingWebhookURL", @@ -13940,12 +15387,16 @@ { "$id": "serviceNowAdapter", "type": "string", - "examples": ["ServiceNow"] + "examples": [ + "ServiceNow" + ] }, { "$id": "netBoxAdapter", "type": "string", - "examples": ["NetBox"] + "examples": [ + "NetBox" + ] }, { "$id": "msTeamsAdapter", @@ -13963,7 +15414,11 @@ "library": "String", "method": "templateLiteral", "template": "[code] Device Onboarding has begun for device ${deviceName}.
    [/code]", - "args": [null, null, null], + "args": [ + null, + null, + null + ], "view": { "row": 1, "col": 2 @@ -13991,7 +15446,9 @@ "library": "String", "method": "templateLiteral", "template": "Kentik Device Onboarding: ${deviceName}", - "args": [null], + "args": [ + null + ], "view": { "row": 2, "col": 2 @@ -14215,84 +15672,5248 @@ "version": "4.3.6-2023.2.5", "tags": [] } - } - ], - "folders": [ - { - "nodeType": "folder", - "name": "Create Device", - "children": [ - { - "iid": 8, - "nodeType": "component" - }, - { - "iid": 25, - "nodeType": "component" - } - ] - }, - { - "nodeType": "folder", - "name": "Device Flow Test", - "children": [ - { - "iid": 27, - "nodeType": "component" - }, - { - "iid": 3, - "nodeType": "component" - } - ] }, { - "nodeType": "folder", - "name": "Sample Use Cases", - "children": [ - { - "nodeType": "folder", - "name": "AWS Blocked Traffic Event", - "children": [ - { - "iid": 9, - "nodeType": "component" - }, - { - "iid": 21, - "nodeType": "component" - }, - { - "iid": 20, - "nodeType": "component" + "iid": 31, + "reference": "b2dc14e4-41d2-43b2-a9da-80b9f63e5187", + "type": "workflow", + "folder": "/Devices", + "document": { + "name": "List Devices", + "description": "List Devices", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "ListDevices", + "canvasName": "ListDevices", + "summary": "ListDevices", + "description": "ListDevices", + "location": "Adapter", + "locationType": "Kentik Device & Site API:latest", + "app": "Kentik Device & Site API:latest", + "type": "automatic", + "displayName": "Kentik", + "variables": { + "incoming": { + "adapter_id": "Kentik", + "query.noCustomColumns": "$var.job.noCustomColumns", + "view": "$var.job.view" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] }, - { - "iid": 0, - "nodeType": "component" + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 } - ] + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } }, - { - "nodeType": "folder", - "name": "AWS Blocked Traffic Event - Reset", - "children": [ - { - "iid": 15, - "nodeType": "component" - }, - { - "iid": 2, - "nodeType": "component" - }, - { - "iid": 29, - "nodeType": "component" + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" } - ] + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} }, - { - "nodeType": "folder", - "name": "Device Onboarding", + "inputSchema": { + "type": "object", + "properties": { + "noCustomColumns": { + "type": "boolean" + }, + "view": { + "type": "string", + "enum": [ + "DEVICE_VIEW_UNSPECIFIED", + "DEVICE_VIEW_FULL", + "DEVICE_VIEW_BASIC", + "DEVICE_VIEW_ID_ONLY" + ], + "default": "DEVICE_VIEW_UNSPECIFIED" + } + }, + "required": [ + "noCustomColumns", + "view" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "noCustomColumns": { + "type": "boolean" + }, + "view": { + "type": "string", + "enum": [ + "DEVICE_VIEW_UNSPECIFIED", + "DEVICE_VIEW_FULL", + "DEVICE_VIEW_BASIC", + "DEVICE_VIEW_ID_ONLY" + ], + "default": "DEVICE_VIEW_UNSPECIFIED" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-13T02:30:43.377Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "29472c59-0aa8-4ec4-93fb-6362b113a2db", + "created": "2026-08-13T02:25:38.940Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 32, + "reference": "f6fc12b0-071c-4652-a192-31ccdfeed7b9", + "type": "workflow", + "folder": "/Devices", + "document": { + "name": "Create Kentik Device", + "description": "Create Kentik Device", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "CreateDevice", + "canvasName": "CreateDevice", + "summary": "CreateDevice", + "description": "CreateDevice", + "location": "Adapter", + "locationType": "Kentik Device & Site API:latest", + "app": "Kentik Device & Site API:latest", + "type": "automatic", + "displayName": "Kentik", + "variables": { + "incoming": { + "adapter_id": "Kentik", + "bodyContentType": "application/json", + "requestBodyPayload": "$var.job.spec" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "device": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "System generated unique identifier", + "title": "id" + }, + "deviceName": { + "type": "string", + "description": "Device name (device_name) - The name of the device. Valid characters: alphanumeric and underscores. Length: min=4, max=60." + }, + "deviceSubtype": { + "type": "string", + "description": "Device subtype (device_subtype) - The device subtype." + }, + "cdnAttr": { + "type": "string", + "description": "CDN attributes (cdn_attr) - If this is a DNS server, you can contribute its queries to Kentik's CDN attribution database. Valid values: \"Y\" or \"N\". ** cdn_attr is required when the device subtype's parent type is \"host-nprobe-dns-www\"" + }, + "deviceDescription": { + "type": "string", + "description": "Description (device_description) - The device description. Valid characters: any. Length: max=128." + }, + "sendingIps": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Device ip (sending_ips) - Array containing one or more IP address(es), from which the device is sending flow. ** sending_ips is required when the device subtype's parent type is \"router\"" + }, + "deviceSampleRate": { + "type": "number", + "format": "double", + "description": "Sample rate (device_sample_rate) - The rate at which the device is sampling flows. Valid values: integer bigger than 1. Recommended rate varies depending on flow volume; see https://kb.kentik.com/Ab02.htm#Ab02-Flow_Sampling. ** device_sample_rate is required when the device subtype's parent type is \"router\"" + }, + "planId": { + "type": "integer", + "format": "int64", + "description": "Plan (plan_id) - The ID of the plan to which this device is assigned. Available plan(s) can be found via the Plans API. Valid value: integer." + }, + "siteId": { + "type": "integer", + "format": "int64", + "description": "Site (site_id) - The ID of the site (if any) to which this device is assigned. Site IDs are system generated when a site is created. Valid value: integer." + }, + "minimizeSnmp": { + "type": "boolean", + "description": "SNMP polling (minimize_snmp) - The interval at which SNMP will be polled. If \"false\" (Standard), interface counter will be polled every 10 minutes and interface description every 30 minutes. If \"true\" (Minimum) (Minimum), interface counter won't be polled and interface description will be polled every 6 hours. ** minimize_snmp is required when the device subtype's parent type is \"router\"" + }, + "deviceSnmpIp": { + "type": "string", + "description": "Device SNMP IP (device_snmp_ip) - The SNMP IP to use when polling the device. device_snmp_ip is ignored unless the device subtype's parent type is \"router\"" + }, + "deviceSnmpCommunity": { + "type": "string", + "description": "SNMP community (device_snmp_community) - The SNMP community to use when polling the device. device_snmp_community is ignored unless the device subtype's parent type is \"router\"" + }, + "deviceSnmpV3Conf": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "UserName (username) - the user name to use to authenticate via SNMP v3. ** UserName is required when device_snmp_v3_conf is not null" + }, + "authenticationProtocol": { + "type": "string", + "description": "Authentication Protocol (authentication_protocol) - the auth protocol to use via SNMP v3" + }, + "authenticationPassphrase": { + "type": "string", + "description": "Authentication Passphrase (authentication_passphrase) - the passphrase to use for SNMP v3 authentication protocol (required when AuthenticationProtocol not NoAuth)" + }, + "privacyProtocol": { + "type": "string", + "description": "Privacy Protocol (privacy_protocol) - the privacy protocol to use to authenticate via SNMP v3" + }, + "privacyPassphrase": { + "type": "string", + "description": "Privacy Passphrase (privacy_passphrase) - the passphrase to use for SNMP v3 privacy protocol (required when PrivacyProtocol not NoPriv)" + } + }, + "title": "DeviceSnmpV3Conf" + }, + "deviceBgpType": { + "type": "string", + "description": "BGP (device_bgp_type) - Device bgp type. Valid values: \"none\" (use generic IP/ASN mapping), \"device\" (peer with the device itself), \"other_device\" (share routing table of existing peered device)" + }, + "deviceBgpNeighborIp": { + "type": "string", + "description": "Your IPv4 peering address (device_bgp_neighbor_ip) - A valid IPv4 address to use for peering with the device. ** An IPv4 and/or IPv6 peering address is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpNeighborIp6": { + "type": "string", + "description": "Your IPv6 peering address (device_bgp_neighbor_ip6) - A valid IPv6 address to use for peering with the device. ** An IPv4 and/or IPv6 peering address is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpNeighborAsn": { + "type": "string", + "description": "Your ASN (device_bgp_neighbor_asn) - The valid AS number (ASN) of the autonomous system that this device belongs to. ** device_bgp_neighbor_asn is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpPassword": { + "type": "string", + "description": "BGP md5 password (device_bgp_password) - Optional BGP MD5 password (shared authentication password for BGP peering). Valid characters: printable ASCII excluding space and question mark. Length: 32. device_bgp_password is optional when device_bgp_type is set to \"device\"" + }, + "useBgpDeviceId": { + "type": "string", + "description": "Select master BGP device (use_bgp_device_id) - The ID of the device whose BGP table should be shared with this device. ** use_bgp_device_id is required when device_bgp_type is set to \"other_device\"). Valid value: a system-generated device_id" + }, + "deviceBgpFlowspec": { + "type": "boolean", + "description": "BGP Flowspec Compatibility (device_bgp_flowspec) - Toggle BGP Flowspec Compatibility for device." + }, + "nms": { + "type": "object", + "properties": { + "agentId": { + "type": "string", + "description": "ID of the agent that is monitoring this device." + }, + "ipAddress": { + "type": "string", + "description": "Local IP address of this device." + }, + "snmp": { + "type": "object", + "properties": { + "credentialName": { + "type": "string", + "description": "Name of the SNMP credentials from the credential vault." + }, + "port": { + "type": "integer", + "format": "int64", + "description": "SNMP port, to override default of 161." + }, + "timeout": { + "type": "string", + "description": "Timeout, to override default of 2s." + } + }, + "title": "DeviceNmsSnmpConfig" + }, + "st": { + "type": "object", + "properties": { + "credentialName": { + "type": "string", + "description": "Name of the ST credentials from the credential vault." + }, + "port": { + "type": "integer", + "format": "int64", + "description": "ST port, to override default of 6030." + }, + "timeout": { + "type": "string", + "description": "Timeout, to override default of 2s." + }, + "secure": { + "type": "boolean", + "description": "Use SSL to connect to this device." + } + }, + "title": "DeviceNmsStConfig" + } + }, + "title": "DeviceNmsConfig" + }, + "deviceBgpCredentialName": { + "type": "string", + "description": "BGP Credential Name (device_bgp_credential_name) - Unsupported Field. Use device_bgp_password instead." + }, + "flowSnmpCredentialName": { + "type": "string", + "description": "Snmp Credential Name (flow_snmp_credential_name) - Optional Credential Name (Credential for Flow Snmp peering). Valid characters: alphanumeric. Length: 32." + }, + "monitoringTemplateId": { + "type": "integer", + "format": "int64", + "description": "Monitoring template - The ID of the monitoring template assigned to this device." + }, + "deviceAlert": { + "type": "string", + "description": "Device alert - The device alert endpoint URL." + } + }, + "title": "DeviceConcise" + } + }, + "title": "CreateDeviceRequest", + "required": [ + "device" + ] + } + }, + "required": [ + "spec" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "device": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "System generated unique identifier", + "title": "id" + }, + "deviceName": { + "type": "string", + "description": "Device name (device_name) - The name of the device. Valid characters: alphanumeric and underscores. Length: min=4, max=60." + }, + "deviceSubtype": { + "type": "string", + "description": "Device subtype (device_subtype) - The device subtype." + }, + "cdnAttr": { + "type": "string", + "description": "CDN attributes (cdn_attr) - If this is a DNS server, you can contribute its queries to Kentik's CDN attribution database. Valid values: \"Y\" or \"N\". ** cdn_attr is required when the device subtype's parent type is \"host-nprobe-dns-www\"" + }, + "deviceDescription": { + "type": "string", + "description": "Description (device_description) - The device description. Valid characters: any. Length: max=128." + }, + "sendingIps": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Device ip (sending_ips) - Array containing one or more IP address(es), from which the device is sending flow. ** sending_ips is required when the device subtype's parent type is \"router\"" + }, + "deviceSampleRate": { + "type": "number", + "format": "double", + "description": "Sample rate (device_sample_rate) - The rate at which the device is sampling flows. Valid values: integer bigger than 1. Recommended rate varies depending on flow volume; see https://kb.kentik.com/Ab02.htm#Ab02-Flow_Sampling. ** device_sample_rate is required when the device subtype's parent type is \"router\"" + }, + "planId": { + "type": "integer", + "format": "int64", + "description": "Plan (plan_id) - The ID of the plan to which this device is assigned. Available plan(s) can be found via the Plans API. Valid value: integer." + }, + "siteId": { + "type": "integer", + "format": "int64", + "description": "Site (site_id) - The ID of the site (if any) to which this device is assigned. Site IDs are system generated when a site is created. Valid value: integer." + }, + "minimizeSnmp": { + "type": "boolean", + "description": "SNMP polling (minimize_snmp) - The interval at which SNMP will be polled. If \"false\" (Standard), interface counter will be polled every 10 minutes and interface description every 30 minutes. If \"true\" (Minimum) (Minimum), interface counter won't be polled and interface description will be polled every 6 hours. ** minimize_snmp is required when the device subtype's parent type is \"router\"" + }, + "deviceSnmpIp": { + "type": "string", + "description": "Device SNMP IP (device_snmp_ip) - The SNMP IP to use when polling the device. device_snmp_ip is ignored unless the device subtype's parent type is \"router\"" + }, + "deviceSnmpCommunity": { + "type": "string", + "description": "SNMP community (device_snmp_community) - The SNMP community to use when polling the device. device_snmp_community is ignored unless the device subtype's parent type is \"router\"" + }, + "deviceSnmpV3Conf": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "UserName (username) - the user name to use to authenticate via SNMP v3. ** UserName is required when device_snmp_v3_conf is not null" + }, + "authenticationProtocol": { + "type": "string", + "description": "Authentication Protocol (authentication_protocol) - the auth protocol to use via SNMP v3" + }, + "authenticationPassphrase": { + "type": "string", + "description": "Authentication Passphrase (authentication_passphrase) - the passphrase to use for SNMP v3 authentication protocol (required when AuthenticationProtocol not NoAuth)" + }, + "privacyProtocol": { + "type": "string", + "description": "Privacy Protocol (privacy_protocol) - the privacy protocol to use to authenticate via SNMP v3" + }, + "privacyPassphrase": { + "type": "string", + "description": "Privacy Passphrase (privacy_passphrase) - the passphrase to use for SNMP v3 privacy protocol (required when PrivacyProtocol not NoPriv)" + } + }, + "title": "DeviceSnmpV3Conf" + }, + "deviceBgpType": { + "type": "string", + "description": "BGP (device_bgp_type) - Device bgp type. Valid values: \"none\" (use generic IP/ASN mapping), \"device\" (peer with the device itself), \"other_device\" (share routing table of existing peered device)" + }, + "deviceBgpNeighborIp": { + "type": "string", + "description": "Your IPv4 peering address (device_bgp_neighbor_ip) - A valid IPv4 address to use for peering with the device. ** An IPv4 and/or IPv6 peering address is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpNeighborIp6": { + "type": "string", + "description": "Your IPv6 peering address (device_bgp_neighbor_ip6) - A valid IPv6 address to use for peering with the device. ** An IPv4 and/or IPv6 peering address is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpNeighborAsn": { + "type": "string", + "description": "Your ASN (device_bgp_neighbor_asn) - The valid AS number (ASN) of the autonomous system that this device belongs to. ** device_bgp_neighbor_asn is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpPassword": { + "type": "string", + "description": "BGP md5 password (device_bgp_password) - Optional BGP MD5 password (shared authentication password for BGP peering). Valid characters: printable ASCII excluding space and question mark. Length: 32. device_bgp_password is optional when device_bgp_type is set to \"device\"" + }, + "useBgpDeviceId": { + "type": "string", + "description": "Select master BGP device (use_bgp_device_id) - The ID of the device whose BGP table should be shared with this device. ** use_bgp_device_id is required when device_bgp_type is set to \"other_device\"). Valid value: a system-generated device_id" + }, + "deviceBgpFlowspec": { + "type": "boolean", + "description": "BGP Flowspec Compatibility (device_bgp_flowspec) - Toggle BGP Flowspec Compatibility for device." + }, + "nms": { + "type": "object", + "properties": { + "agentId": { + "type": "string", + "description": "ID of the agent that is monitoring this device." + }, + "ipAddress": { + "type": "string", + "description": "Local IP address of this device." + }, + "snmp": { + "type": "object", + "properties": { + "credentialName": { + "type": "string", + "description": "Name of the SNMP credentials from the credential vault." + }, + "port": { + "type": "integer", + "format": "int64", + "description": "SNMP port, to override default of 161." + }, + "timeout": { + "type": "string", + "description": "Timeout, to override default of 2s." + } + }, + "title": "DeviceNmsSnmpConfig" + }, + "st": { + "type": "object", + "properties": { + "credentialName": { + "type": "string", + "description": "Name of the ST credentials from the credential vault." + }, + "port": { + "type": "integer", + "format": "int64", + "description": "ST port, to override default of 6030." + }, + "timeout": { + "type": "string", + "description": "Timeout, to override default of 2s." + }, + "secure": { + "type": "boolean", + "description": "Use SSL to connect to this device." + } + }, + "title": "DeviceNmsStConfig" + } + }, + "title": "DeviceNmsConfig" + }, + "deviceBgpCredentialName": { + "type": "string", + "description": "BGP Credential Name (device_bgp_credential_name) - Unsupported Field. Use device_bgp_password instead." + }, + "flowSnmpCredentialName": { + "type": "string", + "description": "Snmp Credential Name (flow_snmp_credential_name) - Optional Credential Name (Credential for Flow Snmp peering). Valid characters: alphanumeric. Length: 32." + }, + "monitoringTemplateId": { + "type": "integer", + "format": "int64", + "description": "Monitoring template - The ID of the monitoring template assigned to this device." + }, + "deviceAlert": { + "type": "string", + "description": "Device alert - The device alert endpoint URL." + } + }, + "title": "DeviceConcise" + } + }, + "title": "CreateDeviceRequest", + "required": [ + "device" + ] + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-13T02:30:43.377Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "created": "1970-01-01T00:00:00.000Z", + "createdVersion": "5.55.5", + "scenarios": [], + "uuid": "3be8eb7c-1ea5-4966-8dac-d67a46b11a6d", + "canvasVersion": 3, + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 33, + "reference": "a8b4b450-bc62-417d-9926-159c51b20353", + "type": "workflow", + "folder": "/Devices", + "document": { + "name": "Create Devices", + "description": "Create Devices", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "CreateDevices", + "canvasName": "CreateDevices", + "summary": "CreateDevices", + "description": "CreateDevices", + "location": "Adapter", + "locationType": "Kentik Device & Site API:latest", + "app": "Kentik Device & Site API:latest", + "type": "automatic", + "displayName": "Kentik", + "variables": { + "incoming": { + "adapter_id": "Kentik", + "bodyContentType": "application/json", + "requestBodyPayload": "$var.job.spec" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "devices": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "System generated unique identifier", + "title": "id" + }, + "deviceName": { + "type": "string", + "description": "Device name (device_name) - The name of the device. Valid characters: alphanumeric and underscores. Length: min=4, max=60." + }, + "deviceSubtype": { + "type": "string", + "description": "Device subtype (device_subtype) - The device subtype." + }, + "cdnAttr": { + "type": "string", + "description": "CDN attributes (cdn_attr) - If this is a DNS server, you can contribute its queries to Kentik's CDN attribution database. Valid values: \"Y\" or \"N\". ** cdn_attr is required when the device subtype's parent type is \"host-nprobe-dns-www\"" + }, + "deviceDescription": { + "type": "string", + "description": "Description (device_description) - The device description. Valid characters: any. Length: max=128." + }, + "sendingIps": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Device ip (sending_ips) - Array containing one or more IP address(es), from which the device is sending flow. ** sending_ips is required when the device subtype's parent type is \"router\"" + }, + "deviceSampleRate": { + "type": "number", + "format": "double", + "description": "Sample rate (device_sample_rate) - The rate at which the device is sampling flows. Valid values: integer bigger than 1. Recommended rate varies depending on flow volume; see https://kb.kentik.com/Ab02.htm#Ab02-Flow_Sampling. ** device_sample_rate is required when the device subtype's parent type is \"router\"" + }, + "planId": { + "type": "integer", + "format": "int64", + "description": "Plan (plan_id) - The ID of the plan to which this device is assigned. Available plan(s) can be found via the Plans API. Valid value: integer." + }, + "siteId": { + "type": "integer", + "format": "int64", + "description": "Site (site_id) - The ID of the site (if any) to which this device is assigned. Site IDs are system generated when a site is created. Valid value: integer." + }, + "minimizeSnmp": { + "type": "boolean", + "description": "SNMP polling (minimize_snmp) - The interval at which SNMP will be polled. If \"false\" (Standard), interface counter will be polled every 10 minutes and interface description every 30 minutes. If \"true\" (Minimum) (Minimum), interface counter won't be polled and interface description will be polled every 6 hours. ** minimize_snmp is required when the device subtype's parent type is \"router\"" + }, + "deviceSnmpIp": { + "type": "string", + "description": "Device SNMP IP (device_snmp_ip) - The SNMP IP to use when polling the device. device_snmp_ip is ignored unless the device subtype's parent type is \"router\"" + }, + "deviceSnmpCommunity": { + "type": "string", + "description": "SNMP community (device_snmp_community) - The SNMP community to use when polling the device. device_snmp_community is ignored unless the device subtype's parent type is \"router\"" + }, + "deviceSnmpV3Conf": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "UserName (username) - the user name to use to authenticate via SNMP v3. ** UserName is required when device_snmp_v3_conf is not null" + }, + "authenticationProtocol": { + "type": "string", + "description": "Authentication Protocol (authentication_protocol) - the auth protocol to use via SNMP v3" + }, + "authenticationPassphrase": { + "type": "string", + "description": "Authentication Passphrase (authentication_passphrase) - the passphrase to use for SNMP v3 authentication protocol (required when AuthenticationProtocol not NoAuth)" + }, + "privacyProtocol": { + "type": "string", + "description": "Privacy Protocol (privacy_protocol) - the privacy protocol to use to authenticate via SNMP v3" + }, + "privacyPassphrase": { + "type": "string", + "description": "Privacy Passphrase (privacy_passphrase) - the passphrase to use for SNMP v3 privacy protocol (required when PrivacyProtocol not NoPriv)" + } + }, + "title": "DeviceSnmpV3Conf" + }, + "deviceBgpType": { + "type": "string", + "description": "BGP (device_bgp_type) - Device bgp type. Valid values: \"none\" (use generic IP/ASN mapping), \"device\" (peer with the device itself), \"other_device\" (share routing table of existing peered device)" + }, + "deviceBgpNeighborIp": { + "type": "string", + "description": "Your IPv4 peering address (device_bgp_neighbor_ip) - A valid IPv4 address to use for peering with the device. ** An IPv4 and/or IPv6 peering address is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpNeighborIp6": { + "type": "string", + "description": "Your IPv6 peering address (device_bgp_neighbor_ip6) - A valid IPv6 address to use for peering with the device. ** An IPv4 and/or IPv6 peering address is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpNeighborAsn": { + "type": "string", + "description": "Your ASN (device_bgp_neighbor_asn) - The valid AS number (ASN) of the autonomous system that this device belongs to. ** device_bgp_neighbor_asn is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpPassword": { + "type": "string", + "description": "BGP md5 password (device_bgp_password) - Optional BGP MD5 password (shared authentication password for BGP peering). Valid characters: printable ASCII excluding space and question mark. Length: 32. device_bgp_password is optional when device_bgp_type is set to \"device\"" + }, + "useBgpDeviceId": { + "type": "string", + "description": "Select master BGP device (use_bgp_device_id) - The ID of the device whose BGP table should be shared with this device. ** use_bgp_device_id is required when device_bgp_type is set to \"other_device\"). Valid value: a system-generated device_id" + }, + "deviceBgpFlowspec": { + "type": "boolean", + "description": "BGP Flowspec Compatibility (device_bgp_flowspec) - Toggle BGP Flowspec Compatibility for device." + }, + "nms": { + "type": "object", + "properties": { + "agentId": { + "type": "string", + "description": "ID of the agent that is monitoring this device." + }, + "ipAddress": { + "type": "string", + "description": "Local IP address of this device." + }, + "snmp": { + "type": "object", + "properties": { + "credentialName": { + "type": "string", + "description": "Name of the SNMP credentials from the credential vault." + }, + "port": { + "type": "integer", + "format": "int64", + "description": "SNMP port, to override default of 161." + }, + "timeout": { + "type": "string", + "description": "Timeout, to override default of 2s." + } + }, + "title": "DeviceNmsSnmpConfig" + }, + "st": { + "type": "object", + "properties": { + "credentialName": { + "type": "string", + "description": "Name of the ST credentials from the credential vault." + }, + "port": { + "type": "integer", + "format": "int64", + "description": "ST port, to override default of 6030." + }, + "timeout": { + "type": "string", + "description": "Timeout, to override default of 2s." + }, + "secure": { + "type": "boolean", + "description": "Use SSL to connect to this device." + } + }, + "title": "DeviceNmsStConfig" + } + }, + "title": "DeviceNmsConfig" + }, + "deviceBgpCredentialName": { + "type": "string", + "description": "BGP Credential Name (device_bgp_credential_name) - Unsupported Field. Use device_bgp_password instead." + }, + "flowSnmpCredentialName": { + "type": "string", + "description": "Snmp Credential Name (flow_snmp_credential_name) - Optional Credential Name (Credential for Flow Snmp peering). Valid characters: alphanumeric. Length: 32." + }, + "monitoringTemplateId": { + "type": "integer", + "format": "int64", + "description": "Monitoring template - The ID of the monitoring template assigned to this device." + }, + "deviceAlert": { + "type": "string", + "description": "Device alert - The device alert endpoint URL." + } + }, + "title": "DeviceConcise" + }, + "description": "List of configurations of devices to be created" + } + }, + "title": "CreateDevicesRequest", + "required": [ + "devices" + ] + } + }, + "required": [ + "spec" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "devices": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "System generated unique identifier", + "title": "id" + }, + "deviceName": { + "type": "string", + "description": "Device name (device_name) - The name of the device. Valid characters: alphanumeric and underscores. Length: min=4, max=60." + }, + "deviceSubtype": { + "type": "string", + "description": "Device subtype (device_subtype) - The device subtype." + }, + "cdnAttr": { + "type": "string", + "description": "CDN attributes (cdn_attr) - If this is a DNS server, you can contribute its queries to Kentik's CDN attribution database. Valid values: \"Y\" or \"N\". ** cdn_attr is required when the device subtype's parent type is \"host-nprobe-dns-www\"" + }, + "deviceDescription": { + "type": "string", + "description": "Description (device_description) - The device description. Valid characters: any. Length: max=128." + }, + "sendingIps": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Device ip (sending_ips) - Array containing one or more IP address(es), from which the device is sending flow. ** sending_ips is required when the device subtype's parent type is \"router\"" + }, + "deviceSampleRate": { + "type": "number", + "format": "double", + "description": "Sample rate (device_sample_rate) - The rate at which the device is sampling flows. Valid values: integer bigger than 1. Recommended rate varies depending on flow volume; see https://kb.kentik.com/Ab02.htm#Ab02-Flow_Sampling. ** device_sample_rate is required when the device subtype's parent type is \"router\"" + }, + "planId": { + "type": "integer", + "format": "int64", + "description": "Plan (plan_id) - The ID of the plan to which this device is assigned. Available plan(s) can be found via the Plans API. Valid value: integer." + }, + "siteId": { + "type": "integer", + "format": "int64", + "description": "Site (site_id) - The ID of the site (if any) to which this device is assigned. Site IDs are system generated when a site is created. Valid value: integer." + }, + "minimizeSnmp": { + "type": "boolean", + "description": "SNMP polling (minimize_snmp) - The interval at which SNMP will be polled. If \"false\" (Standard), interface counter will be polled every 10 minutes and interface description every 30 minutes. If \"true\" (Minimum) (Minimum), interface counter won't be polled and interface description will be polled every 6 hours. ** minimize_snmp is required when the device subtype's parent type is \"router\"" + }, + "deviceSnmpIp": { + "type": "string", + "description": "Device SNMP IP (device_snmp_ip) - The SNMP IP to use when polling the device. device_snmp_ip is ignored unless the device subtype's parent type is \"router\"" + }, + "deviceSnmpCommunity": { + "type": "string", + "description": "SNMP community (device_snmp_community) - The SNMP community to use when polling the device. device_snmp_community is ignored unless the device subtype's parent type is \"router\"" + }, + "deviceSnmpV3Conf": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "UserName (username) - the user name to use to authenticate via SNMP v3. ** UserName is required when device_snmp_v3_conf is not null" + }, + "authenticationProtocol": { + "type": "string", + "description": "Authentication Protocol (authentication_protocol) - the auth protocol to use via SNMP v3" + }, + "authenticationPassphrase": { + "type": "string", + "description": "Authentication Passphrase (authentication_passphrase) - the passphrase to use for SNMP v3 authentication protocol (required when AuthenticationProtocol not NoAuth)" + }, + "privacyProtocol": { + "type": "string", + "description": "Privacy Protocol (privacy_protocol) - the privacy protocol to use to authenticate via SNMP v3" + }, + "privacyPassphrase": { + "type": "string", + "description": "Privacy Passphrase (privacy_passphrase) - the passphrase to use for SNMP v3 privacy protocol (required when PrivacyProtocol not NoPriv)" + } + }, + "title": "DeviceSnmpV3Conf" + }, + "deviceBgpType": { + "type": "string", + "description": "BGP (device_bgp_type) - Device bgp type. Valid values: \"none\" (use generic IP/ASN mapping), \"device\" (peer with the device itself), \"other_device\" (share routing table of existing peered device)" + }, + "deviceBgpNeighborIp": { + "type": "string", + "description": "Your IPv4 peering address (device_bgp_neighbor_ip) - A valid IPv4 address to use for peering with the device. ** An IPv4 and/or IPv6 peering address is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpNeighborIp6": { + "type": "string", + "description": "Your IPv6 peering address (device_bgp_neighbor_ip6) - A valid IPv6 address to use for peering with the device. ** An IPv4 and/or IPv6 peering address is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpNeighborAsn": { + "type": "string", + "description": "Your ASN (device_bgp_neighbor_asn) - The valid AS number (ASN) of the autonomous system that this device belongs to. ** device_bgp_neighbor_asn is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpPassword": { + "type": "string", + "description": "BGP md5 password (device_bgp_password) - Optional BGP MD5 password (shared authentication password for BGP peering). Valid characters: printable ASCII excluding space and question mark. Length: 32. device_bgp_password is optional when device_bgp_type is set to \"device\"" + }, + "useBgpDeviceId": { + "type": "string", + "description": "Select master BGP device (use_bgp_device_id) - The ID of the device whose BGP table should be shared with this device. ** use_bgp_device_id is required when device_bgp_type is set to \"other_device\"). Valid value: a system-generated device_id" + }, + "deviceBgpFlowspec": { + "type": "boolean", + "description": "BGP Flowspec Compatibility (device_bgp_flowspec) - Toggle BGP Flowspec Compatibility for device." + }, + "nms": { + "type": "object", + "properties": { + "agentId": { + "type": "string", + "description": "ID of the agent that is monitoring this device." + }, + "ipAddress": { + "type": "string", + "description": "Local IP address of this device." + }, + "snmp": { + "type": "object", + "properties": { + "credentialName": { + "type": "string", + "description": "Name of the SNMP credentials from the credential vault." + }, + "port": { + "type": "integer", + "format": "int64", + "description": "SNMP port, to override default of 161." + }, + "timeout": { + "type": "string", + "description": "Timeout, to override default of 2s." + } + }, + "title": "DeviceNmsSnmpConfig" + }, + "st": { + "type": "object", + "properties": { + "credentialName": { + "type": "string", + "description": "Name of the ST credentials from the credential vault." + }, + "port": { + "type": "integer", + "format": "int64", + "description": "ST port, to override default of 6030." + }, + "timeout": { + "type": "string", + "description": "Timeout, to override default of 2s." + }, + "secure": { + "type": "boolean", + "description": "Use SSL to connect to this device." + } + }, + "title": "DeviceNmsStConfig" + } + }, + "title": "DeviceNmsConfig" + }, + "deviceBgpCredentialName": { + "type": "string", + "description": "BGP Credential Name (device_bgp_credential_name) - Unsupported Field. Use device_bgp_password instead." + }, + "flowSnmpCredentialName": { + "type": "string", + "description": "Snmp Credential Name (flow_snmp_credential_name) - Optional Credential Name (Credential for Flow Snmp peering). Valid characters: alphanumeric. Length: 32." + }, + "monitoringTemplateId": { + "type": "integer", + "format": "int64", + "description": "Monitoring template - The ID of the monitoring template assigned to this device." + }, + "deviceAlert": { + "type": "string", + "description": "Device alert - The device alert endpoint URL." + } + }, + "title": "DeviceConcise" + }, + "description": "List of configurations of devices to be created" + } + }, + "title": "CreateDevicesRequest", + "required": [ + "devices" + ] + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-13T02:30:43.377Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "e785a54e-2c99-45a1-81c8-7fba6d3ed11a", + "created": "2026-08-13T02:25:39.060Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 34, + "reference": "fe92cab2-b079-49fd-b200-13aba4186d35", + "type": "workflow", + "folder": "/Devices", + "document": { + "name": "Delete Devices", + "description": "Delete Devices", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "DeleteDevices", + "canvasName": "DeleteDevices", + "summary": "DeleteDevices", + "description": "DeleteDevices", + "location": "Adapter", + "locationType": "Kentik Device & Site API:latest", + "app": "Kentik Device & Site API:latest", + "type": "automatic", + "displayName": "Kentik", + "variables": { + "incoming": { + "adapter_id": "Kentik", + "bodyContentType": "application/json", + "requestBodyPayload": "$var.job.spec" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "ids": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of IDs of devices to be deleted" + } + }, + "title": "DeleteDevicesRequest", + "required": [ + "ids" + ] + } + }, + "required": [ + "spec" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "ids": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of IDs of devices to be deleted" + } + }, + "title": "DeleteDevicesRequest", + "required": [ + "ids" + ] + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-13T02:30:43.377Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "95adf684-e993-4574-b00e-b6155e541499", + "created": "2026-08-13T02:25:39.137Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 35, + "reference": "8e393cff-7f0c-439a-82fe-078d07cbcf77", + "type": "workflow", + "folder": "/Devices", + "document": { + "name": "Update Devices", + "description": "Update Devices", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "UpdateDevices", + "canvasName": "UpdateDevices", + "summary": "UpdateDevices", + "description": "UpdateDevices", + "location": "Adapter", + "locationType": "Kentik Device & Site API:latest", + "app": "Kentik Device & Site API:latest", + "type": "automatic", + "displayName": "Kentik", + "variables": { + "incoming": { + "adapter_id": "Kentik", + "bodyContentType": "application/json", + "requestBodyPayload": "$var.job.spec" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "devices": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "System generated unique identifier", + "title": "id" + }, + "deviceName": { + "type": "string", + "description": "Device name (device_name) - The name of the device. Valid characters: alphanumeric and underscores. Length: min=4, max=60." + }, + "deviceSubtype": { + "type": "string", + "description": "Device subtype (device_subtype) - The device subtype." + }, + "cdnAttr": { + "type": "string", + "description": "CDN attributes (cdn_attr) - If this is a DNS server, you can contribute its queries to Kentik's CDN attribution database. Valid values: \"Y\" or \"N\". ** cdn_attr is required when the device subtype's parent type is \"host-nprobe-dns-www\"" + }, + "deviceDescription": { + "type": "string", + "description": "Description (device_description) - The device description. Valid characters: any. Length: max=128." + }, + "sendingIps": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Device ip (sending_ips) - Array containing one or more IP address(es), from which the device is sending flow. ** sending_ips is required when the device subtype's parent type is \"router\"" + }, + "deviceSampleRate": { + "type": "number", + "format": "double", + "description": "Sample rate (device_sample_rate) - The rate at which the device is sampling flows. Valid values: integer bigger than 1. Recommended rate varies depending on flow volume; see https://kb.kentik.com/Ab02.htm#Ab02-Flow_Sampling. ** device_sample_rate is required when the device subtype's parent type is \"router\"" + }, + "planId": { + "type": "integer", + "format": "int64", + "description": "Plan (plan_id) - The ID of the plan to which this device is assigned. Available plan(s) can be found via the Plans API. Valid value: integer." + }, + "siteId": { + "type": "integer", + "format": "int64", + "description": "Site (site_id) - The ID of the site (if any) to which this device is assigned. Site IDs are system generated when a site is created. Valid value: integer." + }, + "minimizeSnmp": { + "type": "boolean", + "description": "SNMP polling (minimize_snmp) - The interval at which SNMP will be polled. If \"false\" (Standard), interface counter will be polled every 10 minutes and interface description every 30 minutes. If \"true\" (Minimum) (Minimum), interface counter won't be polled and interface description will be polled every 6 hours. ** minimize_snmp is required when the device subtype's parent type is \"router\"" + }, + "deviceSnmpIp": { + "type": "string", + "description": "Device SNMP IP (device_snmp_ip) - The SNMP IP to use when polling the device. device_snmp_ip is ignored unless the device subtype's parent type is \"router\"" + }, + "deviceSnmpCommunity": { + "type": "string", + "description": "SNMP community (device_snmp_community) - The SNMP community to use when polling the device. device_snmp_community is ignored unless the device subtype's parent type is \"router\"" + }, + "deviceSnmpV3Conf": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "UserName (username) - the user name to use to authenticate via SNMP v3. ** UserName is required when device_snmp_v3_conf is not null" + }, + "authenticationProtocol": { + "type": "string", + "description": "Authentication Protocol (authentication_protocol) - the auth protocol to use via SNMP v3" + }, + "authenticationPassphrase": { + "type": "string", + "description": "Authentication Passphrase (authentication_passphrase) - the passphrase to use for SNMP v3 authentication protocol (required when AuthenticationProtocol not NoAuth)" + }, + "privacyProtocol": { + "type": "string", + "description": "Privacy Protocol (privacy_protocol) - the privacy protocol to use to authenticate via SNMP v3" + }, + "privacyPassphrase": { + "type": "string", + "description": "Privacy Passphrase (privacy_passphrase) - the passphrase to use for SNMP v3 privacy protocol (required when PrivacyProtocol not NoPriv)" + } + }, + "title": "DeviceSnmpV3Conf" + }, + "deviceBgpType": { + "type": "string", + "description": "BGP (device_bgp_type) - Device bgp type. Valid values: \"none\" (use generic IP/ASN mapping), \"device\" (peer with the device itself), \"other_device\" (share routing table of existing peered device)" + }, + "deviceBgpNeighborIp": { + "type": "string", + "description": "Your IPv4 peering address (device_bgp_neighbor_ip) - A valid IPv4 address to use for peering with the device. ** An IPv4 and/or IPv6 peering address is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpNeighborIp6": { + "type": "string", + "description": "Your IPv6 peering address (device_bgp_neighbor_ip6) - A valid IPv6 address to use for peering with the device. ** An IPv4 and/or IPv6 peering address is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpNeighborAsn": { + "type": "string", + "description": "Your ASN (device_bgp_neighbor_asn) - The valid AS number (ASN) of the autonomous system that this device belongs to. ** device_bgp_neighbor_asn is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpPassword": { + "type": "string", + "description": "BGP md5 password (device_bgp_password) - Optional BGP MD5 password (shared authentication password for BGP peering). Valid characters: printable ASCII excluding space and question mark. Length: 32. device_bgp_password is optional when device_bgp_type is set to \"device\"" + }, + "useBgpDeviceId": { + "type": "string", + "description": "Select master BGP device (use_bgp_device_id) - The ID of the device whose BGP table should be shared with this device. ** use_bgp_device_id is required when device_bgp_type is set to \"other_device\"). Valid value: a system-generated device_id" + }, + "deviceBgpFlowspec": { + "type": "boolean", + "description": "BGP Flowspec Compatibility (device_bgp_flowspec) - Toggle BGP Flowspec Compatibility for device." + }, + "nms": { + "type": "object", + "properties": { + "agentId": { + "type": "string", + "description": "ID of the agent that is monitoring this device." + }, + "ipAddress": { + "type": "string", + "description": "Local IP address of this device." + }, + "snmp": { + "type": "object", + "properties": { + "credentialName": { + "type": "string", + "description": "Name of the SNMP credentials from the credential vault." + }, + "port": { + "type": "integer", + "format": "int64", + "description": "SNMP port, to override default of 161." + }, + "timeout": { + "type": "string", + "description": "Timeout, to override default of 2s." + } + }, + "title": "DeviceNmsSnmpConfig" + }, + "st": { + "type": "object", + "properties": { + "credentialName": { + "type": "string", + "description": "Name of the ST credentials from the credential vault." + }, + "port": { + "type": "integer", + "format": "int64", + "description": "ST port, to override default of 6030." + }, + "timeout": { + "type": "string", + "description": "Timeout, to override default of 2s." + }, + "secure": { + "type": "boolean", + "description": "Use SSL to connect to this device." + } + }, + "title": "DeviceNmsStConfig" + } + }, + "title": "DeviceNmsConfig" + }, + "deviceBgpCredentialName": { + "type": "string", + "description": "BGP Credential Name (device_bgp_credential_name) - Unsupported Field. Use device_bgp_password instead." + }, + "flowSnmpCredentialName": { + "type": "string", + "description": "Snmp Credential Name (flow_snmp_credential_name) - Optional Credential Name (Credential for Flow Snmp peering). Valid characters: alphanumeric. Length: 32." + }, + "monitoringTemplateId": { + "type": "integer", + "format": "int64", + "description": "Monitoring template - The ID of the monitoring template assigned to this device." + }, + "deviceAlert": { + "type": "string", + "description": "Device alert - The device alert endpoint URL." + } + }, + "title": "DeviceConcise" + }, + "description": "List of configurations of devices to be updated" + } + }, + "title": "UpdateDevicesRequest", + "required": [ + "devices" + ] + } + }, + "required": [ + "spec" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "devices": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "System generated unique identifier", + "title": "id" + }, + "deviceName": { + "type": "string", + "description": "Device name (device_name) - The name of the device. Valid characters: alphanumeric and underscores. Length: min=4, max=60." + }, + "deviceSubtype": { + "type": "string", + "description": "Device subtype (device_subtype) - The device subtype." + }, + "cdnAttr": { + "type": "string", + "description": "CDN attributes (cdn_attr) - If this is a DNS server, you can contribute its queries to Kentik's CDN attribution database. Valid values: \"Y\" or \"N\". ** cdn_attr is required when the device subtype's parent type is \"host-nprobe-dns-www\"" + }, + "deviceDescription": { + "type": "string", + "description": "Description (device_description) - The device description. Valid characters: any. Length: max=128." + }, + "sendingIps": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Device ip (sending_ips) - Array containing one or more IP address(es), from which the device is sending flow. ** sending_ips is required when the device subtype's parent type is \"router\"" + }, + "deviceSampleRate": { + "type": "number", + "format": "double", + "description": "Sample rate (device_sample_rate) - The rate at which the device is sampling flows. Valid values: integer bigger than 1. Recommended rate varies depending on flow volume; see https://kb.kentik.com/Ab02.htm#Ab02-Flow_Sampling. ** device_sample_rate is required when the device subtype's parent type is \"router\"" + }, + "planId": { + "type": "integer", + "format": "int64", + "description": "Plan (plan_id) - The ID of the plan to which this device is assigned. Available plan(s) can be found via the Plans API. Valid value: integer." + }, + "siteId": { + "type": "integer", + "format": "int64", + "description": "Site (site_id) - The ID of the site (if any) to which this device is assigned. Site IDs are system generated when a site is created. Valid value: integer." + }, + "minimizeSnmp": { + "type": "boolean", + "description": "SNMP polling (minimize_snmp) - The interval at which SNMP will be polled. If \"false\" (Standard), interface counter will be polled every 10 minutes and interface description every 30 minutes. If \"true\" (Minimum) (Minimum), interface counter won't be polled and interface description will be polled every 6 hours. ** minimize_snmp is required when the device subtype's parent type is \"router\"" + }, + "deviceSnmpIp": { + "type": "string", + "description": "Device SNMP IP (device_snmp_ip) - The SNMP IP to use when polling the device. device_snmp_ip is ignored unless the device subtype's parent type is \"router\"" + }, + "deviceSnmpCommunity": { + "type": "string", + "description": "SNMP community (device_snmp_community) - The SNMP community to use when polling the device. device_snmp_community is ignored unless the device subtype's parent type is \"router\"" + }, + "deviceSnmpV3Conf": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "UserName (username) - the user name to use to authenticate via SNMP v3. ** UserName is required when device_snmp_v3_conf is not null" + }, + "authenticationProtocol": { + "type": "string", + "description": "Authentication Protocol (authentication_protocol) - the auth protocol to use via SNMP v3" + }, + "authenticationPassphrase": { + "type": "string", + "description": "Authentication Passphrase (authentication_passphrase) - the passphrase to use for SNMP v3 authentication protocol (required when AuthenticationProtocol not NoAuth)" + }, + "privacyProtocol": { + "type": "string", + "description": "Privacy Protocol (privacy_protocol) - the privacy protocol to use to authenticate via SNMP v3" + }, + "privacyPassphrase": { + "type": "string", + "description": "Privacy Passphrase (privacy_passphrase) - the passphrase to use for SNMP v3 privacy protocol (required when PrivacyProtocol not NoPriv)" + } + }, + "title": "DeviceSnmpV3Conf" + }, + "deviceBgpType": { + "type": "string", + "description": "BGP (device_bgp_type) - Device bgp type. Valid values: \"none\" (use generic IP/ASN mapping), \"device\" (peer with the device itself), \"other_device\" (share routing table of existing peered device)" + }, + "deviceBgpNeighborIp": { + "type": "string", + "description": "Your IPv4 peering address (device_bgp_neighbor_ip) - A valid IPv4 address to use for peering with the device. ** An IPv4 and/or IPv6 peering address is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpNeighborIp6": { + "type": "string", + "description": "Your IPv6 peering address (device_bgp_neighbor_ip6) - A valid IPv6 address to use for peering with the device. ** An IPv4 and/or IPv6 peering address is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpNeighborAsn": { + "type": "string", + "description": "Your ASN (device_bgp_neighbor_asn) - The valid AS number (ASN) of the autonomous system that this device belongs to. ** device_bgp_neighbor_asn is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpPassword": { + "type": "string", + "description": "BGP md5 password (device_bgp_password) - Optional BGP MD5 password (shared authentication password for BGP peering). Valid characters: printable ASCII excluding space and question mark. Length: 32. device_bgp_password is optional when device_bgp_type is set to \"device\"" + }, + "useBgpDeviceId": { + "type": "string", + "description": "Select master BGP device (use_bgp_device_id) - The ID of the device whose BGP table should be shared with this device. ** use_bgp_device_id is required when device_bgp_type is set to \"other_device\"). Valid value: a system-generated device_id" + }, + "deviceBgpFlowspec": { + "type": "boolean", + "description": "BGP Flowspec Compatibility (device_bgp_flowspec) - Toggle BGP Flowspec Compatibility for device." + }, + "nms": { + "type": "object", + "properties": { + "agentId": { + "type": "string", + "description": "ID of the agent that is monitoring this device." + }, + "ipAddress": { + "type": "string", + "description": "Local IP address of this device." + }, + "snmp": { + "type": "object", + "properties": { + "credentialName": { + "type": "string", + "description": "Name of the SNMP credentials from the credential vault." + }, + "port": { + "type": "integer", + "format": "int64", + "description": "SNMP port, to override default of 161." + }, + "timeout": { + "type": "string", + "description": "Timeout, to override default of 2s." + } + }, + "title": "DeviceNmsSnmpConfig" + }, + "st": { + "type": "object", + "properties": { + "credentialName": { + "type": "string", + "description": "Name of the ST credentials from the credential vault." + }, + "port": { + "type": "integer", + "format": "int64", + "description": "ST port, to override default of 6030." + }, + "timeout": { + "type": "string", + "description": "Timeout, to override default of 2s." + }, + "secure": { + "type": "boolean", + "description": "Use SSL to connect to this device." + } + }, + "title": "DeviceNmsStConfig" + } + }, + "title": "DeviceNmsConfig" + }, + "deviceBgpCredentialName": { + "type": "string", + "description": "BGP Credential Name (device_bgp_credential_name) - Unsupported Field. Use device_bgp_password instead." + }, + "flowSnmpCredentialName": { + "type": "string", + "description": "Snmp Credential Name (flow_snmp_credential_name) - Optional Credential Name (Credential for Flow Snmp peering). Valid characters: alphanumeric. Length: 32." + }, + "monitoringTemplateId": { + "type": "integer", + "format": "int64", + "description": "Monitoring template - The ID of the monitoring template assigned to this device." + }, + "deviceAlert": { + "type": "string", + "description": "Device alert - The device alert endpoint URL." + } + }, + "title": "DeviceConcise" + }, + "description": "List of configurations of devices to be updated" + } + }, + "title": "UpdateDevicesRequest", + "required": [ + "devices" + ] + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-13T02:30:43.377Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "0fcc1cb2-ed66-42cc-8ba7-200f20ea8434", + "created": "2026-08-13T02:25:39.219Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 36, + "reference": "cd483f7b-041b-4ae9-bf44-39921a928385", + "type": "workflow", + "folder": "/Devices", + "document": { + "name": "Get Device By Name", + "description": "Get Device By Name", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "GetDeviceByName", + "canvasName": "GetDeviceByName", + "summary": "GetDeviceByName", + "description": "GetDeviceByName", + "location": "Adapter", + "locationType": "Kentik Device & Site API:latest", + "app": "Kentik Device & Site API:latest", + "type": "automatic", + "displayName": "Kentik", + "variables": { + "incoming": { + "adapter_id": "Kentik", + "deviceName": "$var.job.deviceName", + "query.noCustomColumns": "$var.job.noCustomColumns" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "deviceName": { + "type": "string" + }, + "noCustomColumns": { + "type": "boolean" + } + }, + "required": [ + "deviceName", + "noCustomColumns" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "deviceName": { + "type": "string" + }, + "noCustomColumns": { + "type": "boolean" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-13T02:30:43.377Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "41b5864c-5ccd-4c79-a587-186fd8375d01", + "created": "2026-08-13T02:25:39.275Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 37, + "reference": "c2fd3fbf-0de2-4372-9487-9feb4c5d7c9d", + "type": "workflow", + "folder": "/Devices", + "document": { + "name": "Update Kentik Device", + "description": "Update Kentik Device", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "UpdateDevice", + "canvasName": "UpdateDevice", + "summary": "UpdateDevice", + "description": "UpdateDevice", + "location": "Adapter", + "locationType": "Kentik Device & Site API:latest", + "app": "Kentik Device & Site API:latest", + "type": "automatic", + "displayName": "Kentik", + "variables": { + "incoming": { + "adapter_id": "Kentik", + "device.id": "$var.job.id", + "bodyContentType": "application/json", + "requestBodyPayload": "$var.job.spec" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "spec": { + "type": "object", + "properties": { + "device": { + "type": "object", + "properties": { + "deviceName": { + "type": "string", + "description": "Device name (device_name) - The name of the device. Valid characters: alphanumeric and underscores. Length: min=4, max=60." + }, + "deviceSubtype": { + "type": "string", + "description": "Device subtype (device_subtype) - The device subtype." + }, + "cdnAttr": { + "type": "string", + "description": "CDN attributes (cdn_attr) - If this is a DNS server, you can contribute its queries to Kentik's CDN attribution database. Valid values: \"Y\" or \"N\". ** cdn_attr is required when the device subtype's parent type is \"host-nprobe-dns-www\"" + }, + "deviceDescription": { + "type": "string", + "description": "Description (device_description) - The device description. Valid characters: any. Length: max=128." + }, + "sendingIps": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Device ip (sending_ips) - Array containing one or more IP address(es), from which the device is sending flow. ** sending_ips is required when the device subtype's parent type is \"router\"" + }, + "deviceSampleRate": { + "type": "number", + "format": "double", + "description": "Sample rate (device_sample_rate) - The rate at which the device is sampling flows. Valid values: integer bigger than 1. Recommended rate varies depending on flow volume; see https://kb.kentik.com/Ab02.htm#Ab02-Flow_Sampling. ** device_sample_rate is required when the device subtype's parent type is \"router\"" + }, + "planId": { + "type": "integer", + "format": "int64", + "description": "Plan (plan_id) - The ID of the plan to which this device is assigned. Available plan(s) can be found via the Plans API. Valid value: integer." + }, + "siteId": { + "type": "integer", + "format": "int64", + "description": "Site (site_id) - The ID of the site (if any) to which this device is assigned. Site IDs are system generated when a site is created. Valid value: integer." + }, + "minimizeSnmp": { + "type": "boolean", + "description": "SNMP polling (minimize_snmp) - The interval at which SNMP will be polled. If \"false\" (Standard), interface counter will be polled every 10 minutes and interface description every 30 minutes. If \"true\" (Minimum) (Minimum), interface counter won't be polled and interface description will be polled every 6 hours. ** minimize_snmp is required when the device subtype's parent type is \"router\"" + }, + "deviceSnmpIp": { + "type": "string", + "description": "Device SNMP IP (device_snmp_ip) - The SNMP IP to use when polling the device. device_snmp_ip is ignored unless the device subtype's parent type is \"router\"" + }, + "deviceSnmpCommunity": { + "type": "string", + "description": "SNMP community (device_snmp_community) - The SNMP community to use when polling the device. device_snmp_community is ignored unless the device subtype's parent type is \"router\"" + }, + "deviceSnmpV3Conf": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "UserName (username) - the user name to use to authenticate via SNMP v3. ** UserName is required when device_snmp_v3_conf is not null" + }, + "authenticationProtocol": { + "type": "string", + "description": "Authentication Protocol (authentication_protocol) - the auth protocol to use via SNMP v3" + }, + "authenticationPassphrase": { + "type": "string", + "description": "Authentication Passphrase (authentication_passphrase) - the passphrase to use for SNMP v3 authentication protocol (required when AuthenticationProtocol not NoAuth)" + }, + "privacyProtocol": { + "type": "string", + "description": "Privacy Protocol (privacy_protocol) - the privacy protocol to use to authenticate via SNMP v3" + }, + "privacyPassphrase": { + "type": "string", + "description": "Privacy Passphrase (privacy_passphrase) - the passphrase to use for SNMP v3 privacy protocol (required when PrivacyProtocol not NoPriv)" + } + }, + "title": "DeviceSnmpV3Conf" + }, + "deviceBgpType": { + "type": "string", + "description": "BGP (device_bgp_type) - Device bgp type. Valid values: \"none\" (use generic IP/ASN mapping), \"device\" (peer with the device itself), \"other_device\" (share routing table of existing peered device)" + }, + "deviceBgpNeighborIp": { + "type": "string", + "description": "Your IPv4 peering address (device_bgp_neighbor_ip) - A valid IPv4 address to use for peering with the device. ** An IPv4 and/or IPv6 peering address is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpNeighborIp6": { + "type": "string", + "description": "Your IPv6 peering address (device_bgp_neighbor_ip6) - A valid IPv6 address to use for peering with the device. ** An IPv4 and/or IPv6 peering address is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpNeighborAsn": { + "type": "string", + "description": "Your ASN (device_bgp_neighbor_asn) - The valid AS number (ASN) of the autonomous system that this device belongs to. ** device_bgp_neighbor_asn is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpPassword": { + "type": "string", + "description": "BGP md5 password (device_bgp_password) - Optional BGP MD5 password (shared authentication password for BGP peering). Valid characters: printable ASCII excluding space and question mark. Length: 32. device_bgp_password is optional when device_bgp_type is set to \"device\"" + }, + "useBgpDeviceId": { + "type": "string", + "description": "Select master BGP device (use_bgp_device_id) - The ID of the device whose BGP table should be shared with this device. ** use_bgp_device_id is required when device_bgp_type is set to \"other_device\"). Valid value: a system-generated device_id" + }, + "deviceBgpFlowspec": { + "type": "boolean", + "description": "BGP Flowspec Compatibility (device_bgp_flowspec) - Toggle BGP Flowspec Compatibility for device." + }, + "nms": { + "type": "object", + "properties": { + "agentId": { + "type": "string", + "description": "ID of the agent that is monitoring this device." + }, + "ipAddress": { + "type": "string", + "description": "Local IP address of this device." + }, + "snmp": { + "type": "object", + "properties": { + "credentialName": { + "type": "string", + "description": "Name of the SNMP credentials from the credential vault." + }, + "port": { + "type": "integer", + "format": "int64", + "description": "SNMP port, to override default of 161." + }, + "timeout": { + "type": "string", + "description": "Timeout, to override default of 2s." + } + }, + "title": "DeviceNmsSnmpConfig" + }, + "st": { + "type": "object", + "properties": { + "credentialName": { + "type": "string", + "description": "Name of the ST credentials from the credential vault." + }, + "port": { + "type": "integer", + "format": "int64", + "description": "ST port, to override default of 6030." + }, + "timeout": { + "type": "string", + "description": "Timeout, to override default of 2s." + }, + "secure": { + "type": "boolean", + "description": "Use SSL to connect to this device." + } + }, + "title": "DeviceNmsStConfig" + } + }, + "title": "DeviceNmsConfig" + }, + "deviceBgpCredentialName": { + "type": "string", + "description": "BGP Credential Name (device_bgp_credential_name) - Unsupported Field. Use device_bgp_password instead." + }, + "flowSnmpCredentialName": { + "type": "string", + "description": "Snmp Credential Name (flow_snmp_credential_name) - Optional Credential Name (Credential for Flow Snmp peering). Valid characters: alphanumeric. Length: 32." + }, + "monitoringTemplateId": { + "type": "integer", + "format": "int64", + "description": "Monitoring template - The ID of the monitoring template assigned to this device." + }, + "deviceAlert": { + "type": "string", + "description": "Device alert - The device alert endpoint URL." + } + }, + "title": "DeviceConcise" + } + }, + "title": "UpdateDeviceRequest", + "required": [ + "device" + ] + } + }, + "required": [ + "id", + "spec" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "spec": { + "type": "object", + "properties": { + "device": { + "type": "object", + "properties": { + "deviceName": { + "type": "string", + "description": "Device name (device_name) - The name of the device. Valid characters: alphanumeric and underscores. Length: min=4, max=60." + }, + "deviceSubtype": { + "type": "string", + "description": "Device subtype (device_subtype) - The device subtype." + }, + "cdnAttr": { + "type": "string", + "description": "CDN attributes (cdn_attr) - If this is a DNS server, you can contribute its queries to Kentik's CDN attribution database. Valid values: \"Y\" or \"N\". ** cdn_attr is required when the device subtype's parent type is \"host-nprobe-dns-www\"" + }, + "deviceDescription": { + "type": "string", + "description": "Description (device_description) - The device description. Valid characters: any. Length: max=128." + }, + "sendingIps": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Device ip (sending_ips) - Array containing one or more IP address(es), from which the device is sending flow. ** sending_ips is required when the device subtype's parent type is \"router\"" + }, + "deviceSampleRate": { + "type": "number", + "format": "double", + "description": "Sample rate (device_sample_rate) - The rate at which the device is sampling flows. Valid values: integer bigger than 1. Recommended rate varies depending on flow volume; see https://kb.kentik.com/Ab02.htm#Ab02-Flow_Sampling. ** device_sample_rate is required when the device subtype's parent type is \"router\"" + }, + "planId": { + "type": "integer", + "format": "int64", + "description": "Plan (plan_id) - The ID of the plan to which this device is assigned. Available plan(s) can be found via the Plans API. Valid value: integer." + }, + "siteId": { + "type": "integer", + "format": "int64", + "description": "Site (site_id) - The ID of the site (if any) to which this device is assigned. Site IDs are system generated when a site is created. Valid value: integer." + }, + "minimizeSnmp": { + "type": "boolean", + "description": "SNMP polling (minimize_snmp) - The interval at which SNMP will be polled. If \"false\" (Standard), interface counter will be polled every 10 minutes and interface description every 30 minutes. If \"true\" (Minimum) (Minimum), interface counter won't be polled and interface description will be polled every 6 hours. ** minimize_snmp is required when the device subtype's parent type is \"router\"" + }, + "deviceSnmpIp": { + "type": "string", + "description": "Device SNMP IP (device_snmp_ip) - The SNMP IP to use when polling the device. device_snmp_ip is ignored unless the device subtype's parent type is \"router\"" + }, + "deviceSnmpCommunity": { + "type": "string", + "description": "SNMP community (device_snmp_community) - The SNMP community to use when polling the device. device_snmp_community is ignored unless the device subtype's parent type is \"router\"" + }, + "deviceSnmpV3Conf": { + "type": "object", + "properties": { + "username": { + "type": "string", + "description": "UserName (username) - the user name to use to authenticate via SNMP v3. ** UserName is required when device_snmp_v3_conf is not null" + }, + "authenticationProtocol": { + "type": "string", + "description": "Authentication Protocol (authentication_protocol) - the auth protocol to use via SNMP v3" + }, + "authenticationPassphrase": { + "type": "string", + "description": "Authentication Passphrase (authentication_passphrase) - the passphrase to use for SNMP v3 authentication protocol (required when AuthenticationProtocol not NoAuth)" + }, + "privacyProtocol": { + "type": "string", + "description": "Privacy Protocol (privacy_protocol) - the privacy protocol to use to authenticate via SNMP v3" + }, + "privacyPassphrase": { + "type": "string", + "description": "Privacy Passphrase (privacy_passphrase) - the passphrase to use for SNMP v3 privacy protocol (required when PrivacyProtocol not NoPriv)" + } + }, + "title": "DeviceSnmpV3Conf" + }, + "deviceBgpType": { + "type": "string", + "description": "BGP (device_bgp_type) - Device bgp type. Valid values: \"none\" (use generic IP/ASN mapping), \"device\" (peer with the device itself), \"other_device\" (share routing table of existing peered device)" + }, + "deviceBgpNeighborIp": { + "type": "string", + "description": "Your IPv4 peering address (device_bgp_neighbor_ip) - A valid IPv4 address to use for peering with the device. ** An IPv4 and/or IPv6 peering address is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpNeighborIp6": { + "type": "string", + "description": "Your IPv6 peering address (device_bgp_neighbor_ip6) - A valid IPv6 address to use for peering with the device. ** An IPv4 and/or IPv6 peering address is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpNeighborAsn": { + "type": "string", + "description": "Your ASN (device_bgp_neighbor_asn) - The valid AS number (ASN) of the autonomous system that this device belongs to. ** device_bgp_neighbor_asn is required when device_bgp_type is set to \"device\"" + }, + "deviceBgpPassword": { + "type": "string", + "description": "BGP md5 password (device_bgp_password) - Optional BGP MD5 password (shared authentication password for BGP peering). Valid characters: printable ASCII excluding space and question mark. Length: 32. device_bgp_password is optional when device_bgp_type is set to \"device\"" + }, + "useBgpDeviceId": { + "type": "string", + "description": "Select master BGP device (use_bgp_device_id) - The ID of the device whose BGP table should be shared with this device. ** use_bgp_device_id is required when device_bgp_type is set to \"other_device\"). Valid value: a system-generated device_id" + }, + "deviceBgpFlowspec": { + "type": "boolean", + "description": "BGP Flowspec Compatibility (device_bgp_flowspec) - Toggle BGP Flowspec Compatibility for device." + }, + "nms": { + "type": "object", + "properties": { + "agentId": { + "type": "string", + "description": "ID of the agent that is monitoring this device." + }, + "ipAddress": { + "type": "string", + "description": "Local IP address of this device." + }, + "snmp": { + "type": "object", + "properties": { + "credentialName": { + "type": "string", + "description": "Name of the SNMP credentials from the credential vault." + }, + "port": { + "type": "integer", + "format": "int64", + "description": "SNMP port, to override default of 161." + }, + "timeout": { + "type": "string", + "description": "Timeout, to override default of 2s." + } + }, + "title": "DeviceNmsSnmpConfig" + }, + "st": { + "type": "object", + "properties": { + "credentialName": { + "type": "string", + "description": "Name of the ST credentials from the credential vault." + }, + "port": { + "type": "integer", + "format": "int64", + "description": "ST port, to override default of 6030." + }, + "timeout": { + "type": "string", + "description": "Timeout, to override default of 2s." + }, + "secure": { + "type": "boolean", + "description": "Use SSL to connect to this device." + } + }, + "title": "DeviceNmsStConfig" + } + }, + "title": "DeviceNmsConfig" + }, + "deviceBgpCredentialName": { + "type": "string", + "description": "BGP Credential Name (device_bgp_credential_name) - Unsupported Field. Use device_bgp_password instead." + }, + "flowSnmpCredentialName": { + "type": "string", + "description": "Snmp Credential Name (flow_snmp_credential_name) - Optional Credential Name (Credential for Flow Snmp peering). Valid characters: alphanumeric. Length: 32." + }, + "monitoringTemplateId": { + "type": "integer", + "format": "int64", + "description": "Monitoring template - The ID of the monitoring template assigned to this device." + }, + "deviceAlert": { + "type": "string", + "description": "Device alert - The device alert endpoint URL." + } + }, + "title": "DeviceConcise" + } + }, + "title": "UpdateDeviceRequest", + "required": [ + "device" + ] + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-13T02:30:43.377Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "de25f00e-d6cd-477a-8e69-9db0f10b62ff", + "created": "2026-08-13T02:25:39.320Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 38, + "reference": "c077de33-0d34-40ca-9756-ac9d6ca2df89", + "type": "workflow", + "folder": "/Devices", + "document": { + "name": "Get Kentik Device", + "description": "Get Kentik Device", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "GetDevice", + "canvasName": "GetDevice", + "summary": "GetDevice", + "description": "GetDevice", + "location": "Adapter", + "locationType": "Kentik Device & Site API:latest", + "app": "Kentik Device & Site API:latest", + "type": "automatic", + "displayName": "Kentik", + "variables": { + "incoming": { + "adapter_id": "Kentik", + "device.id": "$var.job.id", + "query.noCustomColumns": "$var.job.noCustomColumns" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "noCustomColumns": { + "type": "boolean" + } + }, + "required": [ + "id", + "noCustomColumns" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "noCustomColumns": { + "type": "boolean" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-13T02:30:43.377Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "49aa3484-d1a1-4dc3-8062-06d05440712e", + "created": "2026-08-13T02:25:39.351Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 39, + "reference": "a7a64466-f628-46ba-94e4-eacab41569df", + "type": "workflow", + "folder": "/Devices", + "document": { + "name": "Delete Device", + "description": "Delete Device", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "DeleteDevice", + "canvasName": "DeleteDevice", + "summary": "DeleteDevice", + "description": "DeleteDevice", + "location": "Adapter", + "locationType": "Kentik Device & Site API:latest", + "app": "Kentik Device & Site API:latest", + "type": "automatic", + "displayName": "Kentik", + "variables": { + "incoming": { + "adapter_id": "Kentik", + "device.id": "$var.job.id" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-13T02:30:43.377Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "7a8a1855-56a6-4ea0-bb4e-46a6ac8003d2", + "created": "2026-08-13T02:25:39.383Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 40, + "reference": "e0107d5c-e47c-40b6-8564-c351227eb504", + "type": "workflow", + "folder": "/Devices", + "document": { + "name": "Update Device Labels", + "description": "Update Device Labels", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "UpdateDeviceLabels", + "canvasName": "UpdateDeviceLabels", + "summary": "UpdateDeviceLabels", + "description": "UpdateDeviceLabels", + "location": "Adapter", + "locationType": "Kentik Device & Site API:latest", + "app": "Kentik Device & Site API:latest", + "type": "automatic", + "displayName": "Kentik", + "variables": { + "incoming": { + "adapter_id": "Kentik", + "id": "$var.job.id", + "bodyContentType": "application/json", + "requestBodyPayload": "$var.job.spec" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "spec": { + "type": "object", + "properties": { + "labels": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "description": "Label ID" + } + }, + "title": "LabelConcise" + }, + "description": "List of labels to be added to the device" + } + }, + "title": "UpdateDeviceLabelsRequest", + "required": [ + "labels" + ] + } + }, + "required": [ + "id", + "spec" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "spec": { + "type": "object", + "properties": { + "labels": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "description": "Label ID" + } + }, + "title": "LabelConcise" + }, + "description": "List of labels to be added to the device" + } + }, + "title": "UpdateDeviceLabelsRequest", + "required": [ + "labels" + ] + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-13T02:30:43.377Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "08a1b481-95a2-4ac3-90d3-9cf6bf7c740f", + "created": "2026-08-13T02:25:39.418Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 41, + "reference": "74dcac66-644c-4d7c-8474-ded606d25e54", + "type": "workflow", + "folder": "/Sites", + "document": { + "name": "List Sites", + "description": "List Sites", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "ListSites", + "canvasName": "ListSites", + "summary": "ListSites", + "description": "ListSites", + "location": "Adapter", + "locationType": "Kentik Device & Site API:latest", + "app": "Kentik Device & Site API:latest", + "type": "automatic", + "displayName": "Kentik", + "variables": { + "incoming": { + "adapter_id": "Kentik" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": {} + }, + "outputSchema": { + "type": "object", + "properties": { + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-13T02:30:43.377Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "61078bf3-e2dd-4c6e-8c90-2e8ea5251dc8", + "created": "2026-08-13T02:25:39.456Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 42, + "reference": "f908470a-32c9-472b-a396-d7123a2b170b", + "type": "workflow", + "folder": "/Sites", + "document": { + "name": "Create Site", + "description": "Create Site", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "CreateSite", + "canvasName": "CreateSite", + "summary": "CreateSite", + "description": "CreateSite", + "location": "Adapter", + "locationType": "Kentik Device & Site API:latest", + "app": "Kentik Device & Site API:latest", + "type": "automatic", + "displayName": "Kentik", + "variables": { + "incoming": { + "adapter_id": "Kentik", + "bodyContentType": "application/json", + "requestBodyPayload": "$var.job.spec" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "site": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "System generated unique identifier", + "readOnly": true + }, + "title": { + "type": "string", + "description": "User selected title/name" + }, + "lat": { + "type": "number", + "format": "double", + "description": "Latitude (signed decimal degrees)" + }, + "lon": { + "type": "number", + "format": "double", + "description": "Longitude (signed decimal degrees)" + }, + "postalAddress": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "Street address" + }, + "city": { + "type": "string", + "description": "City (full name)" + }, + "region": { + "type": "string", + "description": "Geographical region" + }, + "postalCode": { + "type": "string", + "description": "Country specific postal code" + }, + "country": { + "type": "string", + "description": "Country (full name or country code)" + } + }, + "title": "PostalAddress", + "required": [ + "address", + "city", + "country" + ] + }, + "type": { + "type": "string", + "enum": [ + "SITE_TYPE_UNSPECIFIED", + "SITE_TYPE_DATA_CENTER", + "SITE_TYPE_CLOUD", + "SITE_TYPE_BRANCH", + "SITE_TYPE_CONNECTIVITY", + "SITE_TYPE_CUSTOMER", + "SITE_TYPE_OTHER" + ], + "default": "SITE_TYPE_UNSPECIFIED", + "description": "- SITE_TYPE_UNSPECIFIED: Invalid value.\n - SITE_TYPE_DATA_CENTER: Data center site type.\n - SITE_TYPE_CLOUD: Cloud site type.\n - SITE_TYPE_BRANCH: Branch office site type.\n - SITE_TYPE_CONNECTIVITY: Connectivity/PoP site type.\n - SITE_TYPE_CUSTOMER: Customer/partner site type.\n - SITE_TYPE_OTHER: Other site type.", + "title": "SiteType" + }, + "addressClassification": { + "type": "object", + "properties": { + "infrastructureNetworks": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of IP address prefixes (in standard CIDR notation) used in infrastructure networks" + }, + "userAccessNetworks": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of IP address prefixes (in standard CIDR notation) used in access networks" + }, + "otherNetworks": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of IP address prefixes (in standard CIDR notation) used in other networks" + } + }, + "title": "SiteIpAddressClassification" + }, + "architecture": { + "type": "array", + "items": { + "type": "object", + "properties": { + "layers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the network layer" + }, + "deviceIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "IDs of devices that are deemed to be part of the network layer" + } + }, + "title": "Layer" + }, + "description": "List of parallel network layers" + } + }, + "title": "LayerSet" + }, + "description": "Logical network topology/architecture" + }, + "siteMarket": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "System generated unique identifier", + "readOnly": true + }, + "name": { + "type": "string", + "description": "User selected unique name" + }, + "description": { + "type": "string", + "description": "Free-form description" + }, + "numberOfSites": { + "type": "integer", + "format": "int64", + "description": "Number of sites in this market", + "readOnly": true + }, + "cdate": { + "type": "string", + "format": "date-time", + "description": "Creation timestamp (UTC)", + "readOnly": true + }, + "edate": { + "type": "string", + "format": "date-time", + "description": "Last modification timestamp (UTC)", + "readOnly": true + } + }, + "title": "SiteMarket", + "required": [ + "name" + ] + }, + "peeringdbSiteMapping": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Peering DB id" + }, + "siteId": { + "type": "string", + "description": "Peering DB site id" + }, + "peeringdbFacId": { + "type": "string", + "description": "Peering DB facility id" + }, + "edate": { + "type": "string", + "format": "date-time", + "description": "Last modification timestamp (UTC)", + "readOnly": true + }, + "cdate": { + "type": "string", + "format": "date-time", + "description": "Creation timestamp (UTC)", + "readOnly": true + }, + "companyId": { + "type": "string", + "description": "Company ID" + } + }, + "required": [ + "id", + "siteId", + "peeringdbFacId" + ] + }, + "description": "List of PeeringDB site mappings associated with this site" + } + }, + "title": "Site", + "required": [ + "title", + "type" + ] + } + }, + "title": "CreateSiteRequest", + "required": [ + "site" + ] + } + }, + "required": [ + "spec" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "site": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "System generated unique identifier", + "readOnly": true + }, + "title": { + "type": "string", + "description": "User selected title/name" + }, + "lat": { + "type": "number", + "format": "double", + "description": "Latitude (signed decimal degrees)" + }, + "lon": { + "type": "number", + "format": "double", + "description": "Longitude (signed decimal degrees)" + }, + "postalAddress": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "Street address" + }, + "city": { + "type": "string", + "description": "City (full name)" + }, + "region": { + "type": "string", + "description": "Geographical region" + }, + "postalCode": { + "type": "string", + "description": "Country specific postal code" + }, + "country": { + "type": "string", + "description": "Country (full name or country code)" + } + }, + "title": "PostalAddress", + "required": [ + "address", + "city", + "country" + ] + }, + "type": { + "type": "string", + "enum": [ + "SITE_TYPE_UNSPECIFIED", + "SITE_TYPE_DATA_CENTER", + "SITE_TYPE_CLOUD", + "SITE_TYPE_BRANCH", + "SITE_TYPE_CONNECTIVITY", + "SITE_TYPE_CUSTOMER", + "SITE_TYPE_OTHER" + ], + "default": "SITE_TYPE_UNSPECIFIED", + "description": "- SITE_TYPE_UNSPECIFIED: Invalid value.\n - SITE_TYPE_DATA_CENTER: Data center site type.\n - SITE_TYPE_CLOUD: Cloud site type.\n - SITE_TYPE_BRANCH: Branch office site type.\n - SITE_TYPE_CONNECTIVITY: Connectivity/PoP site type.\n - SITE_TYPE_CUSTOMER: Customer/partner site type.\n - SITE_TYPE_OTHER: Other site type.", + "title": "SiteType" + }, + "addressClassification": { + "type": "object", + "properties": { + "infrastructureNetworks": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of IP address prefixes (in standard CIDR notation) used in infrastructure networks" + }, + "userAccessNetworks": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of IP address prefixes (in standard CIDR notation) used in access networks" + }, + "otherNetworks": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of IP address prefixes (in standard CIDR notation) used in other networks" + } + }, + "title": "SiteIpAddressClassification" + }, + "architecture": { + "type": "array", + "items": { + "type": "object", + "properties": { + "layers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the network layer" + }, + "deviceIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "IDs of devices that are deemed to be part of the network layer" + } + }, + "title": "Layer" + }, + "description": "List of parallel network layers" + } + }, + "title": "LayerSet" + }, + "description": "Logical network topology/architecture" + }, + "siteMarket": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "System generated unique identifier", + "readOnly": true + }, + "name": { + "type": "string", + "description": "User selected unique name" + }, + "description": { + "type": "string", + "description": "Free-form description" + }, + "numberOfSites": { + "type": "integer", + "format": "int64", + "description": "Number of sites in this market", + "readOnly": true + }, + "cdate": { + "type": "string", + "format": "date-time", + "description": "Creation timestamp (UTC)", + "readOnly": true + }, + "edate": { + "type": "string", + "format": "date-time", + "description": "Last modification timestamp (UTC)", + "readOnly": true + } + }, + "title": "SiteMarket", + "required": [ + "name" + ] + }, + "peeringdbSiteMapping": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Peering DB id" + }, + "siteId": { + "type": "string", + "description": "Peering DB site id" + }, + "peeringdbFacId": { + "type": "string", + "description": "Peering DB facility id" + }, + "edate": { + "type": "string", + "format": "date-time", + "description": "Last modification timestamp (UTC)", + "readOnly": true + }, + "cdate": { + "type": "string", + "format": "date-time", + "description": "Creation timestamp (UTC)", + "readOnly": true + }, + "companyId": { + "type": "string", + "description": "Company ID" + } + }, + "required": [ + "id", + "siteId", + "peeringdbFacId" + ] + }, + "description": "List of PeeringDB site mappings associated with this site" + } + }, + "title": "Site", + "required": [ + "title", + "type" + ] + } + }, + "title": "CreateSiteRequest", + "required": [ + "site" + ] + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-13T02:30:43.377Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "38edc330-bad4-484c-809e-ed1e9d2488b7", + "created": "2026-08-13T02:25:39.498Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 43, + "reference": "4a964f76-afea-4960-bed0-59a764010897", + "type": "workflow", + "folder": "/Sites", + "document": { + "name": "Get Site", + "description": "Get Site", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "GetSite", + "canvasName": "GetSite", + "summary": "GetSite", + "description": "GetSite", + "location": "Adapter", + "locationType": "Kentik Device & Site API:latest", + "app": "Kentik Device & Site API:latest", + "type": "automatic", + "displayName": "Kentik", + "variables": { + "incoming": { + "adapter_id": "Kentik", + "id": "$var.job.id" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-13T02:30:43.377Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "664d7dcc-0d72-4dd4-b7bd-630f31522dea", + "created": "2026-08-13T02:25:39.536Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 44, + "reference": "91b43fdd-9e3b-4734-843e-7910250c53f1", + "type": "workflow", + "folder": "/Sites", + "document": { + "name": "Delete Site", + "description": "Delete Site", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "DeleteSite", + "canvasName": "DeleteSite", + "summary": "DeleteSite", + "description": "DeleteSite", + "location": "Adapter", + "locationType": "Kentik Device & Site API:latest", + "app": "Kentik Device & Site API:latest", + "type": "automatic", + "displayName": "Kentik", + "variables": { + "incoming": { + "adapter_id": "Kentik", + "id": "$var.job.id" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-13T02:30:43.377Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "bc4af4d0-70f0-4d42-9beb-9b4f48efa227", + "created": "2026-08-13T02:25:39.570Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 45, + "reference": "faa1d919-cc39-42f0-aef3-dd9b9b5d32f5", + "type": "workflow", + "folder": "/Sites", + "document": { + "name": "Update Site", + "description": "Update Site", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "UpdateSite", + "canvasName": "UpdateSite", + "summary": "UpdateSite", + "description": "UpdateSite", + "location": "Adapter", + "locationType": "Kentik Device & Site API:latest", + "app": "Kentik Device & Site API:latest", + "type": "automatic", + "displayName": "Kentik", + "variables": { + "incoming": { + "adapter_id": "Kentik", + "id": "$var.job.id", + "bodyContentType": "application/json", + "requestBodyPayload": "$var.job.spec" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "spec": { + "type": "object", + "properties": { + "site": { + "type": "object", + "properties": { + "title": { + "type": "string", + "description": "User selected title/name" + }, + "lat": { + "type": "number", + "format": "double", + "description": "Latitude (signed decimal degrees)" + }, + "lon": { + "type": "number", + "format": "double", + "description": "Longitude (signed decimal degrees)" + }, + "postalAddress": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "Street address" + }, + "city": { + "type": "string", + "description": "City (full name)" + }, + "region": { + "type": "string", + "description": "Geographical region" + }, + "postalCode": { + "type": "string", + "description": "Country specific postal code" + }, + "country": { + "type": "string", + "description": "Country (full name or country code)" + } + }, + "title": "PostalAddress", + "required": [ + "address", + "city", + "country" + ] + }, + "type": { + "type": "string", + "enum": [ + "SITE_TYPE_UNSPECIFIED", + "SITE_TYPE_DATA_CENTER", + "SITE_TYPE_CLOUD", + "SITE_TYPE_BRANCH", + "SITE_TYPE_CONNECTIVITY", + "SITE_TYPE_CUSTOMER", + "SITE_TYPE_OTHER" + ], + "default": "SITE_TYPE_UNSPECIFIED", + "description": "- SITE_TYPE_UNSPECIFIED: Invalid value.\n - SITE_TYPE_DATA_CENTER: Data center site type.\n - SITE_TYPE_CLOUD: Cloud site type.\n - SITE_TYPE_BRANCH: Branch office site type.\n - SITE_TYPE_CONNECTIVITY: Connectivity/PoP site type.\n - SITE_TYPE_CUSTOMER: Customer/partner site type.\n - SITE_TYPE_OTHER: Other site type.", + "title": "SiteType" + }, + "addressClassification": { + "type": "object", + "properties": { + "infrastructureNetworks": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of IP address prefixes (in standard CIDR notation) used in infrastructure networks" + }, + "userAccessNetworks": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of IP address prefixes (in standard CIDR notation) used in access networks" + }, + "otherNetworks": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of IP address prefixes (in standard CIDR notation) used in other networks" + } + }, + "title": "SiteIpAddressClassification" + }, + "architecture": { + "type": "array", + "items": { + "type": "object", + "properties": { + "layers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the network layer" + }, + "deviceIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "IDs of devices that are deemed to be part of the network layer" + } + }, + "title": "Layer" + }, + "description": "List of parallel network layers" + } + }, + "title": "LayerSet" + }, + "description": "Logical network topology/architecture" + }, + "siteMarket": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "System generated unique identifier", + "readOnly": true + }, + "name": { + "type": "string", + "description": "User selected unique name" + }, + "description": { + "type": "string", + "description": "Free-form description" + }, + "numberOfSites": { + "type": "integer", + "format": "int64", + "description": "Number of sites in this market", + "readOnly": true + }, + "cdate": { + "type": "string", + "format": "date-time", + "description": "Creation timestamp (UTC)", + "readOnly": true + }, + "edate": { + "type": "string", + "format": "date-time", + "description": "Last modification timestamp (UTC)", + "readOnly": true + } + }, + "title": "SiteMarket", + "required": [ + "name" + ] + }, + "peeringdbSiteMapping": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Peering DB id" + }, + "siteId": { + "type": "string", + "description": "Peering DB site id" + }, + "peeringdbFacId": { + "type": "string", + "description": "Peering DB facility id" + }, + "edate": { + "type": "string", + "format": "date-time", + "description": "Last modification timestamp (UTC)", + "readOnly": true + }, + "cdate": { + "type": "string", + "format": "date-time", + "description": "Creation timestamp (UTC)", + "readOnly": true + }, + "companyId": { + "type": "string", + "description": "Company ID" + } + }, + "required": [ + "id", + "siteId", + "peeringdbFacId" + ] + }, + "description": "List of PeeringDB site mappings associated with this site" + } + }, + "title": "Site" + } + }, + "title": "UpdateSiteRequest", + "required": [ + "title", + "type", + "site" + ] + } + }, + "required": [ + "id", + "spec" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "spec": { + "type": "object", + "properties": { + "site": { + "type": "object", + "properties": { + "title": { + "type": "string", + "description": "User selected title/name" + }, + "lat": { + "type": "number", + "format": "double", + "description": "Latitude (signed decimal degrees)" + }, + "lon": { + "type": "number", + "format": "double", + "description": "Longitude (signed decimal degrees)" + }, + "postalAddress": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "Street address" + }, + "city": { + "type": "string", + "description": "City (full name)" + }, + "region": { + "type": "string", + "description": "Geographical region" + }, + "postalCode": { + "type": "string", + "description": "Country specific postal code" + }, + "country": { + "type": "string", + "description": "Country (full name or country code)" + } + }, + "title": "PostalAddress", + "required": [ + "address", + "city", + "country" + ] + }, + "type": { + "type": "string", + "enum": [ + "SITE_TYPE_UNSPECIFIED", + "SITE_TYPE_DATA_CENTER", + "SITE_TYPE_CLOUD", + "SITE_TYPE_BRANCH", + "SITE_TYPE_CONNECTIVITY", + "SITE_TYPE_CUSTOMER", + "SITE_TYPE_OTHER" + ], + "default": "SITE_TYPE_UNSPECIFIED", + "description": "- SITE_TYPE_UNSPECIFIED: Invalid value.\n - SITE_TYPE_DATA_CENTER: Data center site type.\n - SITE_TYPE_CLOUD: Cloud site type.\n - SITE_TYPE_BRANCH: Branch office site type.\n - SITE_TYPE_CONNECTIVITY: Connectivity/PoP site type.\n - SITE_TYPE_CUSTOMER: Customer/partner site type.\n - SITE_TYPE_OTHER: Other site type.", + "title": "SiteType" + }, + "addressClassification": { + "type": "object", + "properties": { + "infrastructureNetworks": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of IP address prefixes (in standard CIDR notation) used in infrastructure networks" + }, + "userAccessNetworks": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of IP address prefixes (in standard CIDR notation) used in access networks" + }, + "otherNetworks": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of IP address prefixes (in standard CIDR notation) used in other networks" + } + }, + "title": "SiteIpAddressClassification" + }, + "architecture": { + "type": "array", + "items": { + "type": "object", + "properties": { + "layers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the network layer" + }, + "deviceIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "IDs of devices that are deemed to be part of the network layer" + } + }, + "title": "Layer" + }, + "description": "List of parallel network layers" + } + }, + "title": "LayerSet" + }, + "description": "Logical network topology/architecture" + }, + "siteMarket": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "System generated unique identifier", + "readOnly": true + }, + "name": { + "type": "string", + "description": "User selected unique name" + }, + "description": { + "type": "string", + "description": "Free-form description" + }, + "numberOfSites": { + "type": "integer", + "format": "int64", + "description": "Number of sites in this market", + "readOnly": true + }, + "cdate": { + "type": "string", + "format": "date-time", + "description": "Creation timestamp (UTC)", + "readOnly": true + }, + "edate": { + "type": "string", + "format": "date-time", + "description": "Last modification timestamp (UTC)", + "readOnly": true + } + }, + "title": "SiteMarket", + "required": [ + "name" + ] + }, + "peeringdbSiteMapping": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Peering DB id" + }, + "siteId": { + "type": "string", + "description": "Peering DB site id" + }, + "peeringdbFacId": { + "type": "string", + "description": "Peering DB facility id" + }, + "edate": { + "type": "string", + "format": "date-time", + "description": "Last modification timestamp (UTC)", + "readOnly": true + }, + "cdate": { + "type": "string", + "format": "date-time", + "description": "Creation timestamp (UTC)", + "readOnly": true + }, + "companyId": { + "type": "string", + "description": "Company ID" + } + }, + "required": [ + "id", + "siteId", + "peeringdbFacId" + ] + }, + "description": "List of PeeringDB site mappings associated with this site" + } + }, + "title": "Site" + } + }, + "title": "UpdateSiteRequest", + "required": [ + "title", + "type", + "site" + ] + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-13T02:30:43.377Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "6dba4f3c-bd9a-436c-9fbe-900a42510f66", + "created": "2026-08-13T02:25:39.605Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 46, + "reference": "bbcc19f3-2741-4510-a2f6-1bb3a4d77987", + "type": "workflow", + "folder": "/Site Markets", + "document": { + "name": "List Site Markets", + "description": "List Site Markets", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "ListSiteMarkets", + "canvasName": "ListSiteMarkets", + "summary": "ListSiteMarkets", + "description": "ListSiteMarkets", + "location": "Adapter", + "locationType": "Kentik Device & Site API:latest", + "app": "Kentik Device & Site API:latest", + "type": "automatic", + "displayName": "Kentik", + "variables": { + "incoming": { + "adapter_id": "Kentik" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": {} + }, + "outputSchema": { + "type": "object", + "properties": { + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-13T02:30:43.377Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "6b375b45-36fc-4178-b6ed-b2707be447a4", + "created": "2026-08-13T02:25:39.633Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 47, + "reference": "0369caff-9221-45fb-81a9-8d90faf2a691", + "type": "workflow", + "folder": "/Site Markets", + "document": { + "name": "Create Site Market", + "description": "Create Site Market", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "CreateSiteMarket", + "canvasName": "CreateSiteMarket", + "summary": "CreateSiteMarket", + "description": "CreateSiteMarket", + "location": "Adapter", + "locationType": "Kentik Device & Site API:latest", + "app": "Kentik Device & Site API:latest", + "type": "automatic", + "displayName": "Kentik", + "variables": { + "incoming": { + "adapter_id": "Kentik", + "bodyContentType": "application/json", + "requestBodyPayload": "$var.job.spec" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "siteMarket": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "System generated unique identifier", + "readOnly": true + }, + "name": { + "type": "string", + "description": "User selected unique name" + }, + "description": { + "type": "string", + "description": "Free-form description" + }, + "numberOfSites": { + "type": "integer", + "format": "int64", + "description": "Number of sites in this market", + "readOnly": true + }, + "cdate": { + "type": "string", + "format": "date-time", + "description": "Creation timestamp (UTC)", + "readOnly": true + }, + "edate": { + "type": "string", + "format": "date-time", + "description": "Last modification timestamp (UTC)", + "readOnly": true + } + }, + "title": "SiteMarket", + "required": [ + "name" + ] + } + }, + "title": "CreateSiteMarketRequest", + "required": [ + "siteMarket" + ] + } + }, + "required": [ + "spec" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "spec": { + "type": "object", + "properties": { + "siteMarket": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "System generated unique identifier", + "readOnly": true + }, + "name": { + "type": "string", + "description": "User selected unique name" + }, + "description": { + "type": "string", + "description": "Free-form description" + }, + "numberOfSites": { + "type": "integer", + "format": "int64", + "description": "Number of sites in this market", + "readOnly": true + }, + "cdate": { + "type": "string", + "format": "date-time", + "description": "Creation timestamp (UTC)", + "readOnly": true + }, + "edate": { + "type": "string", + "format": "date-time", + "description": "Last modification timestamp (UTC)", + "readOnly": true + } + }, + "title": "SiteMarket", + "required": [ + "name" + ] + } + }, + "title": "CreateSiteMarketRequest", + "required": [ + "siteMarket" + ] + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-13T02:30:43.377Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "f6e8b435-68ae-42f8-a47e-27b43e123136", + "created": "2026-08-13T02:25:39.663Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 48, + "reference": "8c21f50c-a734-4c2b-bb53-6a94663370dd", + "type": "workflow", + "folder": "/Site Markets", + "document": { + "name": "Get Site Market", + "description": "Get Site Market", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "GetSiteMarket", + "canvasName": "GetSiteMarket", + "summary": "GetSiteMarket", + "description": "GetSiteMarket", + "location": "Adapter", + "locationType": "Kentik Device & Site API:latest", + "app": "Kentik Device & Site API:latest", + "type": "automatic", + "displayName": "Kentik", + "variables": { + "incoming": { + "adapter_id": "Kentik", + "id": "$var.job.id" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-13T02:30:43.377Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "ed776f72-1c91-481c-b556-845a415cc75b", + "created": "2026-08-13T02:25:39.694Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 49, + "reference": "563eab3e-1d79-44a1-b59e-7774507db67d", + "type": "workflow", + "folder": "/Site Markets", + "document": { + "name": "Delete Site Market", + "description": "Delete Site Market", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "DeleteSiteMarket", + "canvasName": "DeleteSiteMarket", + "summary": "DeleteSiteMarket", + "description": "DeleteSiteMarket", + "location": "Adapter", + "locationType": "Kentik Device & Site API:latest", + "app": "Kentik Device & Site API:latest", + "type": "automatic", + "displayName": "Kentik", + "variables": { + "incoming": { + "adapter_id": "Kentik", + "id": "$var.job.id" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-13T02:30:43.377Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "faf7bb2c-0cb4-4100-83c3-645aaae661c3", + "created": "2026-08-13T02:25:39.724Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + }, + { + "iid": 50, + "reference": "e3b06951-d885-4c30-a224-08951a13bd91", + "type": "workflow", + "folder": "/Site Markets", + "document": { + "name": "Update Site Market", + "description": "Update Site Market", + "type": "automation", + "font_size": 12, + "tasks": { + "workflow_start": { + "name": "workflow_start", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 0 + } + }, + "a1a1": { + "name": "UpdateSiteMarket", + "canvasName": "UpdateSiteMarket", + "summary": "UpdateSiteMarket", + "description": "UpdateSiteMarket", + "location": "Adapter", + "locationType": "Kentik Device & Site API:latest", + "app": "Kentik Device & Site API:latest", + "type": "automatic", + "displayName": "Kentik", + "variables": { + "incoming": { + "adapter_id": "Kentik", + "id": "$var.job.id", + "bodyContentType": "application/json", + "requestBodyPayload": "$var.job.spec" + }, + "outgoing": { + "response": null + }, + "error": "", + "decorators": [] + }, + "groups": [], + "actor": "Pronghorn", + "scheduled": false, + "nodeLocation": { + "x": 264, + "y": 150 + } + }, + "workflow_end": { + "name": "workflow_end", + "groups": [], + "nodeLocation": { + "x": 264, + "y": 300 + } + } + }, + "transitions": { + "workflow_start": { + "a1a1": { + "type": "standard", + "state": "success" + } + }, + "a1a1": { + "workflow_end": { + "type": "standard", + "state": "success" + } + }, + "workflow_end": {} + }, + "inputSchema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "spec": { + "type": "object", + "properties": { + "siteMarket": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "User selected unique name" + }, + "description": { + "type": "string", + "description": "Free-form description" + }, + "numberOfSites": { + "type": "integer", + "format": "int64", + "description": "Number of sites in this market", + "readOnly": true + }, + "cdate": { + "type": "string", + "format": "date-time", + "description": "Creation timestamp (UTC)", + "readOnly": true + }, + "edate": { + "type": "string", + "format": "date-time", + "description": "Last modification timestamp (UTC)", + "readOnly": true + } + }, + "title": "SiteMarket" + } + }, + "title": "UpdateSiteMarketRequest", + "required": [ + "name", + "siteMarket" + ] + } + }, + "required": [ + "id", + "spec" + ] + }, + "outputSchema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "spec": { + "type": "object", + "properties": { + "siteMarket": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "User selected unique name" + }, + "description": { + "type": "string", + "description": "Free-form description" + }, + "numberOfSites": { + "type": "integer", + "format": "int64", + "description": "Number of sites in this market", + "readOnly": true + }, + "cdate": { + "type": "string", + "format": "date-time", + "description": "Creation timestamp (UTC)", + "readOnly": true + }, + "edate": { + "type": "string", + "format": "date-time", + "description": "Last modification timestamp (UTC)", + "readOnly": true + } + }, + "title": "SiteMarket" + } + }, + "title": "UpdateSiteMarketRequest", + "required": [ + "name", + "siteMarket" + ] + }, + "_id": { + "type": "string", + "pattern": "^[0-9a-f]{24}$" + }, + "initiator": { + "type": "string" + } + } + }, + "last_updated": "2026-08-13T02:30:43.377Z", + "last_updated_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "lastUpdatedVersion": "4.69.69", + "uuid": "7f3a6b65-9754-4ad3-bfe0-9cab68e5fa71", + "created": "2026-08-13T02:25:39.758Z", + "created_by": { + "provenance": "LDAP", + "username": "admin@itential", + "firstname": "admin@itential", + "inactive": false + }, + "createdVersion": "5.55.5", + "scenarios": [], + "canvasVersion": 3, + "tags": [], + "groups": [], + "migrationVersion": 8 + } + } + ], + "folders": [ + { + "nodeType": "folder", + "name": "Create Device", + "children": [ + { + "iid": 8, + "nodeType": "component" + }, + { + "iid": 25, + "nodeType": "component" + } + ] + }, + { + "nodeType": "folder", + "name": "Device Flow Test", + "children": [ + { + "iid": 27, + "nodeType": "component" + }, + { + "iid": 3, + "nodeType": "component" + } + ] + }, + { + "nodeType": "folder", + "name": "Sample Use Cases", + "children": [ + { + "nodeType": "folder", + "name": "AWS Blocked Traffic Event", + "children": [ + { + "iid": 9, + "nodeType": "component" + }, + { + "iid": 21, + "nodeType": "component" + }, + { + "iid": 20, + "nodeType": "component" + }, + { + "iid": 0, + "nodeType": "component" + } + ] + }, + { + "nodeType": "folder", + "name": "AWS Blocked Traffic Event - Reset", + "children": [ + { + "iid": 15, + "nodeType": "component" + }, + { + "iid": 2, + "nodeType": "component" + }, + { + "iid": 29, + "nodeType": "component" + } + ] + }, + { + "nodeType": "folder", + "name": "Device Onboarding", "children": [ { "iid": 14, @@ -14401,6 +21022,104 @@ ] } ] + }, + { + "nodeType": "folder", + "name": "Devices", + "children": [ + { + "iid": 31, + "nodeType": "component" + }, + { + "iid": 32, + "nodeType": "component" + }, + { + "iid": 33, + "nodeType": "component" + }, + { + "iid": 34, + "nodeType": "component" + }, + { + "iid": 35, + "nodeType": "component" + }, + { + "iid": 36, + "nodeType": "component" + }, + { + "iid": 37, + "nodeType": "component" + }, + { + "iid": 38, + "nodeType": "component" + }, + { + "iid": 39, + "nodeType": "component" + }, + { + "iid": 40, + "nodeType": "component" + } + ] + }, + { + "nodeType": "folder", + "name": "Sites", + "children": [ + { + "iid": 41, + "nodeType": "component" + }, + { + "iid": 42, + "nodeType": "component" + }, + { + "iid": 43, + "nodeType": "component" + }, + { + "iid": 44, + "nodeType": "component" + }, + { + "iid": 45, + "nodeType": "component" + } + ] + }, + { + "nodeType": "folder", + "name": "Site Markets", + "children": [ + { + "iid": 46, + "nodeType": "component" + }, + { + "iid": 47, + "nodeType": "component" + }, + { + "iid": 48, + "nodeType": "component" + }, + { + "iid": 49, + "nodeType": "component" + }, + { + "iid": 50, + "nodeType": "component" + } + ] } ], "created": "2024-08-29T08:35:09.917Z", @@ -14418,4 +21137,4 @@ "iid": 63, "thumbnail": "data:image/png;base64,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", "backgroundColor": "#FFFFFF" -} +} \ No newline at end of file